我想设计一个'新'语言的编译器。新语言将拥有自己的语法并输出一个有效的C代码。也就是说,从伪代码生成ac代码。我设计了一个语法.perform递归下降解析并得到了抽象语法树。例如,我得到了一个if结构树。如何将它映射到原始c代码?我可以执行有序遍历或其他什么吗?
我读过Aho Ullman的书。解释器和编译的执行有什么区别? 我可以申请访客模式吗?
答案 0 :(得分:2)
与将其映射到机器代码的方式相同,但输出C代替。这将使一些事情变得更容易(您可以利用C编译器的符号表而不是构建自己的符号表)和更难的事情(因为您必须以C将接受的方式表达事物)。
请注意,在大多数情况下,您需要将抽象语法树转换为具体的语义树,除非两者在您的语言中几乎完全相同。
解释器仅在语义树的实际执行部分上运行,并且可以重复运行;它还在解释器的内存模型中操作数据。编译器必须在整个语义树上运行一次,并生成可能执行的所有代码;一般来说,它还必须生成一个完整的内存模型,但正如我所说,输出C将让你部分欺骗。
龙书对这些问题有更详细的解答。基本上,您将把C视为“高级汇编程序”。