# 编译原理系统学习路线(2024年最新)

分享一下编译原理相关学习攻略。

编译原理这门课算是计算机很重要的专业课之一,但是呢,由于面试几乎不考,考研也不考,并且呢,大家学习了感觉作用也不大。

所以在不少学校,这门课就是选修课,大多数学校上成了理论课程这种,我们学校当时也是这样的,基本上就是学了一堆像有限状态机、上下文无关文法、递归下降分析、LL、LR这样的语法分析方法。

到现在像 LL、LR这样的分析算法具体步骤也早已忘了,不过我还是觉得如果还在大一、大二阶段,时间充足,编译原理还是非常值得学习的一门课。

当然,如果现在需要用到编译原理的知识,大多数场景都直接使用 yacc(自己定义文法,会帮你生成语法分析器),根本不会自己手动去实现语法分析。

# 学编译原理有什么好处?

  1. 有助于帮助理解高级语言是如何转换为汇编代码、二进制代码的

  2. 在一些场景可以实现DSL(领域特定语言),类似 markdown、SQL、Latex 这种都算是 DSL,实际工作中类似美团、阿里这种大公司尤其是优惠券那一套体系,往往都需要一套DSL来表达各种优惠组合规则

  3. 能够更深入理解语言特性,各种语法规则

# 学习编译原理需要哪些基础

编译原理属于计算机高年级课程,至少熟练掌握一门编程语言,比如 C/C++、Java、Go、JS等,尤其是擅长某门编程语言最好,因为如果要实践可能使用 C++/Java 实现 TinyC、TinyJava 解释器( C语言和 Java语言的子集)

另外,最好了解一些基本的数据结构和编程概念,比如树、栈、队列、正则表达式、递归等,这些会有助于你学习编译器前端技术。

有一些计算机组成原理、汇编方面的知识,会有助于你学习编译器的后端技术,代码生成等。

# 理论课程

如果单纯想学习编译原理理论,应对学校考试,那么可以看下哈工大的编译原理网课:

https://www.icourse163.org/course/HIT-1002123007#/info (opens new window)

这门课也是当时我看过的,特别适合学校要考试的同学,理论讲解很清晰。

# 结合理论,做一些编译器实践

结合一点实践,中科大华老师的编译原理课程,会

https://mooc.study.163.com/course/1000002001 (opens new window)

这门课会有几个 Lab:http://staff.ustc.edu.cn/~bjhua/courses/compiler/2014/

引用课程介绍:

在本课程的这些系列实验中,您的工作是为 MiniJava 编程语言从头开始设计和实现一个名为 Tiger 的编译器。MiniJava是Java编程语言的一个非平凡的子集,在Tiger书的附录中有描述。同时,您将使用 Java 作为实现编程语言(因此我们遵循编译器设计史上著名的先有鸡还是先有蛋的传统)。在本课程结束时,您将深入学习如何使用 Java 为现代 OO 语言(如 Java)实现编译器。 有六个实验室,并计划进行最终项目:

这门课有六个实验:

# 斯坦佛 CS 143 课程

斯坦福大学的CS 143课程是编译原理领域非常有名的课程,课程目标是理解编译器的设计和实现。

将学习各个编译器的关键组成部分,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等。

另外,课程还涵盖了一些高级主题,比如并行编译和Just-In-Time(JIT)编译等。

同时课程也会设计和实现一个 Class-Object-Oriented-Language,简称 COOL 语言。

  • 课程网站:

http://web.stanford.edu/class/cs143/ (opens new window)

  • 课程视频:

B站:https://www.bilibili.com/video/BV1NE411376V (opens new window)

  • 课程教材:

中文名:编译原理技术和工具 英文名:Compilers: Principles,Techniques,and Tools

课程作业:5 个书面作业 + 5 个编程作业带你实现一个编译器

# 其它编译原理DIY资料

  • 两周自制编程语言

初学者可以先阅读编译器 DIY 类的书籍因为这样可以先忽略复杂的理论,先获得直觉认识,甚至具备动手能力。

  • 网易云课堂:自己动手用java写编译器

https://study.163.com/course/introduction.htm?courseId=1002830012 (opens new window)

  • 在线文档: 《自己动手写编译器》

这本书将介绍一个非常简单的编译器( TinyC 编译器)的实现,用简单和易于实现的实例来描述基本的编译原理及过程

https://pandolia.net/tinyc/

非常推荐!

  • llvm:

https://llvm.org/docs/ (opens new window)

  • antlr 项目

https://www.antlr.org/ (opens new window)

  • 编译三大书籍:龙书、虎书、鲸书

编译原理三大经典:龙书 虎书 鲸书 (opens new window)

最后说一下,编译原理,适合时间充足学习计算机的同学,比如大一、大二,如果你在赶着准备校招、考研等,就先把这个放一放~(因为面试基本不考察

最新原创的文章都先发布在公众号,欢迎关注哦~,
扫描下方二维码回复「CS」可以获得我汇总整理的计算机学习资料~

编程指北图片
@2021-2024 编程指北 版权所有 粤ICP备2021169086号-2