**编译原理之美:从代码字符串到机器指令的华丽蜕变**

很多人听到“编译原理”四字,脑海中浮现的往往是枯燥的数学公式、晦涩的自动机理论,或是大学里让人头秃的语法书。但《编译原理之美》这门课将彻底打破这一刻板印象。它并非一门高深莫测的理论课,而是一场动手实现的旅程——你将亲手从零开始,构建一门属于自己的脚本语言,在代码的起伏中领略逻辑的严谨与设计的优雅。

课程伊始,开篇词便直抵人心:为何在解释型语言盛行的今天,我们仍需理解编译器?因为编译原理是计算机科学的基石,它揭示了代码从“人读”到“机读”的完整映射关系。只有理解了这一过程,你才能写出更高效、更健壮的程序,才能真正掌控技术的底层脉络。

本门课程的核心亮点在于“手撸编译器”与“工具结合”的双轨并行。在前端技术篇中,你将不再依赖现成的框架,而是纯手工打造词法分析器。通过正则文法和有限自动机(NFA/DFA),你会明白那些看似简单的字符串是如何被拆解为有意义的Token的。紧接着,课程深入语法分析,从最简单的公式计算器入手,逐步解决加减乘除的优先级难题,最终引入递归下降分析法,构建出完整的抽象语法树(AST)。这一过程不仅锻炼了算法思维,更让你对表达式求值有了醍醐灌顶的理解。

随着课程的推进,实现的重心转向了语言的“灵魂”——语义与运行环境。课程详细讲解了作用域与生存期的管理,带你实现块级作用域和函数调用;进而引入面向对象编程,封装数据与方法;最后攻克闭包这一概念,让你明白“理解了原理,闭包就不反直觉了”。这一系列环节,将数据结构与算法知识有机融合,展现了编译系统在复杂语义处理上的精妙设计。

为了贴近工业实践,课程还专门设置了Antlr工具篇。你将被引导使用强大的ANTLR框架重构脚本语言,生成词法与语法分析器。这不仅是对前序手工实现的一次复盘与升华,更是通向现代编译器开发大门的钥匙。最后,关于类型系统的章节将带你建立完善的语义检查机制,为语言的安全性保驾护航。

无论你是希望夯实底层基础的初学者,还是渴望突破瓶颈的后端工程师,《编译原理之美》都提供了一次难得的“造物”机会。在这里,编译不再是黑盒,而是一座清晰可见、充满秩序之美的桥梁。来吧,赴一场100分的约定,一起探索代码背后的真理。

课程目录

开篇词 (1讲)

  1. 开篇词 _ 为什么你要学习编译原理?

编译原理 · 期中考试周 (1讲)

  1. 期中考试 _ 来赴一场100分的约定吧!

实现一门脚本语言 · 原理篇 (13讲)

  1. 01 _ 理解代码:编译器的前端技术
  2. 02 _ 正则文法和有限自动机:纯手工打造词法分析器
  3. 03 _ 语法分析(一):纯手工打造公式计算器
  4. 04 _ 语法分析(二):解决二元表达式中的难点
  5. 05 _ 语法分析(三):实现一门简单的脚本语言
  6. 06 _ 编译器前端工具(一):用Antlr生成词法、语法分析器
  7. 07 _ 编译器前端工具(二):用Antlr重构脚本语言
  8. 08 _ 作用域和生存期:实现块作用域和函数
  9. 09 _ 面向对象:实现数据和方法的封装
  10. 10 _ 闭包: 理解了原理,它就不反直觉了
  11. 11 _ 语义分析(上):如何建立一个完善的类型系统?
  12. 12 _ 语义分析(下):如何做上下文相关情况的处理?
  13. 13 _ 继承和多态:面向对象运行期的动态特性

实现一门脚本语言 · 应用篇 (2讲)

  1. 14 _ 前端技术应用(一):如何透明地支持数据库分库分表?
  2. 15 _ 前端技术应用(二):如何设计一个报表工具?

实现一门脚本语言 · 算法篇 (3讲)

  1. 16 _ NFA和DFA:如何自己实现一个正则表达式工具?
  2. 17 _ First和Follow集合:用LL算法推演一个实例
  3. 18 _ 移进和规约:用LR算法推演一个实例

实现一门脚本语言 · 热点答疑与用户故事 (2讲)

  1. 19 _ 案例总结与热点问题答疑:对于左递归的语法,为什么我的推导不是左递归的?
  2. 用户故事 _ 因为热爱,所以坚持

实现一门编译型语言 · 原理篇 (12讲)

  1. 20 _ 高效运行:编译器的后端技术
  2. 21 _ 运行时机制:突破现象看本质,透过语法看运行时
  3. 22 _ 生成汇编代码(一):汇编语言其实不难学
  4. 23 _ 生成汇编代码(二):把脚本编译成可执行文件
  5. 24 _ 中间代码:兼容不同的语言和硬件
  6. 25 _ 后端技术的重用:LLVM不仅仅让你高效
  7. 26 _ 生成IR:实现静态编译的语言
  8. 27 _ 代码优化:为什么你的代码比他的更高效?
  9. 28 _ 数据流分析:你写的程序,它更懂
  10. 29 _ 目标代码的生成和优化(一):如何适应各种硬件架构?
  11. 30 _ 目标代码的生成和优化(二):如何适应各种硬件架构?
  12. 加餐 _ 汇编代码编程与栈帧管理

实现一门编译型语言 · 应用篇 (2讲)

  1. 31 _ 内存计算:对海量数据做计算,到底可以有多快?
  2. 32 _ 字节码生成:为什么Spring技术很强大?

实现一门编译型语言 · 扩展篇 (3讲)

  1. 33 _ 垃圾收集:能否不停下整个世界?
  2. 34 _ 运行时优化:即时编译的原理和作用
  3. 35 _ 案例总结与热点问题答疑:后端部分真的比前端部分难吗?

面向未来的编程语言 (3讲)

  1. 36 _ 当前技术的发展趋势以及其对编译技术的影响
  2. 37 _ 云编程:云计算会如何改变编程模式?
  3. 38 _ 元编程:一边写程序,一边写语言

结束语 (2讲)

  1. 第二季回归 _ 这次,我们一起实战解析真实世界的编译器
  2. 结束语 _ 用程序语言,推动这个世界的演化

结课测试 (1讲)

  1. 结课测试 _ 编译原理的这些知识,你都掌握了吗?