Предыстория: В качестве короткого проекта во время зимних каникул я пытаюсь реализовать язык программирования Ax (разработанный для графических калькуляторов) с использованием Python и PLY. Краткое замечание: язык допускает только глобальные переменные и интенсивно использует указатели.
Я пытаюсь реализовать goto на этом языке, но не знаю, как это сделать.
Мой общий метод состоит в том, чтобы сначала использовать PLY для синтаксического анализа кода в ast, а затем пройтись по нему, выполняя по ходу дела.
Например, оператор
If 3
Disp 4
Disp 6
End
... превратился бы в ...
['PROGRAM',
['BLOCK',
['IF',
['CONDITION', 3],
['BLOCK',
['DISP', 4],
['DISP', 6]
]
]
]
]
... который я выполнял бы рекурсивно (я добавил отступы для удобства чтения).
Поскольку ast - это дерево, я не знаю, как переключаться между разными узлами. Я подумал о том, чтобы преобразовать дерево в плоский массив ['IF', ['CONDITION', 3], ['DISP', 4], ['DISP', 6]]
, поэтому что я могу использовать индексы плоского массива для перехода к определенным строкам в коде, но в этом, кажется, отсутствует определенная элегантность, и это почти похоже на шаг назад (хотя я мог ошибаться).
Я просмотрел этот , но не смог понять, как это работает.
Мы будем благодарны за любую помощь или подсказки.