2012-10-23 5 views
6

작은 토크에 대한 추상 구문 트리 메타 모델을 개발 중이며 지금은 블록 모델링에 문제가 있습니다. 그들은 일종의 리터럴이지만 다른 한편으로는 메소드와 같은 행위 적 실체입니다. 블록은 일종의 람다 (lambda) 함수이므로 어쩌면 누군가가 그들과 함께 작업하는 더 나은 실천을했을 것입니다.람다 함수의 Ast 표현

모든 조언에 감사드립니다.

답변

8

리팩토링 브라우저에는 매우 훌륭한 AST가 있으며 구현을 살펴보십시오.

질문 : Refactoring Browser는 블록과 메소드의 공유 부분을 SequenceNode이라는 별도의 노드 유형으로 추출합니다. 순서 노드는 temps 및 명령문 시퀀스를 모델링합니다. 그런 다음 블록 노드는 시퀀스 노드를 래핑하고 인수를 추가하며 값 노드의 공유 동작을 상속합니다. 메서드 노드는 시퀀스 노드를 래핑하고 메서드 이름, 인수, pragma 등을 추가합니다.