news 2026/8/6 1:44:16

编译原理实战:从 0 手写编译器,并在真实云主机上跑通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
编译原理实战:从 0 手写编译器,并在真实云主机上跑通

编译原理实战:从 0 手写编译器,并在真实云主机上跑通

编译原理实战系列 · 总览 / 开篇

为什么写这个系列

编译原理是计算机科学里最"硬核"、也最"实用"的基石之一。可现实里很多工程师对它的印象停留在:课本上抽象的正则文法、推得人头大的 First/Follow 集合、永远调不对的移进-规约冲突。

这个系列反其道而行——不堆理论,只动手。我用 Python 在真实云主机(华为云 4 台 FlexusX,Ubuntu 24.04,2vCPU/2GB)上,亲手把编译器从前端到后端、从玩具到业务场景,一行行写出来并真实跑通。所有贴出的输出,都是机器实测,没有一行是"想象"的。

参考主线是宫文学在极客时间的《编译原理》课程结构:先实现一门脚本语言(解释型),再实现一门编译型语言(生成目标代码 + LLVM + 优化),最后落到 SQL 解析、报表工具等真实业务。

你会读到什么

篇目主题云主机核心产出
01 前端:手写脚本语言词法分析 / 递归下降语法分析 / 作用域 / 闭包 / 面向对象 / 语义分析m1一门可运行的脚本语言 PlayScript 解释器
02 后端:汇编与 LLVMx86-64 汇编生成 / LLVM IR / 常量折叠 / 死代码消除m2同一门语言编译到汇编与 LLVM IR 并运行
03 算法:正则引擎与 VMThompson NFA / 子集构造 / DFA 最小化 / 栈式字节码 VMm3一个正则引擎 + 一个字节码虚拟机
04 应用:SQL 与报表SQL 解析与分库分表透明路由 / 报表模板 DSL / 动态代理m4两个可直接套进业务的编译技术应用

工作方式与实验环境

为了体现"多 agent 协同、真机实操",我把 4 个相对独立的主题分别部署到 4 台独立的云主机上并行推进,每台机器只跑自己那部分代码,互不干扰,也便于复现:

  • m1139.9.136.51— 前端脚本语言(纯 Python,无需安装)
  • m21.92.96.10— 后端代码生成(gcc 13.3 + clang 18 / llvm)
  • m3117.78.4.177— 正则引擎与字节码 VM(纯 Python)
  • m4124.70.85.75— SQL 解析与报表模板(纯 Python)

所有代码都通过run_all.sh在对应机器上一键运行,输出保存在output.txt,博客中全部原样引用。

一键复现

# 任选一台机器(以 m1 为例)sshroot@139.9.136.51# 密码见仓库/任务说明gitclone<本仓库>cdcompiler/front python3 run_all.sh# 运行全部示例,输出落在 output.txt

四台机器对应目录:front/back/vm/app/,结构完全一致。

关键结论(先剧透)

  • 编译器前端难在"取舍":二元表达式的优先级、左/右结合、成员访问与函数调用的后缀解析,递归下降里用"分层函数"就能优雅解决,比死记文法更可靠。
  • 闭包和多态一点都不神秘:闭包 = 函数 + 捕获的环境对象;多态 = 运行时按对象实际类型查方法表。几行 Python 就能让直觉落地。
  • 后端真正卡人的是"约定":调用约定、栈帧布局、寄存器分配——生成的汇编能不能跑,往往取决于有没有遵守 ABI。LLVM IR 则把这一步从你手里接走了。
  • 优化必须"保语义":常量折叠、死代码消除之所以安全,是因为它们只对"不影响可观测结果"的部分动手;正确性永远优先于性能。

逐篇点进去看代码和真实输出即可。建议按 01 → 02 → 03 → 04 的顺序阅读,难度与抽象层级逐级抬升。


本系列所有代码与博客均已在华为云 ECS 真实运行验证。仓库地址见文末。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 1:44:13

高效实现照片元数据批量管理:ExifToolGUI操作指南

高效实现照片元数据批量管理&#xff1a;ExifToolGUI操作指南 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui ExifToolGUI是一款基于ExifTool开发的图形界面工具&#xff0c;专门用于批量处理照片元数据管理…

作者头像 李华
网站建设 2026/8/6 1:42:52

drupal网站建设全流程解析:如何打造高安全、易扩展的企业级网站

在如今这个互联网信息爆炸的时代,选择一个合适的 CMS(内容管理系统)来搭建网站,简直就是一场关于“面子”和“里子”的博弈。很多刚入行的站长朋友,或者是一拍脑门决定做数字化转型的传统企业老板,往往第一反应是:“我要做个网站,用什么快?”这时候,WordPress 就像那…

作者头像 李华
网站建设 2026/8/6 1:41:57

从线性到开关:D类功放的高效原理与设计实战

1. 从线性到开关&#xff1a;功率放大器为何要“切换赛道”&#xff1f;如果你拆开过一台老式的音响功放&#xff0c;或者玩过一些发烧级的耳机放大器&#xff0c;大概率会看到里面有几颗巨大的散热片&#xff0c;甚至还有风扇。这些“大家伙”的存在&#xff0c;往往意味着一个…

作者头像 李华
网站建设 2026/8/6 1:40:39

从 push 到上线 10 秒:手把手搭一条 Facebook 风格的 CI/CD 流水线

从 push 到上线 10 秒&#xff1a;手把手搭一条 Facebook 风格的 CI/CD 流水线本文是《研发效能实战》系列第三篇。参考极客时间《研发效能》课程第 5、6 讲&#xff08;代码入库前 Facebook 如何让开发人员聚焦于开发&#xff1b;代码入库到产品上线的 CI/CD&#xff09;&…

作者头像 李华
网站建设 2026/8/6 1:40:08

MacBook Air M4 和 M5 怎么选?

这两个版本其实没有想象中那么难选。我先把结论放前面&#xff1a;正常价买新机&#xff0c;选 M5。碰到明显降价的 M4&#xff0c;选 M4。真正决定答案的不是跑分&#xff0c;而是两台机器在相同内存和硬盘配置下差多少钱。很多人比较时会直接拿“M4 丐版”和“M5 丐版”比价格…

作者头像 李华
网站建设 2026/8/6 1:38:24

电阻式电流检测精度提升:从误差分析到集成解决方案实战

1. 从“差不多就行”到“必须精确”&#xff1a;为什么电阻式电流检测的精度如此关键在硬件开发&#xff0c;特别是电源管理、电机驱动或者电池管理系统里&#xff0c;电流检测是个绕不开的基础活。很多工程师&#xff0c;尤其是刚入行的朋友&#xff0c;可能会觉得&#xff1a…

作者头像 李华