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

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

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

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

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

compiler-construction

language-agnostic

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