【发布时间】:2011-10-20 04:58:12
【问题描述】:
编写简单的解析器是微不足道的,多年来我已经实现了几个。在大学里,我们也不得不写一篇。但是我们不必使用这种方法生成有意义的输出; 我们从未学习过如何创建后端。
如果我有一个用于简化 Pascal 的递归下降解析器,并且我想将代码转换为 C++,我将如何做呢?我认为不需要生成抽象语法树等中间步骤。
那么我该如何输出已编译或翻译后的代码?我发现的唯一有用的例子是在 Jack Crenshaw 的教程中,但它更侧重于前端,与大多数其他代码一样资源。我的解析器代码和我的语法之间的关系非常明显。解析器方法和输出之间的关系如何?我的函数声明解析器方法可以与一个 EmitLn(C++ code here) 调用完全相关。但是那些不那么容易的解析器方法呢,比如表达式。表达式被分解为可能更多的调用,因此暗示需要一个 Emit() 函数,它允许我逐段分解表达式的输出代码。 有没有输出代码的样板代码,比如 Jack Crenshaw 的 Lets Build a Compiler 中的 EmitLn 函数?这也表明我需要维护一个基本的符号表,这是大多数示例中经常省略的另一件事。
我说的对吗?我还应该知道什么?任何提示/建议或资源?我的大问题是,编译器前端有很多教程,但是后端的一些解释怎么样?我可以解析语言,现在我想将其发展为能够将它们翻译和编译成其他语言。
【问题讨论】:
标签: parsing compilation recursive-descent compiler-construction