Создание языка программирования на python
Решил попробовать создать пока что простенький язык программирования, который будет иметь задание переменных, арифметика (+ - * /), логические конструкции (== != < >) if/elif/else и цикл for, p() (print()) Всё должно работать ровно как в python.
Уже пробовал с нейросетью, пользовался ply и др. Немного получалось, но было множество ошибок, да и в общем-то я не понимал ничего.
К вопросу. Как написать этот язык программирования? Где можно прочитать про особенности создания, чтобы понять, как пишется код. Также можете, если не трудно, написать этот код и показать как он дорабатывается.
Ответы (1 шт):
Лиха беда начало:
python.py
:
import sys
exec(open(sys.argv[1]).read())
sum.py
:
a = int(input())
b = int(input())
c = a + b
print(c)
$ python python.py sum.py 2 40 42
Но это для разогрева. А на самом деле вам нужно решить следующие задачи:
компиляция: надо прочитать текст программы и преобразовать его во внутреннее представление. Дело в том что ваша программа не может водить пальцем по коду. Надо разобрать все операторы и понять как связаны между собой условия, циклы и вычисления. У нас не BASIC, который допускал интерпретацию прямо из исходного кода.
состояние: вам нужно придумать структуру данных, которая будет хранить все имена и значения переменных, указатель на текущую исполняемую инструкцию и что там ещё понадобится.
интерпретатор: он читает очередную инструкцию на которую указывает указатель, и изменяет состояние: определяет новую переменную или проверяет условие, переносит указатель текущей инструкции. Это делается в цикле, пока программа не завершится.
Самая сложная штука тут – компилятор. Чтобы его было проще написать, надо упростить первую версию вашего языка максимально. Например: for
– сложная конструкция, но любой for
можно заменить while
. Если у вас есть if
, то, в приципе, можно обойтись без elif
и else
. Сложные выражения - удобно, но можно обойтись только конструкциями вида a = 1 + b
. И так далее.
Продолжать?