我正在用前缀表示法编写算术表达式的语法。但是,在解析负数或减法时我遇到了问题。语法示例是这样的:
precedence right +, -;
precedence right *, /;
precedence right uminus;
E ::= + E E
| - E E
| * E E
| / E E
| ( E )
| - E %prec uminus
| id
| digit
;
但是,如果我的输入是- 5 4
,它会减少5
为E
,然后它会减少- E
(负数),然后解析器会在 处给我一个语法错误4
。正确的应该是5
as E
, next 4
asE
和- E E
as E
。如何使用关联性解决这个问题?还是我需要重写我的语法?