Antlr4:Antlr4中的外部输入

Antlr4:Antlr4中的外部输入,antlr4,Antlr4,我在运行语法输入流时遇到问题,这是我语法的一部分 expression : .... | ( '+' | '-' | '&' |) expression | expression ('+'|'-') expression .... ; 当输入流如2+2-2或(2+2+2)-2时,会发生错误 line 10:30 extraneous input '-2' expecting {',', '^',...} 为什么我的语法不能区分-2和2-2? 谁来帮帮我 看来您编

我在运行语法输入流时遇到问题,这是我语法的一部分

expression  
:  .... 
|   ( '+' | '-' | '&' |) expression
|   expression ('+'|'-') expression
   ....
;
当输入流如2+2-2或(2+2+2)-2时,会发生错误

line 10:30 extraneous input '-2' expecting {',', '^',...}
为什么我的语法不能区分-2和2-2?
谁来帮帮我

看来您编写lexer的方式是
-2
生成一个令牌。不要以这种方式处理负数,而是将
-
视为一元运算符,并允许解析器处理求反操作。如果您试图直接在lexer中处理负数,那么像
2-2
这样的输入将作为两个连续的数字标记(
2
,后跟
-2
)而不是所需的3个标记(
2
-
2
)发送到解析器。很抱歉,我只是复制了java.g4的一部分(仅限表达式规则)来自antlr v4示例手册。你能给我举个例子来解决这个问题吗?好的,我知道你的意思,因为我在小数点加了前缀:('-')?('0'|'1'..'9'0'..'9'*)整型后缀;谢谢你,山姆。