如何在ANTLR文法中使用表达式否定

How to use expression negation in ANTLR grammar

我有以下要在 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)。我该如何写否定?

! EXPR中的!大概是字面上的感叹号吧。所以将其添加为词法分析器规则:

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

...

NOT : '!';