Я пишу очень простой компилятор как школьную работу, и сейчас я очень озадачен ролью CFG в процессе генерации кода.Я четко понимаю, что такое CFG.Я просто скучаю по его использованию или важности.Давайте проясним вопрос.Я видел, как какой-то компилятор (особенно компилятор Python) сначала строит CFG из AST, а затем выравнивает CFG в некотором топологическом порядке для генерации окончательного кода.Отсюда возникают 2 вопроса.
Что, если я не создаю CFG, а выдаю код напрямую, когда я прохожу AST в глубине первого пост-заказа?Приведет ли это к неправильному codegen?
Подождите минутку.CFG вообще не DAG, потому что задние края существуют для конструкции цикла.Почему мы топологически сортируем или сглаживаем такие вещи?
Я смутно чувствую, что CFG является краеугольным камнем для выполнения различных видов анализа программы с целью оптимизации кода или постановки диагнозов.,Но если оставить в стороне эти анализы с единственной целью правильного кодогена, необходим ли CFG?Какова его роль?