Блог программиста

Цель: пассивный доход 100 тыс. руб. в мес.

Задачи:

  1. Разработка языка Cj
  2. ...
  3. ...


Также в блоге: изучаем и разрабатываем что-то новое, делимся опытом.

Подписывайтесь:
Cj - язык программирования

Новый язык программирования, для разработки сайтов и приложений, подробнее...


Спецификация:

  1. Комментарии
  2. Типы данных, переменные, функции
  3. ...

Как работает компилятор

Начинаем разрабатывать компилятор языка программирования Cj. Кстати, данный пост, возможно, пригодится для написания транслятора/компилятора/интерпретатора других языков, так что не зря пишу).

Мы будет сразу и писать компилятор (класс Compiler) и, одновременно, разбираться как он работает. Поехали!

Процесс компиляции можно разбить на 5 этапов.

1. Лексический анализ

На этом этапе анализируемый текст разбивается на слова (лексемы) нашего языка программирования. Осуществлять такой анализ будем с помощью лексера (класс Lexer) - лексического анализатора.

2. Синтаксический анализ

Для этого этапа мы напишем парсер (класс Parser) - синтаксический анализатор, на вход которому подаются лексемы, а на выходе получаем синтаксическое дерево, которое представляет из себя дерево элементов языка Cj (переменные, функции и т.д.).

3. Семантический анализ

По аналогии с предыдущими этапами, напишем семантический анализатор (класс Semantic). На данном этапе синтаксическое дерево обрабатывается и наполняется смыслом, то есть семантикой. Например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д..

Важной частью семантического анализа являются различные проверки. И если в программе имеется ошибка, то компилятор должен сообщить об этом.

4. Оптимизация кода

Удаляем излишние конструкций и упрощаем код с сохранением его смысла, главное не удалить лишнее)). Напишем для этого этапа класс Optimizer.

5. Генерация кода

Тут всё просто - из промежуточного представления генерируем код на целевом языке (класс Generator).

Теперь мы разобрались как работает любой, даже самый сложный, компилятор. Всё, на самом деле, очень просто и понятно! Я уже начал писал компилятор своего языка, а вдруг и Вы захотите?

Чтобы мой труд не пропал даром, я создам библиотеку абстрактного языка и назову её lang. Она уже на Гитхабе: github.com/sitev/lang!

В ней будут представлены выше перечисленные классы, в которых будет реализован общий функционал.

Подключайте, расширяйте данные классы как Вашей душе угодно и пишите свой язык, свой компилятор!


Отправить комментарий
Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений