Предыстория

Весной 2020 года я впервые попробовал себя в разработке сайтов бэкенд я писал на питоне, а на фронте пришлось использовать js, и он вызвал у меня отторжение(тут надо уточнить, что я не считаю js ужасным языком, просто он мне не понравился). Не долго думая я начал писать транслятор с питона в явускрипт(а если бы погуглил то нашел бы это и это). об этом трансляторе и пойдет речь.

Отличия от других трансляторов

В процессе разработки я читал о явескрипт и не много о других языках (ruby, lua, php) и заметил что в них много общего, например наличие условных конструкций, функций, переменных и тд. И тогда я подумал почему бы не добавить возможность трансляции не только в js, но и в другие языки.

Языки добавляются с помощью функций обработчиков, например обработчик математичиских операций для js выгладит так:

def bin_op(left, right, op):
    return f"({left}{op}{right})"

а для lisp он будет выглядеть так:

def bin_op(left, right, op):
    return f"({op} {left} {right})"

А так же также отличительной чертой является возможность добавления макросов например целочисленное деление в js:

signs = {"//": lambda l, r: f"Math.floor({l}/{r})"}

Кому это нужно

Одним из вариантов использования проекта является написание скриптов в играх, так как питон довольно тяжелый для встроенного языка то можно использовать трансляцию в lua.

Так же можно использовать его как линтер для python с исправлением ошибок в именах функций.

Ну и для поддержки проектов с языками вызывающими у вас отторжение(как у меня js или pascal) ну или просто устаревшие языки.

Важно

В некоторых местах статьи можно подумать, что считаю некоторые языки какими-то не такими. Я рассматриваю языки как две части: его синтаксис(тут python для меня почти идеал) и как платформу.

Все говорят, что язык это инструмент и нужно уметь пользоваться разными, то есть молотком отвертку не заменишь. Так вот молоток и отвертка - это платформы, а их ручка это синтаксис.

Лучше всего это видно на примере java. Java(jvm) - это распространённая, быстрая платформа, а синтаксис и языки для нее разные: Kotlin, Java, Clojure и многие другие.

Что поддерживается

На момент написания статьи добавлен только один язык js, так же я пробовал транслировать в go, но только на уровне hello world и делал код робота катающегося по линии на ардуино(c++).

А так же пока не сделана документация.

Поддерживаются блоки if...elif...else, while, for(C подобный и for each), возможность писать с аннотациями типов. Так же поддерживаются макросы. В общем пока можно писать программы уровня олимпиадного программирования.

Планы на будущее

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

И еще хотелось бы web интерфейс как на этой картинке:

P.S.

Это вторая попытка написания статьи.

Поддержите проект звездочкой на гитхаб

Присоединяйтесь к телеграм каналу