3

Превращаем язык программирования в язык любви

Сейчас я покажу как создать свой язык программирования. Воу-воу, не спеши пролистывать пост, впереди тебя ждёт много картинок и пошаговая инструкция, так что даже если ты с компьютером на вы, то у тебя всё равно всё получится, я в тебя верю. Если возникнут вопросы - напиши в комментариях и я тебе отвечу.

Зачем это надо и почему такой странный заголовок? Тут всё просто, в связи с последними событиями, происходящими в Рунете, компьютерная грамотность населения начала стремительно расти. Если когда-то достаточно было уметь переустановить винду, чтобы девушка решила, что ты хакер и была в восторге, то сейчас этого, увы, недостаточно. Сейчас даже умение поднять 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) и всё будет успешно работать как и прежде.

lex.py

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

base.py

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

Результат

Превращаем язык программирования в язык любви Программирование, Компилятор, Создание, Любовь, Инструкция, Длиннопост

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

Найдены дубликаты

+2
Мало что поняла, но впечатлилась, итого: алгоритм по произведению впечатления работает!
раскрыть ветку 4
0

Спасибо))) Если какие-то вопросы - смело пиши их здесь, разберёмся с ними))

раскрыть ветку 3
+1
Мира-то заценила?
раскрыть ветку 2
+1
А на хабре сие чудо есть?)
раскрыть ветку 1
0

Нет, это я для своей девушки специально написал, она Пикабу читает)))

+1

@MiraLumen, я люблю тебя!

раскрыть ветку 1
+1

o .̫ o   я тебя тоже очень очень

+1

Возможно я не внимательно прочитал твой пост, но компилятор то тут при чем) Интерпретатор вижу а компилятор где?)

раскрыть ветку 2
0

Компилятор будет)) Хотелось, чтобы всё было максимально понятно, а читать при этом было комфортно, поэтому пришлось оптимизировать объём поста. В следующем посте продолжим, а ещё через пост будет про LLVM

раскрыть ветку 1
+1

Вот это уже интереснее)

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