【发布时间】:2011-12-09 05:21:29
【问题描述】:
使用这个语法我可以找到指数,但我得到的答案是相反的(例如:这就是我得到的:2 ^ 2 ^ 3 = 64 这是我应该得到的:2 ^ 2 ^ 3 = 2 ^ 8 = 256))
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 一样评估它本身就是正确的......也许这是因为你的语法不完全正确应该是递归的(应该首先评估最右边的表达式???)
-
请不要用“紧急”标记您的问题。
标签: antlr