【发布时间】:2014-01-05 20:10:49
【问题描述】:
当我试图解析一个堆叠的算术比较表达式时遇到了一个问题:
"1<2<3<4<5"
进入逻辑连词树:
CONJUNCTION(COMPARISON(1,2,<) COMPARISON(2,3,<) COMPARISON(3,4,<) COMPARISON(4,5,<))
Antlr3 Tree Rewrite 规则中是否有一种方法可以遍历匹配的标记并以目标语言从它们创建结果树(我使用的是 java)?所以我可以从元素 x, x-1 的匹配的“添加”标记中制作 COMPARISON 节点。我知道我可以引用规则的最后一个结果,但这样我只会得到嵌套的 COMPARISON 规则,这不是我想要的。
/This is how i approached the problem, sadly it doesn't do what i would like to do yet of course.
fragment COMPARISON:;
operator
:
('<'|'>'|'<='|'>='|'=='|'!=')
;
comparison
@init{boolean secondpart = false;}
:
e=addition (operator {secondpart=true;} k=addition)*
-> {secondpart}? ^(COMPARISON ^(VALUES addition*) ^(OPERATORS operator*))
-> $e
;
//Right now what this does is:
tree=(COMPARISON (VALUES (INTEGERVALUE (VALUE 1)) (INTEGERVALUE (VALUE 2)) (INTEGERVALUE (VALUE 3)) (INTEGERVALUE (VALUE 4)) (INTEGERVALUE (VALUE 5))) (OPERATORS < < < <))
//The label for the CONJUNCTION TreeNode that i would like to use:
fragment CONJUNCTION:;
【问题讨论】:
-
不清楚你在问什么。