gpt4 book ai didi

parsing - 有关将语法树转换为程序集的资源?

转载 作者:行者123 更新时间:2023-12-05 00:38:59 26 4
gpt4 key购买 nike

主要作为学习练习,我正在从头开始编写虚拟机、汇编器和编译器,不依赖于外部工具。

我相信我对虚拟机和汇编器的工作方式以及编译器的某些部分有一个不错的概念性理解。

这是我想知道的:
在编译器中,假设我已经将源代码变成了一个语法树。我要经过什么过程才能将此语法树转换为程序集?

(让我们假设一些简单的语言结构,比如 if 和 while。我在这里寻找一个最小和简单的解释。)

我对复杂的解决方案或基于现有工具的解决方案并不特别感兴趣。相反,我想要大约 1 页的内容,对从语法树到汇编背后的思想进行广泛全面的描述。

有人知道这样的资源吗?

谢谢 :)

最佳答案

对编译器问题的强制性回答是阅读 Dragon 书(编译器:原理、技术和工具)。当你说你已经把源代码变成了一个语法树,你到底是什么意思?通常解析的第一阶段是创建抽象语法树 (AST)。下一步通常是待办事项归因。属性是 AST 中节点的属性,不一定与源语言有任何关系,但对代码生成至关重要。通常在此处进行某种形式的类型检查以确定内存大小要求,以及在面向对象语言中要调用的函数。例如,如果您的来源是 obj1=obj2+obj3,那么在您确定 obj2 的类型之前,您真的不知道加号是什么。

因此,尝试回答您的问题。 1) 将源代码解析为 AST。 2)在AST上做归因。 3)生成中间代码(想象你指的是程序集)。

龙书的第 5 章和第 6 章详细介绍了这一点。真正棘手的部分是弄清楚代码生成所需的属性。此外,if 语句也存在一些棘手的问题。例如,如果 if 条件失败,你知道你需要跳过一些代码,但至少在最初,你不知道多远。回补丁是解决此问题的一种方法。

关于parsing - 有关将语法树转换为程序集的资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4938179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com