有没有大佬懂antlr,这段简单的antlr为什么会报错?

image.png

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 {, '*', '/', '+', '-'}

有没有懂的大佬指教下!

阅读 735
1 个回答

原因

你的 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;

结果

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题