我的语言中赋值的简单示例:
x = 3 ->
在解析后生成的AST(使用Python)如下:
[('statement', ('assignment', 'x', ('assignment_operator', '='), ('expr', ('term', ('factor', '3')))), '->')]
如何递归访问任何可能的深度,以便在最简单的情况下打印所有内容?(或将文本转换为其他格式?)是否有特定的算法来完成这个任务?如果有,您推荐使用哪些材料?
from collections import deque
def walk(node):
queue = deque([node])
while queue:
node = queue.popleft()
if isinstance(node, tuple):
queue.extend(node[1:]) # add the children to the queue
yield node
>>> for node in walk(tree[0]):
... print(node[0] if isinstance(node, tuple) else node)
...
statement
assignment
->
x
assignment_operator
expr
=
term
factor
3
您的数据结构有些混乱,混合了不同长度的元组。您可能需要考虑使用namedtuple
类来更正一下内容。
ast
模块的功能呢?例如ast.walk()
。 - Martijn Pieters