我想从JSON格式的AST中构建控制流图(CFG)。所以这个AST是在TouchDevelop中针对每个脚本自动创建的。由于TouchDevelop不是面向对象的编程,我仍然可以使用Visitor模式吗?任何有用的指针,将不胜感激。如何从JSON对象(AST)构建控制流图(CFG)
更新1:我的问题是,我不明白从哪里开始。从互联网上,我应该使用访问者模式来浏览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
}
]
}
我不明白,如果你的问题是从AST转换到CFG或使用的格式(JSON)或方便使用CFG或简单地TouchDevelop。你能否在你的问题上更具体些? – 2013-02-24 14:01:30
我已经更新了这个问题。请看一看。 – 2013-02-24 22:43:11