Как получить контрольный график программы?

Я хочу получить граф управления потоком кода / программы (будь то любой язык программирования и учитывая его грамматику). Я попытался использовать библиотеку lark в python для анализа базовой программы на C [я предоставил грамматику для базового синтаксиса c для lark]. В результате он дал мне объект разбора дерева или чего-то подобного, теперь я задаюсь вопросом, куда двигаться дальше.

Сказав это, любой новый подход высоко ценится. Основная цель состоит в том, чтобы получить граф управления потоком кода / программы, учитывая грамматику языка, на котором он написан.

1 ответ

В результате он дал мне объект разбора дерева или чего-то подобного, теперь я задаюсь вопросом, куда двигаться дальше.

Общий подход заключается в

  1. пройтись по дереву, чтобы создать промежуточное представление, в котором все циклические и условные конструкции заменены переходами,
  2. разделите инструкции ИК на базовые блоки, начиная новый блок перед каждой меткой перехода и после каждого прыжка, а затем
  3. построить граф потока управления, где базовые блоки - это узлы, каждый блок, который не заканчивается скачком, имеет ребро к блоку, который следует за ним, а каждый блок, который заканчивается скачком, имеет ребро к возможному скачку цели (где цели перехода для традиционной инструкции условного перехода будут включать следующий блок).

Основная цель состоит в том, чтобы получить граф управления потоком кода / программы, учитывая грамматику языка, на котором он написан.

Вы не можете получить CFG программы, если все, что вы знаете о языке, это его грамматика. Вам понадобится некоторое понимание семантики языка, чтобы создать CFG.

Другие вопросы по тегам