Negative expression ANTLR



我正在写一个解析器,但我不知道为什么我不能解析这个:

Proceso A
    varX <- - 4;
FinProceso

I'm getting

line 2:12 extraneous input '-' expecting {NEGOP, '(', '-', INT, DOUBLE, STRING, BOOL, ID}

这是我在ANTLR中的语法

语法

说明

您的语法由两个匹配字符-的词汇组成:SUMOPNEG。在您的示例中,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选项的顺序来实现这一点。

相关内容

  • 没有找到相关文章

最新更新