2
我有以下的语法(简体):ANTLR - 遍历节点
filter : eq | and;
eq : 'eq' '(' property ',' value ')';
and : 'and' '(' filter ',' filter (',' filter)* ')';
...
我解析简单的前缀结构,如:
and(eq(name,john),eq(location,usa))
什么是最好的方式,依次通过filter
节点一个and
节点?生成的类AndContext
有一个功能filter(int index)
,但仅此而已。我想要做的事,如:
AndContext c = ...;
for (int i = 0; i < c.numberOfFilters(); ++i) {
FilterContext f = c.filter(i);
}
有功能getChildCount()
,但它返回的所有节点的数量(包括代表(
,)
等终端节点),而不仅仅是有趣filter
节点。
这个答案中的关键部分是除了在问题中提到的方法'AndContext.filter(int)'外,OP错过了'AndContext.filter()'的存在。 – 2014-10-31 15:01:21
谢谢。我完全忽略了'filter()'函数。我认为只有一个'filter(int index)'函数。 – 2014-10-31 15:02:35
FWIW,我没有使用walker/listener解析方式,因为我递归地将解析树转换为我的'pojo树'。 – 2014-10-31 15:03:54