Предыстория
Весной 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.
Это вторая попытка написания статьи.
Поддержите проект звездочкой на гитхаб
Присоединяйтесь к телеграм каналу
Автор: lexaploskov