2011-04-24 2 views
3

저는 Stratego/XT를 이해하는 첫 단계를 실제로 생각해 보았습니다. 내가 많이 봤 거든 내가 찾은 모든 웹 자원은 처음에는 연결을 만들 수없는 큰 도약을 만드는 것 같습니다. 설명하겠습니다. 문서는이이 도약을Stratego/XT : 기초 지식 이해하기

Minus(Call(Var("f"),[Plus(Var("a"),Int("10"))]),Int("3")) 

그러나 그것은 (심지어 바로 다음 문장에서) 같다 :

LetSplit : 
    Let([d1, d2 | d*], e*) -> 
    Let([d1], Let([d2 | d*], e*)) 

이것은 말도 안돼

이 같은 추상 구문 트리를 이해 나에게. 누군가 LetSplit으로 무슨 일이 일어나고 있는지 설명 할 수 있습니까?

또한 Stratego/XT 웹 사이트에서 garganutan 및 복잡한 공식 "튜토리얼"을 읽기 쉽도록 Stratego/XT를 확실하게 이해할 수있는 좋은 자료가 있습니까?

감사합니다.

답변

3
LetSplit : 
    Let([d1, d2 | d*], e*) -> 
    Let([d1], Let([d2 | d*], e*)) 

이 이름 LetSplit와 재 작성 규칙입니다.

그것은 전략에 해당 (문법 설탕)입니다 : 호출되면

LetSplit = 
    ?Let([d1, d2 | d*], e*) ;  // match 
    !Let([d1], Let([d2 | d*], e*)) // build 

가, 다음, 왼쪽 Let([d1, d2 | d*], e*)합니다 (경기 부분)가 당기 일치 현재 용어가 오른쪽 Let([d1], Let([d2 | d*], e*)) (빌드 부분)으로 바뀝니다. 왼쪽 편이 일치하지 않으면 규칙이 실패하고 현재 용어가 변경되지 않습니다.

d1, d2, d *, e *는 일치하는 동안 각 위치에서 발견 된 하위 용어에 바인딩 된 용어 변수입니다. 이름은 빌드 파트에서 사용되며 이전에 바인딩 된 하위 트리로 확장됩니다. 사실, *와 '는 용어 변수 이름의 끝에 나타날 수 있습니다. 작은 따옴표에는 특별한 의미가 없지만 *는 목록 작성 작업에서 특별한 의미가 있습니다 (여기서는 그렇지 않습니다).

일치 부분의 [d1, d2 | d*] 구문은 두 개 이상의 요소가있는 목록을 찾습니다. 이러한 요소는 d1과 d2에 바인딩되고 목록의 나머지 요소는 d *에 바인딩됩니다 (따라서 d *는 목록이되며 빈 목록 [] 일 수 있음). 또한

, 읽기 쉽게 스트라 테고/XT의 확실한 이해를 발전을위한 좋은 자원이 그 스트라 테고/XT 웹 사이트의 garganutan 복잡한 공식 "튜토리얼"?

연구 논문. 비록 그들이 정말로 쉽게 읽을 수는 없지만 논쟁의 여지가 있지만 더 진보 된 개념이 설명되는 유일한 곳이라고 할 수 있습니다.

유래 여기에 더 질문을 주시기 바랍니다, 나는

+0

:-) 그들에게 대답하려고 ... 그리고 빛 것 클릭합니다. 고마워, 토비. –