Z:gnu-www-ja-stallman-kth--f993e3-This compiler currently works/ru

Этот компилятор в настоящее время работает с синтаксическим анализатором, который обращает программу C по существу в синтаксическое дерево, аннотированное сведениями о типах данных C. Затем другой проход, который смотрит на это дерево и генерирует код вроде этого [код, похожий на LISP]. Потом несколько проходов оптимизации. Один &mdash; чтобы обрабатывать вещи вроде переходов через переходы, переходы на переходы, переходы на .+1, всё, что может быть упрощено немедленно. Потом распознаватель общих подвыражений, потом нахождение базовых блоков и выполнение анализа потоков данных, чтобы знать, какие величины используются в каждой команде, и никогда &mdash; после неё. А также связывание каждой команды с местами, где величины, которые ей нужны, генерируются, так что если у меня есть одна команда, которая генерирует псевдорегистр R[28], а потом другая команда позднее, которая пользуется этим псевдорегистром, и это &mdash; первое место, где используется R[28], я заставляю второе место указывать на первое, и этот указатель применяется в управлении попытками объединения команд. Объединяются не смежные команды, объединяется команда, использующая величину, с командой, которая произвела эту величину. Даже если есть другие команды между ними, в данном случае это не важно, нужно просто проверить их и убедиться, что они никак не вмешиваются. Потом, после объединителя, к делу приступает динамический распределитель регистров, и наконец нечто, преобразующее это в ассемблерный код.