0

我们必须读取并执行一个用编造的编程语言编写的外部文件。以下是该语言的示例:

[while
   [x-is-larger-than 300]
   [seq
      [command1]
      [command2]
   ]
]

我们正在考虑为每个命令或条件使用不同的类。

我们的问题是:我们如何按顺序读取和执行这些命令?

谢谢!

4

2 回答 2

2

我强烈建议你

  1. 为发明的语言写一个语法
  2. 使用解析器生成器为语言生成解析器

进而

  1. 使用解析器解析给定的程序。
  2. 通过直接遍历 AST 来执行程序,
    或者,
    将 AST 编译为易于逐语句解释的顺序程序。
于 2012-05-09T10:08:07.703 回答
2

将所有命令放在堆栈/列表中

所以你会有:

6: ]
5: ]
4: [command2]
3: [command1]
2: [seq
1: [x-is-larger-than 300]
0: [while

因此,如果您阅读“While” .... 保存它的堆栈位置并运行它...

  1. 0 -> 开始时
  2. 1 -> x 大于 300 ?
  3. 2 -> if 2. sequence start else clear stack
  4. 3 -> 运行命令直到 ] 到达
  5. 4 -> 从保存的堆栈位置 (0) 开始 -> 从 1 开始。

这就是我会做的。将命令转换为代码(解析)将是你的!;)

于 2012-05-09T10:18:45.363 回答