有没有大佬懂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

回到顶部