私は次の文法を持っています
grammar Expr;
prog: expr;
expr: LP expr RP
| expr LP expr RP
| LP expr RP expr
| expr '*' '{' ',' expr
| expr op=NOT expr
| expr op=AND expr
| expr op=OR expr
| ID
;
NEWLINE:'\r'? '\n' ;
NOT: '~';
AND: '&';
OR: '|';
LP : '(';
RP : ')';
// lexer/terminal rules start with an upper case letter
ID
:
(
'a'..'z'
| 'A'..'Z'
| '0'..'9' | ' '
| ('+'|'-'|'*'|'/'|'_')
| '='
| '~'
| '{'
| '}'
| ','
)+
;
WS : [ \t\n]+ -> skip ;
評価される式のノードを抽出し、評価される順序で必要とします。したがって、1*{A42,A53,A16,A3}&(A26|A41)&(A51=P&A2=F|A7=C) のような式の場合、次の順序で評価されます。
A26 | A41
A51 & A2=F
A51 & A2F | AF=C
1*{A42,A53,A16,A3}&(A26|A41)
1*{A42,A53,A16,A3}&(A26|A41)&(A51=P&A2=F|A7=C)
主な関心事は、式が評価される順序を理解することです。
これについてどう思いますか。訪問者の実装を書いてみましたが、注文を抽出する方法がわかりません。