存储程序序列的数据结构 - Python

时间:2011-11-21 20:05:10

标签: python data-structures

我正在编写一个软件,用于从用户那里获得带有标准控制流的命令序列(即用户可以嵌套他想要的命令):

   cmd1
   cmd2
   cmd3
   loop.1:
    cmd1
    cmd2
    cmd3
      loop.2
        cmd1
        cmd2
      endloop.2
    cmd4
    cmd5
   endloop.1

您是否碰巧知道在嵌套结构中保持顺序的数据结构?基本上,什么数据结构用于存储任何语言的输入程序?你知道Python中的等价物吗?我正在尝试使用OrderedDict(),但应该有一个更加自定义的。

3 个答案:

答案 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 /对于身体..