Предыстория: В качестве короткого проекта во время зимних каникул я пытаюсь реализовать язык программирования 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]]
, чтобы я мог использовать индексы массива с плоской изогнутой линией для перехода к конкретным строкам в коде, но, похоже, ему не хватает определенной элегантности, и он кажетсякак шаг назад (хотя я могу ошибаться).
Я смотрел на это , но не смог понять, как это работает.
Любая помощь или советыбудет оценена.