我正在写一个解析器,但我不知道为什么我无法解析它:
Proceso A
varX <- - 4;
FinProceso
我正在
line 2:12 extraneous input '-' expecting {NEGOP, '(', '-', INT, DOUBLE, STRING, BOOL, ID}
这是我在ANTLR中的语法
答案 0 :(得分:0)
您的语法包含两个匹配字符-
的词汇: SUMOP 和 NEG 。在你的情况下,词典总是会生成 SUMOP 词法,因为它是在 NEG 词法之前定义的。因此,永远不会使用规则 operatorUnary 。
SUMOP : ('+' | '-');
NEG : '-';
expr
: expr SUMOP expr
| operatorUnary expr
;
operatorUnary: '-';
你应该设置你的词汇。例如,您可以删除 NEG lexem并仅使用 SUMOP lexem。
SUMOP : ('+' | '-');
expr
: SUMOP expr // higher precedence
| expr SUMOP expr // lower precedence
;
通常,最好使一元否定运算符的优先级高于二元加法和/或减法运算符。您可以通过更改规则 expr 替代方案的顺序来实现此目的。