大家好我用这个小语法来实现一个简单的计算器,但我需要 将IF - ELSE和DO WHILE添加到我的语法中,但我不知道如何处理跳转,我真的不知道我需要添加这个新函数。
grammar Calculadora;
@header {
import java.util.HashMap;
}
@members {
HashMap memory = new HashMap();
}
prog : stat+
;
stat : expr ';' { System.out.println($expr.value); }
| ID '=' expr ';' { memory.put($ID.text, new Integer($expr.value));
System.out.println($ID.text + " = " + $expr.value); }
;
expr returns [int value]
: e=multExpr { $value = $e.value; }
( '+' e=multExpr { $value += $e.value; }
|
'-' e=multExpr { $value -= $e.value; }
)*
;
multExpr returns [int value]
: e=atom { $value = $e.value; }
( '*' e=atom { $value *= $e.value; } )*
;
atom returns [int value]
: INT { $value = Integer.parseInt($INT.text); }
| ID { Integer v = (Integer)memory.get($ID.text);
if ( v != null ) $value = v.intValue();
else System.err.println("variable no definida " + $ID.text); }
| '(' expr ')' { $value = $expr.value; }
;
ID : ('a'..'z'|'A'..'Z')+
;
INT : '0'..'9'+
;
NEWLINE : '\r'? '\n'
;
WS : (' '|'\t')+ { skip(); }
;