我的语法运行输入流有问题,这是我语法的一部分
expression
: ....
| ( '+' | '-' | '&' |) expression
| expression ('+'|'-') expression
....
;
当输入流如2 + 2-2或(2 + 2 + 2)-2时,发生错误
line 10:30 extraneous input '-2' expecting {',', '^',...}
为什么我的语法不能区分-2和2-2? 有人帮帮我!
答案 0 :(得分:2)
您似乎已经以-2
导致单个令牌的方式编写了词法分析器。不要以这种方式处理负数,而是将-
视为一元运算符,并允许解析器处理否定操作。如果您尝试直接在词法分析器中处理负数,则2-2
等输入将作为2个连续数字标记(2
后跟-2
)而不是所需的3来发送给解析器令牌(2
,-
,2
)。