我正在编写一个软件,用于从用户那里获得带有标准控制流的命令序列(即用户可以嵌套他想要的命令):
cmd1
cmd2
cmd3
loop.1:
cmd1
cmd2
cmd3
loop.2
cmd1
cmd2
endloop.2
cmd4
cmd5
endloop.1
您是否碰巧知道在嵌套结构中保持顺序的数据结构?基本上,什么数据结构用于存储任何语言的输入程序?你知道Python中的等价物吗?我正在尝试使用OrderedDict()
,但应该有一个更加自定义的。
答案 0 :(得分:1)
使用(间接)嵌套列表。我假设你有一个班级
class Command(object):
def execute(self):
# whatever
为您提供基本命令。为循环创建一个子类:
class Loop(Command):
def __init__(self, condition, cmds):
self.body = cmds # list of Commands
self.condition = condition
def execute(self):
while self.condition.execute():
for x in self.body:
x.execute()
答案 1 :(得分:0)
您可以使用二叉树。如果你不想在python中实现一个,你可以伪造这样一棵树的有序遍历并将其存储在一个列表中。
答案 2 :(得分:0)
它被称为Abstract Syntax Tree(简称AST)。
这是一个树,所以它可以被建模为列表列表,但是你可能想要使用更多结构的东西(取决于你希望你的AST“键入”的方式)。 / p>
我将为每个节点设置一个对象,每个节点都有一个“操作”和零个或多个叶子(即子表达式或子语句)。
对于更严格类型的结构,叶子的#将被限制(即使用元组)除了常见的“块”,“body”之外的所有内容,它们只是语句列表,即函数或if / while /对于身体..