2010-11-28 3 views
3

ANTLR에서 AST를 작성하는 동안 문제가 있습니다 (ANTLR 3.2, ANTLRWorks 1.4 사용). - ('extends' e=IDENTIFIER)?ANTLR의 AST에 대한 선택적 다시 쓰기 규칙

classDeclaration 
    : 
    (
     'class' n=IDENTIFIER ('extends' e=IDENTIFIER)? 
     '{' 
     … 
     '}' 
    ) 
     -> ^(CLASSDECLARATION ^(NAME $n) ^(EXTENDS $e) 
; 

문제는 클래스의 선택적 부분에 발생

내 문법이다. 다음과 같이

class Test1 extends AbstractTest1 { 
… 
} 

내가 extends 부분을 제외하면 실패 :

class Test2 { 
… 
} 

ANTLR 그냥이 조각되기 전에 중지하고이 예외를 제공

그래서 문법이 클래스 선언으로 좋은 작품 콘솔 :

다시 쓰기 규칙을 처리하기 위해 ANTLR을 가리킬 수 있습니까 ^(EXTENDS $e)은 선택 사항입니까?

답변

2

문제가 해결되었습니다. 까다로운 것은 아니며 일반적인 RegExp 구문을 사용해야합니다.

^(EXTENDS $e)?