Java 如何使用ANTLR lexer和解析器编写最小-最大操作?

Java 如何使用ANTLR lexer和解析器编写最小-最大操作?,java,antlr3,Java,Antlr3,对于我的项目,我必须定义一个新的语法规则,同时计算给定参数的最小值或最大值。下面是示例 MIN(3, 4, 5, 6) = 3 MIN(3, 5, 6, 7, 8) = 3 基本上,我面临的问题是定义TreeWalker函数,它应该接受可变数量的参数 我使用的语言是Java 好的,我会放一段代码,大致相似,但不完全相同 解析器规则: minExpr : MIN^ LPAREN! minExprStmt RPAREN! ; minExprStmt : digitExpr (COM

对于我的项目,我必须定义一个新的语法规则,同时计算给定参数的最小值或最大值。下面是示例

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"
}
特雷瓦克:

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的计算值


我没有为此使用任何外部库。

经过一些研究,我想我找到了一个解决方案, 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();}}

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

你是使用外部库来lex和解析,还是自己解析?您需要的语法规则放在哪里?@n请重新阅读问题和标记。他正在使用ANTLR。你能发布你的语法吗?如果不查看你使用的语法,我们无法回答你的问题。很抱歉,我回复得太晚,因为我无法访问stackoverflow。如果您需要更多信息,请告诉我