使用這個語法我可以找到指數,但我得到的答案是相反的順序(例如:這是我得到的:2^2^3 = 64這就是我應該得到的:2^2^3 = 2^8 = 256))ANTLR語法不完整
grammar SDD1
;
options {
language = Java;
}
// header for parser related java
@header {
package com.compiler.tutorial;
}
// header for lexer related java
@lexer::header {
package com.compiler.tutorial;
}
evaluator returns[int result]
: expression EOF {$result = $expression.result;}
;
expression returns[int result]
: op1=mult {$result = $op1.result;}
('+' op2=mult {$result = $result + $op2.result;}
| '-' op2=mult {$result = $result - $op2.result;}
)*
;
mult returns [int result]
: op1 = exponent {$result = $op1.result;}
( '*' op2=exponent {$result = $result * $op2.result;}
| '/' op2=exponent {$result = $result/$op2.result;}
)*
;
exponent returns [int result]
: op1=factor {$result = $op1.result;}
('^' op2=factor {$result = (int) Math.pow($result,$op2.result);}
)*
;
factor returns [int result]
: NUMBER {$result = Integer.parseInt($NUMBER.text);
System.out.println ("Number= " + $result);}|
IDENT {$result = 0;}|
'(' expression ')' {$result = $expression.result;}
;
fragment LETTER: 'a'..'z' | 'A'..'Z';
fragment DIGIT: '0'..'9';
IDENT: LETTER(LETTER | DIGIT)*;
NUMBER: DIGIT+;
WS: (' ' | '\t' | '\n' | '\r' | '\f')+ {$channel=HIDDEN;};
2^2^3 = 64本身正確的,如果你喜歡評價(2^2)^ 3 = 64 ..........也許這是因爲你的語法是不完全遞歸,因爲它應該是(最右邊的表達式應該先評估???) – Umer
請不要用「緊急」標記您的問題。 –