Плюсы и минусы графического и линейного промежуточного представления в дизайне компилятора?
В проекте компилятора кратко представлены два вида промежуточного представления (IR): графическое (например, дерево абстрактного синтаксиса) и линейное (например, LLVM IR). Каковы плюсы и минусы двух?
Я заметил, что Clang реализовал и то и другое, но, похоже, только линейное представление (LLVM IR) используется в бэкэнде LLVM.
1 ответ
Решение
Это очень субъективное решение со стороны разработчика компилятора. На моем языке я реализую график AST, который затем используется для получения LLVM-IR. Я мог бы легко перейти от семантической проверки к IR, но я делаю некоторый рефакторинг / оптимизацию, которую AST прекрасно выполняет до генерации IR.