Программа на Guu состоит из набора процедур. Каждая процедура начинается со строки sub и завершается объявлением другой процедуры (или концом файла, если процедура в файле последняя). Исполнение начинается с sub main
.
Тело процедуры – набор инструкций, каждая из которых находится на отдельной строке. В начале строки могут встречаться незначимые символы табуляции или пробелы. Пустые строки игнорируются. Комментариев в Guu нет.
В Guu есть лишь три оператора:
set <varname> <new value>
– задание нового целочисленного значения переменной.call <subname>
– вызов процедуры. Вызовы могут быть рекурсивными.print <varname>
– печать значения переменной на экран.
Переменные в Guu имеют глобальную область видимости. Программа ниже выведет на экран строку a = 2
.
sub main
set a 1
call foo
print a
sub foo
set a 2
А вот простейшая программа с бесконечной рекурсией:
sub main
call main
Необходимо написать пошаговый интерпретатор для Guu. При его запуске отладчик должен останавливаться на строчке с первой инструкцией в sub main и ждать команд от пользователя. Минимально необходимый набор команд отладчика:
i
– step into, отладчик заходит внутрьcall <subname>
.o
– step over, отладчик не заходит внутрьcall
.trace
– печать stack trace исполнения с номерами строк, начиная сmain..
var
– печать значений всех объявлённых переменных.save
- сохраняет стек на момент вызова функции
Интерпретатор написано на языке программирования Kotlin
Версия компилятора - Kotlin version 1.3.31-release-197 (JRE 11.0.2+9)