编译器实现-1
发表于 | 更新于
这几周一直在研究怎么写编译器,算是这一年学花指令的最后学习了吧。这个写完之后,就专心学Win内核QAQ
目前还没有把编译器写完,所以现在只是先总结一下流程。
目前我遵循的流程是:
输入文本
token流:将输入的文本解析为token字,它是最小的基本词汇,比如把+=视为1个符号,把abcd视为标识符。此处会进行词法检查。
抽象语法树(AST):将token流解析为抽象语法树,以语句块(节点)为基本单位,装载在不同函数块(节点)中。生成结束后,再进行语法检查。
三地址码:将抽象语法树按自顶向下的(从块到句)解析为三地址码,三地址码类似汇编,比如:a += b + c这个AST,会变为tmp = b+c,a = a + tmp,这种方式可以很方便地在下一步映射中间变量为寄存器。
汇编代码:三地址码转化为汇编基本只用实现寄存器初始化,使用和销毁。这一步可以和三地址码一起使用,也就是说可以省略三地址码,直接从抽象语法树转换为汇编。
生成token流这一步需要通过读取文本,解析文本结构来实现输出token流,可以先对输入的内容分类:
123456字符: ...