Начнем с небольшого предисловия. Мне очень нравится сериал «Дружба это чудо». И недавно я решил изучить тему компиляции языков.
Смотря полнометражку «New generation» я заметил, что у пегасов есть смартфоны и моей голове всплыла логическая цепочка
В полнометражке new generation и сериале make your mark у пегасов были смартфоны
По сюжету new generation мы узнаем, что в Эквестрии какое то время отсутствовала магия
Значит, пегасы научились производить чипы
Значит, они умеют писать бинарный код
Но с бинарным кодом они бы замучались, значит у них есть свой ассемблер или фортран
А отсюда следует, что должны существовать и человекопонятные(понипонятные ) языки программирования
Такие, как си
Но, я сомневаюсь, что они бы сделали смартфоны без ООП
А это значит, что в мире МЛП есть c++
Такой логической цепочкой я дошел до мысли о том, что должен существовать какой-то язык поняшный программирования. В одном брони чате мне рассказали про интересный проект FIM++. Тут, на Хабре, я нашел статью от 2012 года, где автор рассказал про этот язык. Но его стилистические особенности отсылают нас к письмам и героям сериала "Дружба это чудо". Моей же целью является создание правдоподобного, Тьюринг полного, строго типизированного языка.
Началось создание языка с обдумывание самой концепции и реализации ее. В итоге, я пришел к решению создавать си подобный синтаксис, но с некоторыми моими изменениями. Но как совместить язык программирования и разноцветных лошадок?
Компилятор я решил писать на 2х языках python и c++. На питоне я написал лексический анализатор понискрипта и основной код компилятора. Для упрощения себе жизни, компилировать я его решил в плюсы, что немного облегчает задачу.
Основной логикой компиляции занимается python, инструкции которому сообщает программа на плюсах. Скрипт на пайтоне переводит некоторые пони команды по словарю в плюсовые функции, так же пони функции лежат в файле lib.cpp, который является основной, автоподключаемой библиотекой
Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, выполняемая компилятором. В данном случае компиляция идет в c++, а из него уже по средством gcc, программа переводится в машинные команды
Компилятор транслирует все пони файлы, лежащие в папке проекта, игнорируя, при этом, остальные. Но не отрицаю, что сделаю ручное прописывание файлов для компиляции через файл конфига
.ponycfg - файл конфигурации сборки, в котором прописываются параметры сборки (Например имя выходного файла)
psc - файл скрипта
psh - заголовочный файл
Синтаксис языка я покажу на примере программы Hello World
friend "class.h"
using libspace std;
int main->>()
{
int a = suma(1, 4);
neighln->>(a);
string x = "";
read->>(x);
}
В данный момент язык еще не доделан и его набор команд скромный, но в моих планах его активно развивать
Исходный код проекта, находится в открытом репозитории на github.