我想从以 JSON 格式给出的 AST 构建控制流图 (CFG)。所以这个 AST 是在 TouchDevelop 中针对每个脚本自动创建的。而且由于 TouchDevelop 不是面向对象的编程,我还可以使用访问者模式吗?任何有用的指针将不胜感激。
Update1:我的问题是我不明白从哪里开始。从互联网上,我应该使用访问者模式遍历 AST 来访问每个节点并收集信息。从那里,我可以构建一个 CFG,然后进行数据流分析。但是有两个问题:
1) AFAIK,我需要面向对象的编程模型来使用访问者模式,(我可能错了)TouchDevelop 不是。
2) 下面给出的 AST 不是我在互联网上找到的 AST 格式。它是 JSON 格式。我想我可以解析 JSON 以将其转换为所需的 AST 结构,但我不太确定。
示例脚本的源代码
meta version "v2.2,nothing";
meta name "DivideByZero";
//
meta platform "current";
action main() {
(5 / 0)→post_to_wall;
}
生成的 AST(JSON 格式)如下所示:
{
"type":"app",
"version":"v2.2,nothing",
"name":"DivideByZero",
"icon":null,
"color":null,
"comment":"",
"things":[
{
"type":"action",
"name":"main",
"isEvent":false,
"outParameters":[
],
"inParameters":[
],
"body":[
{
"type":"exprStmt",
"tokens":[
{
"type":"operator",
"data":"("
},
{
"type":"operator",
"data":"5"
},
{
"type":"operator",
"data":"/"
},
{
"type":"operator",
"data":"0"
},
{
"type":"operator",
"data":")"
},
{
"type":"propertyRef",
"data":"post to wall"
}
]
}
],
"isPrivate":false
}
]
}