对于我的项目,我必须定义一个新的语法规则,同时计算给出参数的MIN或MAX。下面是示例。
MIN(3, 4, 5, 6) = 3
MIN(3, 5, 6, 7, 8) = 3
基本上我面临的问题是定义TreeWalker函数,它应该采用可变数量的参数。
我使用的语言是Java。
好的我会把代码片段或多或少相似但不完全相同
解析规则:
minExpr
: MIN^ LPAREN! minExprStmt RPAREN!
;
minExprStmt
: digitExpr (COMA! digitExpr)+
;
Lexer规则:
token{
MIN="MIN"
}
TreeWalker:
getNode return [double r]
{ExpNode a=null; r = null;}
: #(MIN a=getNode)
{try{r=new MinExpNode();}catch(Exception e){throw new RecognitionException(e.toString();}}
所以现在我想要的是MinExpNode应该在构造函数中获取一个列表或一个ExpNode数组,这反过来将给出每个expNode的计算值。
我没有使用任何外部库。
答案 0 :(得分:0)
经过一些研究,我觉得我找到了解决方案, TreeWalker代码:
getNode return [double r]
{ExpNode a=null; List<ExpNode> list = new ArrayLis<ExpNode>(); r = null;}
: #(MIN a=getNode {list.add(a);} ({ExpNode b = getNode; list.add(b);})*)
{try{r=new MinExpNode(list);}catch(Exception e){throw new RecognitionException(e.toString();}}
但如果你能给我一个更好的建议,那将是非常有帮助的。