我在下面用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 : '!';