2009-11-12 2 views
1

간단한 DSL에 대한 ANTLR 문법을 사용하며 구문 오류가없는 경우 모든 기능이 원활하게 작동합니다. 그러나 이제 자동 완성 메커니즘을 지원해야합니다. 특성, 함수 등에서 기본 유형 검사를 수행하는 트리 문법에서 가능한 완성을 얻을 필요가 있습니다.잘못된 형식의 ANTLR 문을 ANTLR로 허용 (예 : 코드 완성)

문제는 ANTLR이 로컬 statement 레벨에서 구문 오류를보고하지만 구문 분석 트리를 멀리 (예 : program 또는 function 수준)보고합니다. 따라서, 대신 나는 statement 규칙과 일치하는 실패로, 나무의 상단에 쓰레기 노드를 얻을

   program 
       | 
      function 
      / | \ 
     / |  \ 
     stat hosed stat 

처럼 보이는 AST의 "버블"과 일치의 function 규칙을 방지 할 수 있습니다.

예기치 않은 토큰을 먹는 "catch-all"절이있는 규칙을 작성하는 방법이 있습니까?

내가 좋아하는 뭔가 생각 해요 :

statement 
    : var_declaration 
    | if_statement 
    | for_loop 
    | garbage 
    ; 

garbage 
    : /* Match unexpected tokens, etc. (not actual statements, or closing 
     parens, braces, etc.). Maybe just consume one input token and let 
     the parser try again? */ 
    ; 

전 (바람직 이후) 쓰레기가 제정신 있어야 할 대서양 표준시 쓰레기 ​​노드의 수 있지만, 모든이있을 수 있습니다.

모든 힌트/제안/포인터/등 감사드립니다. Java 타겟 인 ANTLR v3을 사용하고 있습니다. 이 ANTLR 3을 기반으로하고 구문 hilighting와 코드 지원과 함께 좋은 편집기를 생성 - 당신이 일식을 대상으로하는 경우 xtext (http://www.eclipse.org/Xtext/)를 보라 :

답변

1
+0

위키에 설명 된 catch 절이 있지만 예외적 인 것은 분명히 특정 hook 문이 아니라 overarching function 규칙에서 발생합니다. 내 문법은 부분적인 문장을 지원할 필요가있다.하지만 나는 함께 해킹하지 않았다 ... Xtext는 흥미로운 대안이다. 링크를 가져 주셔서 감사합니다. –