Всем привет в данном цикле статей мы будем писать компилятор под платформу .NET на языке C#.
В первой части я вам расскажу о общем строении компилятора, в следующих частях уже расскажу каждый элемент подробнее.
Исходя из картинки представленной сверху можно понять что сначала какой либо язык компилируется в сборку ( Assembly ), а дальше JIT Compiler компилирует в машинный код который исполняется на девайсах.
Давайте подробнее рассмотрим каждый нас интересующий компонент на картинке.
Assembly (сборка ) - это базовая структурная единица в .NET, на уровне которой проходит контроль версий, развертывание и конфигурация приложения.
Сбора состоит из следующих компонентов:
1. CIL код который потом компилируется JIT компилятором.
2. Метаданные типов.
И еще несколько компонентов которые на данный момент нас не особо интересуют.
CIL - Common Intermediate Language, промежуточный язык который состоит из независимых от процессора инструкций.
Так вот не трудно понять что наша задача состоит в том:
1. Создать сборку.
2.Преобразовать наш язык в CIL код.
3.Загрузить CIL код в сборку.
И Встает вопрос а как преобразовать наш язык в CIL код.
Распишем все на этапы.
1.Нужно точно определится какая будет грамматика языка, ключевые слова и тд.
2.Сделать лексический анализ текста кода, или преобразовать в поток токенов.
3.Сделать синтаксистический анализ полученных токенов и преобразовать их в AST(Abstract Syntax Tree).
4.Странслировать AST в CIL код.
В итоге становится ясно что нужно 4 основных компонента.
1.Лексер
2.Парсер
3.Транслятор
4.AST
На это пока все, в следующий статье рассмотрим каким будет язык и напишем лексер.