有没有大佬懂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 {, '*', '/', '+', '-'}
有没有懂的大佬指教下!
回复
1个回答
test
2024-06-24
原因
你的 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;
结果
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容