编译原理MindMap

每到学期末都是智商和精力分分钟爆表的时候,这两天用大部分时间把编译原理大概整体复习了一遍,手打了大部分老师的ppt后发现上课时睡过去或者当时觉得认知上有困难的理论实际上也没那么艰深。另有发现就是做电子版的笔记比手写的效率要高很多,画mindmap也是快速整理知识的绝佳途径。以下是做完笔记整理的mindmap。

总得来说实现一个编译器要有七个部分:词法分析、语法分析、语义分析、代码优化和代码生成这五个步骤不能少,符号表管理和错误处理也要贯穿始终。从老师讲课的思路来看,先是把每个部分中最重要的方法和最关键的环节贯了一遍,最后返回来讲词法分析部分的正则表达式和有穷状态机以及语义分析的LL、LR和算符优先文法的部分。讲课的重点其实也主要放在了编译器实现的前端,中间代码和代码优化这部分讲得不是很多。不过在知乎上看到大神说学界上前端的理论已经高度成熟,后端才是真正具有挑战性的部分。认识一个学长很沉迷于底层操作系统和编译器,恐怕心之所向也是简单的前端parser之外的东西吧。

编译器1

总之编译原理也是很“精彩”的一门课,至少辛辛苦苦调试编译器的一个个漫长的下午和夜晚还是像去年学计算机组成原理写多周期CPU一般给了我相当的“震撼”(不过至今优化部分还没完成,原因还是太懒了..),算是实打实地理解了一些底层的东西,不过还是觉得志不在此,就当get了一项新技能吧。

图是用一个叫MindManager的软件做的,功能还不错,但是中间蓝屏一次软件直接崩了n次,幸好有自动保存的神级功能才不至于推倒重来,明天整理完之后把word版也补上。

题图来自艺术家 Benjamin Carbonne