Найти тему

Написание компилятора своего языка. Часть 1.

Всем привет в данном цикле статей мы будем писать компилятор под платформу .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

На это пока все, в следующий статье рассмотрим каким будет язык и напишем лексер.