Я хочу построить граф потока управления (CFG) из AST, указанный в формате JSON. Таким образом, этот AST автоматически создается в TouchDevelop по каждому сценарию. И поскольку TouchDevelop не является объектно-ориентированным программированием, могу ли я использовать шаблон Visitor? Любые полезные указатели будут оценены.Как построить график потока управления (CFG) из объекта JSON (AST)
Update1: Моя проблема в том, что я не понимаю с чего начать. Из Интернета я должен использовать шаблон посетителя, чтобы пройти через АСТ, чтобы посетить каждый узел и собрать информацию. И оттуда я могу построить 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. Не могли бы вы быть более конкретными в своем вопросе? –
Я обновил вопрос. Пожалуйста, смотрите. –