Превращаем язык программирования в язык любви
Сейчас я покажу как создать свой язык программирования. Воу-воу, не спеши пролистывать пост, впереди тебя ждёт много картинок и пошаговая инструкция, так что даже если ты с компьютером на вы, то у тебя всё равно всё получится, я в тебя верю. Если возникнут вопросы - напиши в комментариях и я тебе отвечу.
Зачем это надо и почему такой странный заголовок? Тут всё просто, в связи с последними событиями, происходящими в Рунете, компьютерная грамотность населения начала стремительно расти. Если когда-то достаточно было уметь переустановить винду, чтобы девушка решила, что ты хакер и была в восторге, то сейчас этого, увы, недостаточно. Сейчас даже умение поднять VPN вполне обыденный навык. В связи с этим, перед нами стоит сложная, почти не выполнимая задача: сделать приятно любимому человеку, находясь в суровых реалиях действительности.
Соглашусь, что приятно, конечно, можно сделать по-разному...
Но посвятить любимому человеку результат своего интеллектуального труда, будь то стихи, картина или язык программирования это уже совсем другой уровень. Кроме того, у языка программирования есть одно важное преимущество - в отличие от всего остального их посвящают девушкам не сказать, чтобы очень часто.
Ну, всё хватит болтовни, пора создать свой язык программирования с компилятором и лексемами.
Чтобы довести этот проект до нужного нам результата необходимо понять несколько идей. Первая - ОДдоадфыди, тебя же не смущает этот набор букв, думаю, не особо, а вот если бы я написал расширенная форма Бэкуса — Наура, то вероятность того, что будут произнесены заветные три буквы (WTF?) возрастает в разы. Это значит, что если дальше будет встречаться конструкция, которая потенциально может понизить твою самооценку
относится к ней нужно совершенно утилитарно - есть некая штука, которая что-то делает и у неё есть практическая реализация в виде набора строк - исходного кода. Достаточно понять связь между названием и назначением данной конструкции, а если захочется всегда можно копнуть в глубь с помощью поисковика.Вторая идея - писать сразу мега программу это безумие (безумству храбрых поём мы песню (с)), поэтому надо написать что-то простое, но рабочее, а потом уже его постепенно усовершенствовать. Так и поступим.Писать мы будем на Python. Что? Не знаешь его?! Ну, и не очень-то и нужно (см. первую идею). Код на нём по своему виду близок к естественному языку, что облегчает понимание, а я его подробно прокомментирую. Скачиваем Python отсюда https://www.python.org/downloads/ и устанавливаем, постоянно жамкая кнопку далее. Теперь нам где-то нужно писать код на нём, немного комфорта не помешает, поэтому используем вот эту среду разработки https://www.jetbrains.com/pycharm/ Бесплатной версии для наших задач хватит с запасом. Устанавливаем её по такому же принципу, что и Python.
Стартуем PyCharm, выбираем New Project - Pure Python, затем указываем папку, где будем хранить наш проект. Естественно, что желательно придумать для него красивое и романтичное название, тут уже дело вкуса, я в качестве названия выбрал имя девушки - Мира.
Проект создан, перед нами среда разработки во всей красе, но где писать код? Нажимаем на имя проекта правой кнопкой и выбираем пункт New - Python file
Вводим имя файла, в нашем случае это lex, сейчас расскажу почему.
У нас будет свой язык, он состоит из конструкций вида:
print(5 + 5 - 4);
Нам надо описать логику работу языка. Чтобы это сделать, необходимо использовать расширенную Бэкус – Наурову форму (РБНФ; англ. Extended Backus–Naur Form). Это формальная система определения синтаксиса языка. Воплощается она при помощи метаязыка, определяющего всевозможные грамматические конструкции. Например, для сложения эта форма будет выглядеть так:
expression = number, "+", number, ";";number = digit+;digit = [0-9];
То есть, фактически, мы аккуратно описываем, что представляет из себя каждый элемент комбинации print(5 + 5 - 4);
Итак, что значит утверждение "мы сделали свой язык программирования", это значит что у нас есть что-то, что превращает текст, написанный на языке, правила которого мы задаём сами, в исполняемый файл: текст -> что-то -> исполняемый файл. Сейчас мы делаем "что-то", которое все крутые программисты ласково называют - компилятор. Компилятор состоит из:
1. Лексический анализатор (лексер, англ. lexer)2. Синтаксический анализатор (парсер, англ. parser)3. Генератор кодаЛексический анализатор распознаёт конструкции языка, синтаксический анализатор определяет логику работы распознанных конструкций, а генератор кода, на основе этой логики, создаёт исполняемый файл.Начнём с лексического анализатора, поэтому мы и назвали файл "lex".Для более эффективного лексического анализа возьмём себе в помощь библиотеку RPLY. Нажимаем File - Settings:
Сейчас установим библиотеку. Выбираем Project Interpreter и нажимаем на "+" справа вверху
Находим библиотеку, выбираем и жмём Install Package
Библиотека установится успешно, о чём радостно нам сообщит
Теперь мы можем писать наш код:
Сначала мы импортируем установленную библиотеку, затем описываем класс, который содержит механизм разбора _add_tokens, способ своего вызова __init__ и метод, который задействует механизм разбора get_lexer.
Теперь надо всё протестировать, для этого создадим ещё один файл и назовём его "base". В этом файле мы будем писать код на нашем новом языке. Протестируем его на конструкции print(5 + 5 - 4);
Теперь запустим его. Для этого нажмём правой кнопкой по файлу base и выберем пункт Run 'base'. Внизу окна высветится результат
Это успех друзья! Мы написали уже треть компилятора!
Самое приятное, что это наш собственный язык и мы свободны выбирать названия функций как нам нравится. Например, можно заменить функцию print на I_love_you (в моём случае I_love_you_Mira) и всё будет успешно работать как и прежде.
Результат
Таким образом, у нас уже есть солидный задел на будущее и осталось всего ничего до создания своего собственного языка программирования. Если было интересно можно поддержать пост и оставить свой комментарий. Любите своих близких, дарите им подарки, посвящайте им стихи, музыку, картины, языки программирования, я знаю что ещё и будьте счастливы. До встречи в новом посте!