我正在写一个解析器,但我不知道为什么我不能解析这个:
Proceso A
varX <- - 4;
FinProceso
I'm getting
line 2:12 extraneous input '-' expecting {NEGOP, '(', '-', INT, DOUBLE, STRING, BOOL, ID}
这是我在ANTLR中的语法
语法说明
您的语法由两个匹配字符-
的词汇组成:SUMOP和NEG。在您的示例中,SUMOP lexem将始终由词法分析器生成,因为它在NEG lexem之前定义。因此,永远不会使用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选项的顺序来实现这一点。
标题>