背景:作为寒假期间的一个短期项目,我正在尝试使用 Python 和 PLY 实现一种名为 Ax 的编程语言(专为图形计算器设计)。简要说明:该语言仅允许全局变量并大量使用指针。
我正在尝试用这种语言实现 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]]
,以便我可以使用扁平数组的索引转到代码中的特定行,但这似乎缺乏一定的优雅,几乎感觉像是一个步骤倒退(虽然我可能是错的)。
我看过这个,但无法理解它是如何工作的。
任何帮助或提示将不胜感激。