这里有两个嵌套表达式,你想存储赋值的Left节点,然后继续使用完整模式进一步遍历AST到第二个二进制表达式节点,得到add的左右节点。例如:
// BinaryExpr [getOperationCode() = KTC_OPCODE_ASSIGN] [$exprOL:= Left]
在这里,我们找到并存储赋值表达式的左节点。
// BinaryExpr [getOperationCode() = KTC_OPCODE_ASSIGN] [$exprOL:= Left] / Right::BinaryExpr [getOperationCode() = KTC_OPCODE_ADD]
然后我们继续得到加法表达式。最后,我们可以抓住这个表达式的左右:
// BinaryExpr [getOperationCode() = KTC_OPCODE_ASSIGN] [$exprOL:= Left] / Right::BinaryExpr [getOperationCode() = KTC_OPCODE_ADD]
[$exprL:= Left]
[$exprR:= Right]
您可以使用 println() 函数对此进行测试。所以完整的表达
// BinaryExpr [getOperationCode() = KTC_OPCODE_ASSIGN] [$exprOL:= Left] / Right::BinaryExpr [getOperationCode() = KTC_OPCODE_ADD]
[$exprL:= Left]
[$exprR:= Right]
[$exprOL.getName().println()]
[$exprL.getName().println()]
[$exprR.getName().println()]
对于以下代码:
int func (int x, int y)
{
int local;
local = x;
local = x + y;
local = y - x;
return local;
}
会打印出来:
local
x
y