JSON 形式で指定された AST から制御フロー グラフ (CFG) を作成したいと考えています。したがって、この AST は各スクリプトに対して TouchDevelop で自動的に作成されます。また、TouchDevelop はオブジェクト指向プログラミングではないため、Visitor パターンを引き続き使用できますか? 有用なポインタをいただければ幸いです。
Update1:私の問題は、どこから始めればよいかわからないことです。インターネットから、Visitor Pattern を使用して AST をウォークスルーし、各ノードにアクセスして情報を収集することになっています。そこから CFG を構築し、データ フロー分析を行うことができます。しかし、次の 2 つの問題があります。
1)私の知る限り、訪問者パターンを使用するにはオブジェクト指向プログラミングモデルが必要です(私は間違っているかもしれません)が、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
}
]
}