Создание Языка Программирования. Часть 0

Доброго времени суток, уважаемые пользователи Хабра! Не буду долго рассказывать, просто расскажу главное, что побудило меня написать эту статью и собственно разработать собственный язык программирования.

Все дело в том, что я давно занимаюсь программированием и знаю несколько языков программирования.

И несмотря на их различия, мне удаётся создавать сложные структуры на любом языке (даже на Python мой код порой настолько закручен, что я сам не понимаю, что курил, когда его писал).

В связи с тем, что мой код полностью противоречит всем канонам корректного кода, я стал интересоваться, как компиляторы и интерпретаторы понимают мой кривой код. В связи с этим сразу отвечаю на вопросы «Зачем это нужно?! Должен ли я написать еще один велосипед? Неужели нечего делатьЭ» — это сделано для того, чтобы удовлетворить интерес, а также для того, чтобы такие же интересующиеся, как я, имели представление о том, как это работает. Теперь непосредственно о теории языков программирования.

Давайте посмотрим, что по этому поводу говорит всеми любимая Википедия:

Язык программирования — это формальная знаковая система, предназначенная для написания компьютерных программ.

Язык программирования определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые исполнитель (обычно виртуальная машина) будет выполнять под ее управлением.

С этим все понятно, ничего сложного, мы все знаем, что это такое.



О том, что нужно сделать

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

Модуль, который будет проверять корректность лексических конструкций, предусмотренных нашим языком программирования.

2. Парсер.

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

3. Обычно на этом месте стоит оптимизатор, но так как наша поделка скорее игрушка, чем большой проект, от оптимизатора откажусь.

И вот наши пути расходятся: 3.1. Переводчик.

Этот модуль преобразует поток токенов, полученных от парсера, в машинный код. Этот подход используется в компиляторах 3.2. Исполнитель.

Этот модуль выполняет команды, записанные в виде потока токенов.

Этот подход используется в интерпретаторах.

Я больше склоняюсь к созданию некоего промежуточного звена между интерпретатором и компилятором.

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



Немного о реализации

1. Для реализации транслятора будет использоваться язык программирования Python. Почему он? Потому что я знаю его лучше, чем кто-либо другой.

Кроме того, его типизация, а точнее полное отсутствие, позволит сократить количество переменных, используемых при написании кода.

2. Python также будет использоваться для реализации виртуальной машины.

3. Для сборки проекта будет использоваться PyInstaller, так как он позволяет упаковать все в один файл, и на данный момент без проблем можно собрать его для Linux и Windows.

Теперь попрактиковаться

Предлагаю поставить перед собой минимальную задачу, при выполнении которой мы будем считать задачу условно выполненной и дальше идти не нужно.

Для этого определим минимальный синтаксис языка: 1. Существуют однострочные комментарии, которые начинаются со знака диез (#) и продолжаются до конца строки.

2. Существует два типа данных (целое число, строка).

3. Имеется возможность вывода информации на экран.

4. Есть возможность ввода значений с клавиатуры.

Давайте напишем простую программу на нашем новом языке, учитывая только что сформулированные нами правила:

   

int a = 10;

Теги: #python #разработка языков программирования #python #программирование #компиляторы
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.