我使用eclipse解析器处理java代码中的表达式和语句。
我有一个功能:
public boolean visit(PostfixExpression node)
处理Postfix
表达,例如i++
;
问题是我想要区分for statement
后缀和其他后缀。
我想也许我可以到node
parent
并以某种方式检查它是否是for
。类似于node.getParent()
...但node.getParent()
不会返回expression
。
如何识别PostfixExpression
是否属于for loop
?
由于
修改
通过" for statement
后缀"我的意思是for loop
第一行的后缀。如:
for(i=0;i<10;i++)
所以我想将此i++
与其他i++
区别开来。
答案 0 :(得分:0)
你不能只是致电ASTNode.getParent()
来查看表达式包含哪种语句?
答案 1 :(得分:0)
我通过创建for_updaters列表(使用node.updaters()
)并在每次访问for
循环时更新它(也可能是nested loops
)来解决这个问题。此外,每当我遇到PostfixExpression
(包括for updaters
)时,我将其添加到另一个列表,然后从此列表中删除出现在for_updaters列表中的所有类似事件。这样我只留下非更新者Postfixes。这对我也有用,因为每次我访问for
循环时我都清除了两个列表,所以不用担心重复的变量名称。
注意: node.updaters()
会返回完整的完整表达式:[i++]
。但我只需要i
。通过将updater
转换为String
然后使用substring()
,可以轻松提取它。