37 | 从AST到IR:体会数据流和控制流思维
宫文学
你好,我是宫文学。
在上一节课,我们已经初步认识了基于图的 IR。那接下来,我们就直接动手来实现它,这需要我们修改之前的编译程序,基于 AST 来生成 IR,然后再基于 IR 生成汇编代码。
过去,我们语言的编译器只有前端和后端。加上这种中间的 IR 来过渡以后,我们就可以基于这个 IR 添加很多优化算法,形成编译器的中端。这样,我们编译器的结构也就更加完整了。
今天这节课,我先带你熟悉这个 IR,让你能够以数据流和控制流的思维模式来理解程序的运行逻辑。之后,我还会带你设计 IR 的数据结构,并介绍 HIR、MIR 和 LIR 的概念。最后,我们再来讨论如何基于 AST 生成 IR,从而为基于 IR 做优化、生成汇编代码做好铺垫。
首先,我还是以上一节课的示例程序为础,介绍一下程序是如何基于这个 IR 来运行的,加深你对控制流和数据流的理解。
理解基于图的运行逻辑
下面是上节课用到的示例程序,一个带有 if 语句的函数,它能够比较充分地展示数据流和控制流的特点:
我们把这个程序转化成图,是这样的:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
基于图的IR设计及转换过程是本文的主要内容。文章首先介绍了HIR、MIR和LIR之间的区别,以及它们在编译器中的作用。作者详细讲解了将AST翻译成HIR的过程,强调了在这一过程中需要注意的细节和区别。此外,文章还探讨了控制流和数据流的相对独立性,以及IR设计中数据节点和控制节点的特点。最后,作者提出了思考题,帮助读者更好地理解不同IR类型的应用场景。总的来说,本文深入浅出地介绍了基于图的IR设计和转换过程,对于想深入了解编译器中间表示的读者具有很高的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- ifelse学习打卡2022-10-01归属地:浙江
- 有学识的兔子HIR 贴近源码,会基于SSA进行格式化; LIR 接近汇编的一种表达;MIR介于两者之间,与硬件尽量无关; 因此问题对应的顺序是HIR,MIR,LIR。2021-11-14
- 奋斗的蜗牛老师,节点之海和DAG是指同一种IR吗2021-11-091
- 奋斗的蜗牛场景1是HIR,场景2是MIR,场景3是LIR2021-11-08
- 奋斗的蜗牛厉害,老师的水平真高,编译原理到老师的手里,信手拈来2021-11-08
- 奋斗的蜗牛太赞了,感觉一下子茅塞顿开2021-11-08
收起评论