Skip to content

liushuailong/compiler-learn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

编译器学习

目标人群(本人的水平)

具有高级语言(python,rust,c)编程经验,没有编译器相关知识储备,不懂汇编,希望了解高级编成语言的实现到编译成可执行程序在cpu上运行的整个过程。

说明

这个库对应了北大文档 Lv01-Lv02 章节的时间,独立实现抽象语法树以及将抽象语法树生成对应的 koop IR 中间表示,独立遍历 koopa IR 的内存数据结构生成对应的 RISC-V 汇编。

学习参考

  • 北大编译实践在线文档
    该文档主要针对有一定 rust/c++ 编程基础,也要掌握汇编。教程中值给了一些编程提示,需要自己去实现,感觉对编码实践不多的的是个挑战,这个还是挺好的。
    由于koopa的接口文档没有教程,需要根据其源码才能遍历其结构,进而生成对应的 risc-v 的汇编代码,从这就可以看出这个对编码能力,阅读代码能力和汇编能力都有较高的要求。
  • 硬核课程】编译器设计【使用教材:编译器设计(第2版)
    《编译器设计》这本教材对于0基础的初学者,需要认真阅读以下,明白一些关键概念如上限文无关文法,DFA与NFA等。在看看视频会有不错的理解。
  • 【汇编语言】小甲鱼零基础汇编真正全集1-17章
    该课程是使用王爽老师编写的教才,可以和书本结合学习,该课程就是按照书本内容来讲解。

学习注意事项

rust使用的语法生成器是使用lalrpop这个库,故在创建lalrpop文件时要结合上下文无关文法和这个库的使用文档,明白如何将规则和自己写的抽象语法树结合起来。 在遍历 koopa IR 的数据结构时需要结合 koopa 库 api 文档,自己理清如何使用该api,文档没有给出如何使用的列子,北大文档里面说的也过于简略,以至于刚开始遍历时无从下手。

About

learn complier design

Resources

Stars

Watchers

Forks

Packages

No packages published