**编译原理之美:从代码字符串到机器指令的华丽蜕变**
很多人听到“编译原理”四字,脑海中浮现的往往是枯燥的数学公式、晦涩的自动机理论,或是大学里让人头秃的语法书。但《编译原理之美》这门课将彻底打破这一刻板印象。它并非一门高深莫测的理论课,而是一场动手实现的旅程——你将亲手从零开始,构建一门属于自己的脚本语言,在代码的起伏中领略逻辑的严谨与设计的优雅。
课程伊始,开篇词便直抵人心:为何在解释型语言盛行的今天,我们仍需理解编译器?因为编译原理是计算机科学的基石,它揭示了代码从“人读”到“机读”的完整映射关系。只有理解了这一过程,你才能写出更高效、更健壮的程序,才能真正掌控技术的底层脉络。
本门课程的核心亮点在于“手撸编译器”与“工具结合”的双轨并行。在前端技术篇中,你将不再依赖现成的框架,而是纯手工打造词法分析器。通过正则文法和有限自动机(NFA/DFA),你会明白那些看似简单的字符串是如何被拆解为有意义的Token的。紧接着,课程深入语法分析,从最简单的公式计算器入手,逐步解决加减乘除的优先级难题,最终引入递归下降分析法,构建出完整的抽象语法树(AST)。这一过程不仅锻炼了算法思维,更让你对表达式求值有了醍醐灌顶的理解。
随着课程的推进,实现的重心转向了语言的“灵魂”——语义与运行环境。课程详细讲解了作用域与生存期的管理,带你实现块级作用域和函数调用;进而引入面向对象编程,封装数据与方法;最后攻克闭包这一概念,让你明白“理解了原理,闭包就不反直觉了”。这一系列环节,将数据结构与算法知识有机融合,展现了编译系统在复杂语义处理上的精妙设计。
为了贴近工业实践,课程还专门设置了Antlr工具篇。你将被引导使用强大的ANTLR框架重构脚本语言,生成词法与语法分析器。这不仅是对前序手工实现的一次复盘与升华,更是通向现代编译器开发大门的钥匙。最后,关于类型系统的章节将带你建立完善的语义检查机制,为语言的安全性保驾护航。
无论你是希望夯实底层基础的初学者,还是渴望突破瓶颈的后端工程师,《编译原理之美》都提供了一次难得的“造物”机会。在这里,编译不再是黑盒,而是一座清晰可见、充满秩序之美的桥梁。来吧,赴一场100分的约定,一起探索代码背后的真理。
课程目录
开篇词 (1讲)
- 开篇词 _ 为什么你要学习编译原理?
编译原理 · 期中考试周 (1讲)
- 期中考试 _ 来赴一场100分的约定吧!
实现一门脚本语言 · 原理篇 (13讲)
- 01 _ 理解代码:编译器的前端技术
- 02 _ 正则文法和有限自动机:纯手工打造词法分析器
- 03 _ 语法分析(一):纯手工打造公式计算器
- 04 _ 语法分析(二):解决二元表达式中的难点
- 05 _ 语法分析(三):实现一门简单的脚本语言
- 06 _ 编译器前端工具(一):用Antlr生成词法、语法分析器
- 07 _ 编译器前端工具(二):用Antlr重构脚本语言
- 08 _ 作用域和生存期:实现块作用域和函数
- 09 _ 面向对象:实现数据和方法的封装
- 10 _ 闭包: 理解了原理,它就不反直觉了
- 11 _ 语义分析(上):如何建立一个完善的类型系统?
- 12 _ 语义分析(下):如何做上下文相关情况的处理?
- 13 _ 继承和多态:面向对象运行期的动态特性
实现一门脚本语言 · 应用篇 (2讲)
- 14 _ 前端技术应用(一):如何透明地支持数据库分库分表?
- 15 _ 前端技术应用(二):如何设计一个报表工具?
实现一门脚本语言 · 算法篇 (3讲)
- 16 _ NFA和DFA:如何自己实现一个正则表达式工具?
- 17 _ First和Follow集合:用LL算法推演一个实例
- 18 _ 移进和规约:用LR算法推演一个实例
实现一门脚本语言 · 热点答疑与用户故事 (2讲)
- 19 _ 案例总结与热点问题答疑:对于左递归的语法,为什么我的推导不是左递归的?
- 用户故事 _ 因为热爱,所以坚持
实现一门编译型语言 · 原理篇 (12讲)
- 20 _ 高效运行:编译器的后端技术
- 21 _ 运行时机制:突破现象看本质,透过语法看运行时
- 22 _ 生成汇编代码(一):汇编语言其实不难学
- 23 _ 生成汇编代码(二):把脚本编译成可执行文件
- 24 _ 中间代码:兼容不同的语言和硬件
- 25 _ 后端技术的重用:LLVM不仅仅让你高效
- 26 _ 生成IR:实现静态编译的语言
- 27 _ 代码优化:为什么你的代码比他的更高效?
- 28 _ 数据流分析:你写的程序,它更懂
- 29 _ 目标代码的生成和优化(一):如何适应各种硬件架构?
- 30 _ 目标代码的生成和优化(二):如何适应各种硬件架构?
- 加餐 _ 汇编代码编程与栈帧管理
实现一门编译型语言 · 应用篇 (2讲)
- 31 _ 内存计算:对海量数据做计算,到底可以有多快?
- 32 _ 字节码生成:为什么Spring技术很强大?
实现一门编译型语言 · 扩展篇 (3讲)
- 33 _ 垃圾收集:能否不停下整个世界?
- 34 _ 运行时优化:即时编译的原理和作用
- 35 _ 案例总结与热点问题答疑:后端部分真的比前端部分难吗?
面向未来的编程语言 (3讲)
- 36 _ 当前技术的发展趋势以及其对编译技术的影响
- 37 _ 云编程:云计算会如何改变编程模式?
- 38 _ 元编程:一边写程序,一边写语言
结束语 (2讲)
- 第二季回归 _ 这次,我们一起实战解析真实世界的编译器
- 结束语 _ 用程序语言,推动这个世界的演化
结课测试 (1讲)
- 结课测试 _ 编译原理的这些知识,你都掌握了吗?




