- Устанавливаем в своё виртуальное окружение
ply
.
pip install ply
- Пишем код на PEVOL, примеры есть в тестах.
python3 parse.py ./tests/test7.txt
- Запускаем все тесты, не забываем сделать
chmod
.
./run_tests.sh
Есть несколько реализованных операторов:
OUT
- вывод переменной или выражения.+
- сложение двух выражений, переменных.=
- присваивание значения переменной.;
- окончание операции.
! Все переменные проинициализированны, и имеют нулевое значение.
1 + 1; # вычисление форсируется,
# но никуда не сохраняется.
; # пустая операция.
a; # вернется нуль.
b = a + 10 + c; # то есть 0 + 10 + 0 = 10;
OUT b + 1; # 10 + 1, выведется 11.
OUT c = 10 + 1; # вывод 11.
a = 1 1 1 2 2 # опускаем + и ;, но стратегия
# подставит за нас + и ;
# a = 1 + 1 + 1 + 2 + 2; -> 7
OUT a; # 7
1 = a; # -> 1 + a;
b = 1 = a; # -> b = a + 1;
OUT k # -> OUT k; -> 0
b = 10; OUT b; b = 20; OUT b; # -> 20 10
a = 1; OUT a; a = a + 1; OUT a; a = a + 1; OUT a;
# -> 102 101 100
aa = 11;
k = aa bb cc dd + 10 + 2 5 + 1 # k = 29
OUT ds = 1033 + 1 2; # -> 1036
OUT ds; # -> 1036
# ... и другие сценарии.
Объектами являются переменные, выражения и пустые строки.
Переменная есть присвоение выражения.
Выражение - сумма чисел и переменных.
Всё есть операции вывода, и форсирования объектов, и цепочки операций.
operation -> OUT object SEMICOLON operation
| object SEMICOLON operation
| empty
object -> variable
| expression
| empty
variable -> VAR ASSIGN expression
expression -> expression PLUS expression
| NUM
| VAR
Всегда восполняются пропущенные ;
, добавляются
забытые знаки +
, потому что у языка только
одна арифметическая операция. Также в местах, где не может
стоять =
, меняется на +
.
В stdout
выводит результат программы, в файл
*.stdout
отдается файл с исправленным кодом,
а в *.stderr
отдаются абсолютно все ошибки.