我想從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