有没有大佬懂antlr,这段简单的antlr为什么会报错?
grammar Expr;prog: expr EOF;
expr: expr('*'|'/') expr #MultiOrDiv
| expr('+'|'-') expr #AddOrSub
| INT #Lieteral
| '(' expr ')' #Single
;
NEWLINE : [\r\n]+ -> skip;
刚学antlr,最简单的这个antlr应该是实现加减乘除法,但是一直报语法错误
1:1 token recognition error at: '+'1:3 token recognition error at: '*'
1:2 mismatched input '2' expecting {, '*', '/', '+', '-'}
有没有懂的大佬指教下!
回答:
原因
你的 INT
没有定义。
解决方法
grammar Expr;fragment Digits
: [0-9] ([0-9_]* [0-9])?
;
INT: ('0' | [1-9] (Digits? | '_'+ Digits));
prog: expr EOF;
expr: expr('*'|'/') expr #MultiOrDiv
| expr('+'|'-') expr #AddOrSub
| INT #Lieteral
| '(' expr ')' #Single
;
NEWLINE : [\r\n]+ -> skip;
结果
以上是 有没有大佬懂antlr,这段简单的antlr为什么会报错? 的全部内容, 来源链接: utcz.com/p/945442.html