Учимся писать компилятор

Думаю, это довольно расплывчатый compilers вопрос; просто из-за глубины compilers затронутой темы. Однако компилятор compilers можно разделить на две отдельные compiler части; верхняя половина и compiler-construction нижняя. Верхняя половина compiler-design обычно берет исходный язык language-agnostic и преобразует его в промежуточное language-independent представление, а нижняя половина compiler-construction занимается генерацией кода compilers для конкретной платформы.

Тем compilers не менее, одна из идей для language-agnostic простого подхода к этой теме compiler-construction (по крайней мере, та, которую compiler-construction мы использовали в моем классе compilers компиляторов) состоит в том, чтобы language-agnostic собрать компилятор из двух compilers частей, описанных выше. В compiler частности, вы получите хорошее compiler-construction представление обо всем процессе, просто compiler-design построив верхнюю половину.

Простое language-agnostic выполнение верхней половины language-independent позволяет получить опыт написания compilers лексического анализатора compiler-construction и парсера и перейти к генерации compilers некоторого «кода» (это промежуточное compilers представление, о котором language-agnostic я упоминал). Таким образом, он compiler-construction возьмет вашу исходную программу language-agnostic и преобразует ее в другое language-independent представление и произведет compiler-construction некоторую оптимизацию (если language-agnostic хотите), которая является language-independent сердцем компилятора. Затем compiler нижняя половина примет это language-independent промежуточное представление compilers и сгенерирует байты, необходимые compiler для запуска программы в определенной language-independent архитектуре. Например, нижняя compiler половина возьмет ваше промежуточное compilers представление и сгенерирует compiler-construction исполняемый файл PE.

Некоторые compiler книги по этой теме, которые compiler-design мне показались особенно полезными, - это compiler-construction Compilers Principles and Techniques (или «Книга драконов» из-за compiler-design милого дракона на обложке). В compilers нем есть отличная теория, и compiler-construction он определенно охватывает language-agnostic контекстно-свободные грамматики compiler-construction в действительно доступной compilers форме. Кроме того, для создания language-agnostic лексического анализатора language-agnostic и парсера вы, вероятно, будете compiler-design использовать инструменты compiler-design * nix lex и yacc. И, что language-independent довольно неинтересно, книга compiler-design под названием "lex and yacc" продолжилась language-independent с того места, где остановилась compiler-construction Книга Дракона в этой части.

compiler-construction

language-agnostic

2022-10-31T11:56:37+00:00