-1

我想为“新”语言设计一个编译器。新语言将有自己的语法并输出有效的 C 代码。也就是说,从伪代码生成 ac 代码。我设计了一个语法。执行递归下降解析并得到抽象语法树。例如,我得到了 if 结构树。如何将其映射到原始 c 代码?我可以执行按顺序遍历吗?

我读过 Aho Ullman 的书。解释器的执行和编译的区别是什么?我可以应用访客模式吗?

4

1 回答 1

2

与将其映射到机器代码的方式相同,但输出 C。这将使一些事情变得更容易(您可以利用 C 编译器的符号表而不是构建自己的符号表)和一些事情更难(因为您必须以 C 可以接受的方式表达事物)。

请注意,在大多数情况下,您需要将抽象语法树转换为具体的语义树,除非两者在您的语言中几乎相同。

解释器只运行语义树中实际执行的部分,并且可能重复运行这些部分;它还在解释器的内存模型中处理数据。编译器必须在整个语义树上运行一次,并生成所有可能执行的代码;一般来说,它还必须生成一个完整的内存模型,但正如我所说,输出 C 会让你部分作弊。

对于这些问题,龙书有更详细的解答。基本上,您会将 C 视为“高级汇编程序”。

于 2014-03-07T05:08:08.380 回答