我使用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
出现此错误的原因是什么?
答案 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'+ ;