java在ANTLR中递归处理规则
好的,两天后我的第三个ANTLR问题:
我的语法是用来解析布尔语句的,比如:
AGE > 21 AND AGE < 35
因为这是一个相对简单的语法,所以我嵌入了代码,而不是使用AST。规则如下:
: a=singleEvaluation { $evalResult = $a.evalResult;}
(('AND') b=singleEvaluation {$evalResult = $evalResult && $b.evalResult;})+
{
// code
}
;
现在我需要使用括号实现操作顺序,来解析如下内容:
AGE >= 21 AND (DEPARTMENT=1000 OR DEPARTMENT=1001)
甚至更糟:
AGE >= 21 AND (DEPARTMENT=1000 OR (EMPID=1000 OR EMPID=1001))
有人能提出一种实现所需递归的方法吗?我不想在这么晚的时候换成AST,在这一点上我还是一个相对的noob
杰森
# 1 楼答案
由于一些规则的计算结果是布尔值,而另一些规则的计算结果是整数(或仅比较整数),因此最好让规则返回一个泛型对象,并进行相应的强制转换
下面是一个快速演示(包括在括号表达式的情况下进行递归调用):
解析输入
"AGE >= 21 AND (DEPARTMENT=1000 OR (EMPID=1000 OR EMPID=1001))"
将产生以下输出:# 2 楼答案
我会这样做: