저는 문법을 작성하는 중이지만 대괄호 문제와 작업 우선 순위를 처리 할 수는 없습니다. 1 + 3은 4를 제공하지만 문법은 (1 + 3) * 3 = 12 문제와 1 + 3 * 3 = 12를 처리해야합니다. 문법에 홀수가 있지만 중요하지 않습니다. 여기 Python Antlr4 대괄호
내 문법 코드 :grammar PolishNotation;
fragment SINGLE_SPACE : '\u0020'; // ' '
fragment TABULATION : '\u0009'; // '\t'
fragment LINE_FEED : '\u000A'; // '\n'
fragment CARRAIGE_RETURN: '\u000D'; // '\r'
fragment DECEVEN : '0' | '2' | '4' | '6' | '8';
fragment DECODD : '1' | '3' | '5' | '7' | '9';
fragment HEXEVEN : '0' | '2' | '4' | '6' | '8' | 'A' | 'C' | 'E';
fragment HEXODD : '1' | '3' | '5' | '7' | '9' | 'B' | 'D' | 'F';
fragment OCTEVEN : '0' | '2' | '4' | '6';
fragment OCTODD : '1' | '3' | '5' | '7';
Add : '+';
Subtract : '-';
Multiply : '*';
Divide : '/';
Colon : ':' -> type(Divide);
Power : '^';
DoubleMultiply: '**' -> type(Power);
Max : 'max';
Min : 'min';
Int : (DECODD)
| ([1-9]+ (DECODD | DECEVEN)* (DECODD))
;
Hex : ('0x' (HEXODD))
| ('0x' [1-F]+ (HEXODD | HEXEVEN)* (HEXODD))
;
Oct : ('0o' (OCTODD))
| ('0o' [1-7]+ (OCTODD | OCTEVEN)* (OCTODD))
;
WhiteSpace : (SINGLE_SPACE | TABULATION)+ -> skip;
NewLine : (CARRAIGE_RETURN | LINE_FEED)+ -> skip;
number : Int | Hex | Oct
;
operation : (number)
op=(Add
| Subtract
| Multiply
| Divide
| Power
| Max
| Min)
(number | operation)
| '(' operation ')'
;
expression : operation
| number
;