如何在ANTLR语法中使用表达式求反

时间:2019-03-25 13:14:28

标签: antlr antlr3

我要在下面实现ANTLR语法。

INPUT → EXPR ;
EXPR → if EXPR then EXPR else EXPR
         | { EXPR (; EXPR)* }
         | ! EXPR
         | id := EXPR

我已经完成了'expr'的工作,但是在编写!expr时出错。

input   : expr SEMICOLON;

expr    :   IF expr THEN expr ELSE expr 
|   ID ASSIGN expr  
    |   OBRACE expr ( SEMICOLON expr )* CBRACE
    |   !expr

    ;

此行显示错误-(!expr)。如何写取反符?

1 个答案:

答案 0 :(得分:0)

!中的! EXPR可能是文字感叹号。因此,将其添加为词法分析器规则:

expr
 : IF expr THEN expr ELSE expr 
 | ID ASSIGN expr  
 | OBRACE expr ( SEMICOLON expr )* CBRACE
 | NOT expr
 ;

...

NOT : '!';