DebugEventListener类型中的enterDecision(int)不适用于参数(int,boolean)?

时间:2012-03-11 09:50:04

标签: antlr

我使用ANTLR 3.1.3生成解析器。导入生成的testParser后,我发现有几个错误,如

尝试{dbg.enterDecision(2,decisionCanBacktrack [2]);

描述资源路径位置类型 DebugEventListener类型中的方法enterDecision(int)不适用于参数(int,boolean)testParser.java / ANTLRTest / src第280行Java问题

如果我改为dbg.enterDecision(2),那么一切都很好。

语法如下,

grammar Test;  

options {output=AST;}

expr : mexpr (PLUS^ mexpr)* SEMI! ; 

mexpr : atom (STAR^ atom)* ;  
atom: INT ;  
//class csharpTestLexer extends Lexer;  
WS : (' ' | '\t' | '\n' | '\r') { $channel = HIDDEN; } ;  
LPAREN: '(' ;  
RPAREN: ')' ;  
STAR: '*' ;  
PLUS: '+' ;  
SEMI: ';' ; 

DIGIT : '0'..'9' ;  
INT : (DIGIT)+ ;  

我正在使用ANTLRWorks 1.4.3生成词法分析器和解析器。

JDK 1.6

出现此错误的原因是什么?

1 个答案:

答案 0 :(得分:2)

看起来你已经生成了一个带有ANTLR版本的词法分析器和解析器,它与你添加到Eclipse类路径的版本不同。

如果使用ANTLRWorks 1.4.3(包含ANTLR 3.4)生成词法分析器和/或解析器,则还应将ANTLR 3.4添加到Eclipse中项目的构建路径中,并从中删除ANTLR 3.1.3。

  顺便说一句,我得到2 + 2 * 3的错误,你知道为什么吗?上述语法有什么不妥。

这是因为单个数字被标记为DIGIT个令牌。要使DIGIT成为片段:

fragment DIGIT : '0'..'9' ;  
INT : (DIGIT)+ ;  

或删除它:

INT : '0'..'9'+ ;  

请参阅:What does "fragment" mean in ANTLR?