Pull to refresh

Ponyscript — язык программирования пони

Начнем с небольшого предисловия. Мне очень нравится сериал «Дружба это чудо». И недавно я решил изучить тему компиляции языков.

Смотря полнометражку «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.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.