Как использовать отрицание выражения в грамматике ANTLR - PullRequest
1 голос
/ 25 марта 2019

У меня есть ниже, чтобы реализовать в грамматике 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 голосов
/ 25 марта 2019

! в ! EXPR, вероятно, является буквальным восклицательным знаком.Поэтому добавьте это как правило лексера:

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

...

NOT : '!';
...