这是来自antlr3的我的树语法:
tree grammar TExpr1;
options {
tokenVocab=Expr;
ASTLabelType=CommonTree;
superClass=MyTreeParser;
}
@header {
package tb.antlr.interpreter;
import java.util.HashMap;
}
@members {
HashMap<String, Integer> memory = new HashMap<String, Integer>();
}
prog : (e=expr {drukuj ($e.text + " = " + $e.out.toString());})* ;
expr returns [Integer out]
: ^(PLUS e1=expr e2=expr) {$out = $e1.out + $e2.out;}
| ^(MINUS e1=expr e2=expr) {$out = $e1.out - $e2.out;}
| ^(T e1=expr e2=expr e3=expr {$out = $e1.out * 3600 + $e2.out * 60 + $e3.out;}
| INT {$out = getInt($INT.text);}
;
T的输入是两个或三个数字。我希望第一个参数(e1)是可选的。我该怎么办?我试图重载此行的两个和三个参数,但似乎在antlr中不起作用。 啊,这是语法文件中的一些代码:
time
: INT (CL INT (CL INT)? )? ->^(T INT*)
;
T :
;