如何使用ANTLR词法分析器和解析器编写MIN MAX操作?

时间:2014-08-05 03:31:42

标签: java antlr3

对于我的项目,我必须定义一个新的语法规则,同时计算给出参数的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的计算值。

我没有使用任何外部库。

1 个答案:

答案 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();}}

但如果你能给我一个更好的建议,那将是非常有帮助的。