2016-10-28 3 views
1

мы знали, что приоритет логической операции от сильного к низкому: Не И Или Я хочу, чтобы добавить логическую операцию моей грамматике в пути соблюдать приоритет логическая операция. ... Мой грамматику является:Как написать контекстно-свободную грамматику аспекта приоритета операций в antlr4

expression : factor (PLUS factor | MINUS factor)* ; 
factor : term (MULT term | DIV term)* ; 
term : NUMBER | ID | PAR_OPEN expression PAR_CLOSE ; 

Таким образом, любая помощь?

ответ

0

С ANTLR3 и ANTLR 4, вы можете лань что-то вроде этого: (! Что эквивалентно грамматике выше)

expression 
: or_expression 
; 

// lowest precedence 
or_expression 
: and_expression ('||' and_expression)* 
; 

and_expression 
: rel_expression ('&&' rel_expression)* 
; 

rel_expression 
: add_expression (('<' | '<=' | '>' | '>=') add_expression)* 
; 

add_expression 
: mult_expression (('+' | '-') mult_expression)* 
; 

mult_expression 
: unary_expression (('*' | '/') unary_expression)* 
; 

unary_expression 
: '-' atom 
| atom 
; 

// highest precedence 
atom 
: NUMBER 
| ID 
| '(' expression ')' 
; 

И с ANTLR4, вы также можете написать это так:

expression 
: '!' expression 
| expression ('*' | '/') expression    // higher than '+' | '-' 
| expression ('+' | '-') expression    // higher than '<' | '<=' | '>' | '>=' 
| expression ('<' | '<=' | '>' | '>=') expression // higher than '&&' 
| expression '&&' expression      // higher than '||' 
| expression '||' expression 
| NUMBER 
| ID 
| '(' expression ')' 
; 
+0

Так что я должен только написать: выражение: '!' выражение | выражение '&&' выражение // выше, чем '||' | выражение '||' выражение | фактор (коэффициент PLUS | коэффициент МИНУС) *; @Bart – sara

+0

Спасибо вам большое @Bart – sara

+0

Добро пожаловать @sara. –