2011-12-12 4 views
2

ANTLR을 사용하여 DSL에서 Java 로의 변환기를 작성하려고합니다. 그래서 두 개의 서로 다른 문법을 사용하여 렉서와 파서를 작성했습니다. 이제 트리 문법을 작성해야하며 내 결과를 얻기위한 최상의 방법 (또는 권장되는 방법)을 알고 싶습니다. 좀 더 정확히 말하자면, 어떤 것을 가장 잘하는 방법인지 알고 싶습니다. 트리를 특성 (예 : 유형 추가)과 최적화로 풍부하게 만드십시오.ANTLR 기반 변환기의 구조 (모범 사례)

유형을 식별하고 최적화를 위해 다른 트리 문법을 작성하고 파서 이후와 최종 코드 생성 트리 문법 이전에 순차적으로 호출해야합니까? 유지 보수가 더 쉬운 다른 방법이 있습니까? 나 또한 유형을 식별하기 위해 파서가 생성 한 트리를 수동으로 파싱하는 방법에 대해서도 설명했다. 그러나 이것은 유지하는 것이 아주 중요합니다.

감사합니다.

답변

1

실제적인 모범 사례는 없습니다. 상식과 개인적인 취향입니다.

그러나 AST를 통한 별도의 전달에서 특정 속성을 노드에 추가하는 것을 최적화 작업 (^(* 0 ^(...))에서 0으로 다시 작성)과 분리하는 것이 더 논리적입니다. 퍼포먼스에 대해 너무 걱정하지 마라. 트리 워킹은 꽤 빠르다 : 대부분의 시간은 보통 파싱하는 동안 소비된다. 그리고 ANTLR 3.2의 추가로 tree pattern matching을 사용하면 꽤 작은 트리 문법을 작성하여 AST에서 매우 특정한 작업을 수행 할 수 있습니다 (유지 관리가 쉽습니다!). Systematic way to generate ANTLR tree grammar?

:

은 또한에 대해 수동으로 AST를 걷거나 그것을위한 나무 문법을 사용하는이 이전 Q & A 참조

관련 문제