Какова роль Control Flow Graph в генерации кода? - PullRequest
0 голосов
/ 20 ноября 2018

Я пишу очень простой компилятор как школьную работу, и сейчас я очень озадачен ролью CFG в процессе генерации кода.Я четко понимаю, что такое CFG.Я просто скучаю по его использованию или важности.Давайте проясним вопрос.Я видел, как какой-то компилятор (особенно компилятор Python) сначала строит CFG из AST, а затем выравнивает CFG в некотором топологическом порядке для генерации окончательного кода.Отсюда возникают 2 вопроса.

  1. Что, если я не создаю CFG, а выдаю код напрямую, когда я прохожу AST в глубине первого пост-заказа?Приведет ли это к неправильному codegen?

  2. Подождите минутку.CFG вообще не DAG, потому что задние края существуют для конструкции цикла.Почему мы топологически сортируем или сглаживаем такие вещи?

Я смутно чувствую, что CFG является краеугольным камнем для выполнения различных видов анализа программы с целью оптимизации кода или постановки диагнозов.,Но если оставить в стороне эти анализы с единственной целью правильного кодогена, необходим ли CFG?Какова его роль?

...