2010-11-28 88 views
3

在ANTLR中构建AST时遇到问题(我正在使用ANTLR 3.2,ANTLRWorks 1.4)。ANTLR中AST的可选重写规则

这是我的语法:

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

与类的可选部分出现问题 - ('extends' e=IDENTIFIER)?

所以语法工作好与此类声明:

class Test1 extends AbstractTest1 { 
… 
} 

当我排除extends部分出现故障,具体如下:

class Test2 { 
… 
} 

ANTLR这个片段之前只是停止并给出了此异常控制台: javax.swing.text.BadLocationException: Position not represented by view

我该如何指向ANTLR来处理重写规则^(EXTENDS $e)作为可选项?

回答

2

解决了问题。没有什么棘手的,只是不得不使用普通的RegExp语法:

^(EXTENDS $e)?