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

问题描述 投票:1回答:1

我在下面用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)。我怎么写这个否定?

antlr antlr3
1个回答
0
投票

!中的! EXPR可能是字面上的感叹号。所以将它添加为词法分析器规则:

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

...

NOT : '!';
© www.soinside.com 2019 - 2024. All rights reserved.