<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>编译原理与实践专题：从词法分析到 JIT 编译器 on PlumePHP</title><link>https://plumephp.com/posts/compiler/</link><description>Recent content in 编译原理与实践专题：从词法分析到 JIT 编译器 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 08 Oct 2026 01:15:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/posts/compiler/index.xml" rel="self" type="application/rss+xml"/><item><title>浮点语义与快速数学优化</title><link>https://plumephp.com/compiler-float-semantics-fast-math/</link><pubDate>Thu, 08 Oct 2026 01:15:00 +0800</pubDate><guid>https://plumephp.com/compiler-float-semantics-fast-math/</guid><description>讲解浮点语义如何约束编译器优化：IEEE 754 的舍入、NaN 与符号零规则，为什么结合律与分配律在浮点上不成立，-ffast-math 的各子开关分别放宽了什么，以及如何在数值稳定性与性能之间做出工程取舍，附可运行的 C 代码与测试策略。</description></item><item><title>查询式编译器与增量类型检查：Salsa 架构</title><link>https://plumephp.com/compiler-query-based-incremental/</link><pubDate>Thu, 08 Oct 2026 01:14:00 +0800</pubDate><guid>https://plumephp.com/compiler-query-based-incremental/</guid><description>讲解查询式编译器架构：把编译过程建模成带记忆化的查询图，用 Salsa 的键值模型与修订号（revision）追踪依赖，实现细粒度的增量类型检查，并给出 rust-analyzer 的依赖追踪、循环不动点、缓存淘汰与工程实践陷阱，附伪代码与工具命令。</description></item><item><title>Sanitizer 与编译期安全加固：ASan、TSan 与 CFI</title><link>https://plumephp.com/compiler-sanitizers-security-hardening/</link><pubDate>Thu, 08 Oct 2026 01:13:00 +0800</pubDate><guid>https://plumephp.com/compiler-sanitizers-security-hardening/</guid><description>讲解编译期插桩实现的内存与并发检查：ASan 的影子内存与红区布局、TSan 的 happens-before 追踪、MSan/UBSan 的检测原理，以及 CFI、SafeStack、FORTIFY 等编译期安全加固手段与 CI 集成实践。</description></item><item><title>目标文件格式：ELF、Mach-O 与 COFF</title><link>https://plumephp.com/compiler-object-file-formats/</link><pubDate>Thu, 08 Oct 2026 01:12:00 +0800</pubDate><guid>https://plumephp.com/compiler-object-file-formats/</guid><description>对比三大目标文件格式：ELF 的节表与程序头表、Mach-O 的加载命令与两段式布局、COFF/PE 的节表与重定位，讲清符号表、重定位记录、链接视图与执行视图的差别，并给出 readelf、otool、dumpbin 等实操命令与常见链接错误排查。</description></item><item><title>编译期求值与 constexpr/comptime</title><link>https://plumephp.com/compiler-const-eval-comptime/</link><pubDate>Thu, 08 Oct 2026 01:11:00 +0800</pubDate><guid>https://plumephp.com/compiler-const-eval-comptime/</guid><description>系统讲解编译期求值：C++ constexpr 与 consteval、Rust const fn、Zig comptime 三者的语义差异，编译器如何在语义分析阶段内置一个带资源预算的受限解释器，以及步数限制、常量折叠、诊断质量与工程实践中的取舍与陷阱。</description></item><item><title>指令选择与指令调度</title><link>https://plumephp.com/compiler-instruction-selection-scheduling/</link><pubDate>Thu, 08 Oct 2026 01:10:00 +0800</pubDate><guid>https://plumephp.com/compiler-instruction-selection-scheduling/</guid><description>讲解编译器后端的两站路：指令选择如何用树覆盖与 DAG 覆盖把 IR 映射成目标机器指令，指令调度如何用列表调度、关键路径与寄存器压力模型重排指令顺序，并给出 BURS、SelectionDAG 与模调度的工程取舍，附可运行的伪代码与调试命令。</description></item><item><title>调试信息与源码映射</title><link>https://plumephp.com/compiler-debug-info/</link><pubDate>Wed, 07 Oct 2026 13:55:00 +0800</pubDate><guid>https://plumephp.com/compiler-debug-info/</guid><description>调试信息把机器码映射回源码。本文讲解 DWARF 的 DIE 树与节区组织、行号状态机与行号表生成，分析优化导致的变量位置变化与 location list、内联调用点信息，再落到 JavaScript Source Map 的 VLQ 编码、分离调试信息与调试体验优化。</description></item><item><title>ABI 与调用约定</title><link>https://plumephp.com/compiler-abi-calling-conventions/</link><pubDate>Wed, 07 Oct 2026 13:53:00 +0800</pubDate><guid>https://plumephp.com/compiler-abi-calling-conventions/</guid><description>ABI 是编译器与操作系统之间的契约。本文讲解 System V AMD64 的寄存器与栈传递规则、参数分类算法与结构体拆分、返回值与变参约定，对比 Windows x64 与 ARM64 的差异，并给出跨语言 FFI、栈对齐、名字修饰与常见踩坑的排查手段。</description></item><item><title>协程与 async 降级</title><link>https://plumephp.com/compiler-coroutine-lowering/</link><pubDate>Wed, 07 Oct 2026 13:51:00 +0800</pubDate><guid>https://plumephp.com/compiler-coroutine-lowering/</guid><description>协程编译器把可挂起的函数改写成状态机。本文对比有栈与无栈协程的实现路径，推导状态机变换与帧布局，讲解挂起点分析、跨挂点变量提升与帧内存复用，再落到帧分配策略、与垃圾回收及栈复制的交互，以及 C++20、Rust、Go 的工程实践、取消语义与常见坑。</description></item><item><title>链接时优化：LTO 与 ThinLTO</title><link>https://plumephp.com/compiler-lto-thinlto/</link><pubDate>Wed, 07 Oct 2026 13:49:00 +0800</pubDate><guid>https://plumephp.com/compiler-lto-thinlto/</guid><description>分离编译切断了跨模块优化的可能。本文对比全程序 LTO 与 ThinLTO 的架构取舍，讲解摘要索引、按需导入与跨模块内联的决策机制，分析增量构建、缓存与可复现性，并给出 GCC、Clang、Rust 的配置实践与构建时间、产物大小的实测权衡。</description></item><item><title>逃逸分析与栈上分配</title><link>https://plumephp.com/compiler-escape-analysis/</link><pubDate>Wed, 07 Oct 2026 13:47:00 +0800</pubDate><guid>https://plumephp.com/compiler-escape-analysis/</guid><description>逃逸分析决定一个对象能否留在栈上、锁能否被消除。本文从逃逸状态的格与传播规则讲起，用连接图刻画方法内的指向关系，讲解过程间摘要与参数、返回值逃逸的推断，再落到标量替换、栈上分配与锁消除的实现细节，最后讨论精度与编译时间之间的权衡取舍与常见排错手段。</description></item><item><title>SSA 构造与销毁</title><link>https://plumephp.com/compiler-ssa-construction/</link><pubDate>Wed, 07 Oct 2026 13:45:00 +0800</pubDate><guid>https://plumephp.com/compiler-ssa-construction/</guid><description>SSA 是现代优化器的通用表示。本文从支配树与支配边界推导最小 SSA 的 φ 函数插入算法，讲解变量重命名与版本管理，再落到剪枝 SSA、Braun 算法与 out-of-SSA 的并行复制、交换与丢拷贝问题，附可运行的 Python 实现与工程取舍。</description></item><item><title>MLIR 与多层次 IR</title><link>https://plumephp.com/compiler-mlir-multilevel-ir/</link><pubDate>Fri, 02 Oct 2026 15:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-mlir-multilevel-ir/</guid><description>MLIR 用方言把「一种 IR 走到底」拆成多层次的渐进降级。本文讲解方言与操作的组织方式、渐进式降级的时机与收益、pass pipeline 的调度，以及最终如何衔接 LLVM 后端。</description></item><item><title>可复现构建与确定性输出</title><link>https://plumephp.com/compiler-reproducible-builds/</link><pubDate>Fri, 02 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-reproducible-builds/</guid><description>同样的源码为什么两次构建出的二进制不同？答案藏在时间戳、绝对路径、哈希表遍历顺序与并行调度里。本文讲解可复现构建的判定标准、不确定性来源、路径与时间消除、构建缓存与增量正确性。</description></item><item><title>约束求解与类型类</title><link>https://plumephp.com/compiler-constraint-solving-typeclasses/</link><pubDate>Fri, 02 Oct 2026 13:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-constraint-solving-typeclasses/</guid><description>类型推断的本质是解一组约束方程，而类型类与 trait 把这组方程从等式扩展成带实例解析的谓词集合。本文讲解 Hindley-Milner 的扩展、约束生成与合一、trait 解析与关联类型，以及约束错误如何被翻译成人能看懂的信息。</description></item><item><title>异常处理编译与栈展开</title><link>https://plumephp.com/compiler-exception-handling-unwinding/</link><pubDate>Fri, 02 Oct 2026 12:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-exception-handling-unwinding/</guid><description>零成本异常把开销从执行路径转移到元数据：正常路径不付代价，抛出时才查表展开。本文讲解表驱动栈展开、两阶段展开、landing pad 与清理代码的生成，以及异常与析构、GC 的交互。</description></item><item><title>循环优化与依赖分析</title><link>https://plumephp.com/compiler-loop-optimization-dependence/</link><pubDate>Fri, 02 Oct 2026 11:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-loop-optimization-dependence/</guid><description>程序里绝大部分时间花在循环上，因此循环是优化器的主战场。本文讲解循环变换的分类与合法性、依赖距离向量与方向向量、依赖测试与多面体模型，以及向量化真正需要的前置条件。</description></item><item><title>WebAssembly 后端与编译</title><link>https://plumephp.com/compiler-wasm-backend-webassembly/</link><pubDate>Fri, 02 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-wasm-backend-webassembly/</guid><description>WebAssembly 既是编译目标也是执行环境，它用栈机模型换取可验证性与跨平台一致性。本文讲解 WAT 与二进制格式、栈机执行模型、线性内存与函数表、wasm 专用优化，以及 JIT 与 AOT 两条执行路线的取舍。</description></item><item><title>「异构计算与 GPU 卸载编译」</title><link>https://plumephp.com/compiler-gpu-offload-heterogeneous/</link><pubDate>Thu, 01 Oct 2026 21:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-gpu-offload-heterogeneous/</guid><description>当目标机器从单个 CPU 核变成 CPU 加加速器的组合，编译器要同时处理两套执行模型与两层内存。本文讲解 offload 指令与编程模型、并行循环到线程层级的映射、显式与统一内存的数据搬运、主机设备异步协同，以及卸载编译器的实现要点。</description></item><item><title>「内联缓存与动态语言优化」</title><link>https://plumephp.com/compiler-inline-caching-dynamic-languages/</link><pubDate>Thu, 01 Oct 2026 20:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-inline-caching-dynamic-languages/</guid><description>动态语言没有静态类型信息，属性访问与运算都要在运行时查表。本文讲解隐藏类如何给对象建立形状、内联缓存如何把查表变成类型守卫、去优化如何安全地回退投机优化，以及逃逸分析如何与之联动消除对象分配。</description></item><item><title>「解析器生成器与 DSL 前端」</title><link>https://plumephp.com/compiler-parser-generators-dsl/</link><pubDate>Thu, 01 Oct 2026 19:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-parser-generators-dsl/</guid><description>手写递归下降解析器可控但费时，解析器生成器把语法规则编译成分析表或解析函数。本文讲解 LL 与 LR 的生成算法、PEG 与解析器组合子的取舍、错误恢复与诊断设计，以及语法高亮与编辑器集成的工程要点。</description></item><item><title>「抽象解释与形式化验证」</title><link>https://plumephp.com/compiler-abstract-interpretation-verification/</link><pubDate>Thu, 01 Oct 2026 18:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-abstract-interpretation-verification/</guid><description>测试只能证明程序在有限输入上正确，抽象解释用格上的不动点计算覆盖所有可能输入。本文讲解抽象域与伽罗瓦连接、区间域与多面体域、加宽与收窄、SMT 求解与符号执行，以及静态分析器如何给出可证明的结论。</description></item><item><title>「窥孔优化与超优化」</title><link>https://plumephp.com/compiler-peephole-superoptimization/</link><pubDate>Thu, 01 Oct 2026 17:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-peephole-superoptimization/</guid><description>窥孔优化用局部改写规则清理指令序列里的冗余，超优化则把改写规则的发现交给搜索。本文讲解滑动窗口匹配、代价模型、超级优化器的枚举与 E-graph 搜索，以及等价性验证如何保证改写不改变语义。</description></item><item><title>「配置文件引导优化 PGO 与 BOLT」</title><link>https://plumephp.com/compiler-profile-guided-optimization/</link><pubDate>Thu, 01 Oct 2026 16:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-profile-guided-optimization/</guid><description>编译器在看不到运行数据时只能靠启发式猜测热点，PGO 用真实执行画像把猜测换成证据。本文讲解采样与插桩两种画像收集方式、热点识别与权重传播、基于画像的内联与代码布局决策，以及 BOLT 这类二进制后链接优化器如何在无源码条件下重排函数。</description></item><item><title>「交叉编译与多目标后端」</title><link>https://plumephp.com/compiler-cross-compilation-targets/</link><pubDate>Thu, 01 Oct 2026 15:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-cross-compilation-targets/</guid><description>同一份源码要跑在 x86-64、ARM64、RISC-V 与各种操作系统上，编译器必须把目标差异抽象成可描述的数据。本文讲解目标三元组、ABI 与调用约定差异、sysroot 与工具链构建、多后端代码生成与目标描述、浮点与字节序，以及构建与测试策略。</description></item><item><title>「编译器正确性与验证」</title><link>https://plumephp.com/compiler-correctness-testing-verification/</link><pubDate>Thu, 01 Oct 2026 15:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-correctness-testing-verification/</guid><description>编译器也会出错，且错误代价极高。讲解编译器正确性保障体系：随机模糊测试与程序生成、差分测试、回归与黄金测试、形式化验证（CompCert 与 Coq），以及健全性与未定义行为的边界。</description></item><item><title>「错误恢复与诊断」</title><link>https://plumephp.com/compiler-error-recovery-diagnostics/</link><pubDate>Thu, 01 Oct 2026 15:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-error-recovery-diagnostics/</guid><description>系统讲解编译器的错误恢复与诊断设计：panic 模式与同步恢复策略、诊断信息的结构与呈现、lint 与静态分析、编译器驱动与增量编译，以及错误码、修复建议与语言服务的集成，附带可运行的 Python 实现。</description></item><item><title>「宏系统与元编程」</title><link>https://plumephp.com/compiler-macros-metaprogramming/</link><pubDate>Thu, 01 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-macros-metaprogramming/</guid><description>深入宏系统与元编程：宏展开机制、卫生宏与捕获避免、编译期计算与常量求值、过程宏与属性宏，以及基于宏构建 DSL 与代码生成的方法与边界。</description></item><item><title>「语言服务器与 IDE 工具链」</title><link>https://plumephp.com/compiler-language-server-tooling/</link><pubDate>Thu, 01 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-language-server-tooling/</guid><description>编辑器不该为每种语言写一套补全逻辑，LSP 用一套 JSON-RPC 协议把语言智能交给独立的语言服务器。本文讲解能力协商与消息模型、增量解析与文档同步、符号索引、跳转定义与补全重命名、诊断与格式化，以及性能与缓存策略。</description></item><item><title>「运行时与内存管理」</title><link>https://plumephp.com/compiler-runtime-memory-management/</link><pubDate>Thu, 01 Oct 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-runtime-memory-management/</guid><description>系统讲解语言运行时的内存管理：栈帧布局与调用约定、堆分配与逃逸分析、标记清除与分代 GC、写屏障与回收根、引用计数与所有权模型，以及内存安全边界的工程权衡，附带可运行的 Python 示例与伪代码。</description></item><item><title>「垃圾回收算法」</title><link>https://plumephp.com/compiler-garbage-collection-algorithms/</link><pubDate>Thu, 01 Oct 2026 13:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-garbage-collection-algorithms/</guid><description>托管运行时把内存管理交给垃圾回收器，代价是必须理解可达性、根集与暂停。本文讲解标记清除、复制、标记整理三大基础算法，分代假设与晋升策略，三色标记与写屏障，并发与增量 GC 的取舍，以及 STW 暂停的度量与调优手段。</description></item><item><title>「并行与增量编译」</title><link>https://plumephp.com/compiler-incremental-parallel-compilation/</link><pubDate>Thu, 01 Oct 2026 13:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-incremental-parallel-compilation/</guid><description>讲解现代构建系统与编译器如何通过并行与增量策略加速开发反馈：模块依赖图与拓扑排序、并行任务调度、指纹缓存与失效传播、分析结果的 memoization，以及构建产物跨进程复用。</description></item><item><title>「现代优化 Pass 管线」</title><link>https://plumephp.com/compiler-modern-optimization-passes/</link><pubDate>Thu, 01 Oct 2026 13:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-modern-optimization-passes/</guid><description>系统讲解现代编译器的优化 Pass 管线：函数内联、循环展开与变换、向量化、SSA 上的常量传播、Profile-Guided 优化，以及 Pass 调度与收敛的工程细节，附带 Python 与伪代码示例，帮助理解 -O2 背后发生了什么。</description></item><item><title>「向量化与 SIMD」</title><link>https://plumephp.com/compiler-vectorization-simd/</link><pubDate>Thu, 01 Oct 2026 12:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-vectorization-simd/</guid><description>现代 CPU 的向量单元能一次处理 4 到 16 个数据，编译器能否利用它们取决于依赖分析。本文讲解向量化的合法性判定、循环向量化与 SLP 向量化、掩码与归约处理、intrinsics 内建函数，以及真实场景中阻碍向量化的因素与实测收益。</description></item><item><title>「类型系统与类型推断」</title><link>https://plumephp.com/compiler-type-inference-checking/</link><pubDate>Thu, 01 Oct 2026 12:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-type-inference-checking/</guid><description>深入类型系统与类型推断的实现：静态类型判定规则、Hindley-Milner 推断与合一算法、泛型与约束求解、联合类型与子类型关系，以及类型检查器如何融入符号表并在编译期拦截错误，附带可运行的 Python 实现。</description></item><item><title>「编译器架构与多遍设计」</title><link>https://plumephp.com/compiler-architecture-multi-pass/</link><pubDate>Thu, 01 Oct 2026 12:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-architecture-multi-pass/</guid><description>从整体架构出发，讲解编译器前端/中端/后端的职责分层、多种中间表示（IR）的选择与切换、Pass 管线的组织与调度、调试信息生成，以及可插拔的优化框架设计。</description></item><item><title>「JIT 编译进阶与热点优化」</title><link>https://plumephp.com/compiler-jit-optimization-hotspot/</link><pubDate>Thu, 01 Oct 2026 11:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-jit-optimization-hotspot/</guid><description>深入 JIT 编译器的自适应优化机制：热点探测与计数器、分层编译、栈上替换（OSR）、去优化与激进优化、安全点与编译屏障，以及 LLVM/Cranelift 支撑的跨平台 JIT 后端。</description></item><item><title>「LLVM 与 LLVM IR 后端」</title><link>https://plumephp.com/compiler-llvm-ir-backend/</link><pubDate>Thu, 01 Oct 2026 11:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-llvm-ir-backend/</guid><description>系统讲解以 LLVM 为核心的后端路线：LLVM IR 的 SSA 形式与 phi 节点、IRBuilder 的增量生成、优化 Pass 管线、SelectionDAG 目标代码生成，以及语言前端 IR 到 LLVM IR 的桥接与降级，附带 Python 与 C++ 示例。</description></item><item><title>「数据流分析框架」</title><link>https://plumephp.com/compiler-dataflow-analysis/</link><pubDate>Thu, 01 Oct 2026 11:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-dataflow-analysis/</guid><description>数据流分析是优化器的公共底座。本文从格与偏序出发，讲解不动点迭代的理论基础，再用到达定值、活跃变量、可用表达式与常量传播四个经典问题贯穿始终，最后落到支配树、SSA 稀疏分析与 worklist 算法的工程实现。</description></item><item><title>「寄存器分配与图着色」</title><link>https://plumephp.com/compiler-register-allocation/</link><pubDate>Thu, 01 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-register-allocation/</guid><description>从活跃性分析出发，讲解寄存器分配的核心算法：冲突图构建、图着色与溢出处理、线性扫描分配，并延伸到 SSA 解构、伪寄存器到物理寄存器的映射，以及 LLVM 与 HotSpot 中的工程取舍，附带可运行的 Python 实现。</description></item><item><title>「手写 AST 解释器与求值语义」</title><link>https://plumephp.com/compiler-ast-evaluation-interpreter/</link><pubDate>Thu, 01 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-ast-evaluation-interpreter/</guid><description>从树遍历求值出发，讲解手写 AST 解释器的完整实现：环境与词法作用域、闭包与递归、引用与值的语义、求值顺序与短路求值、控制流的树形编码，并对比字节码解释器的取舍，附带可运行的 Python 求值器示例。</description></item><item><title>「链接、加载与运行时启动」</title><link>https://plumephp.com/compiler-linker-loader-runtime/</link><pubDate>Thu, 01 Oct 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-linker-loader-runtime/</guid><description>编译器生成的目标文件只是半成品，链接器把符号与重定位串成可执行映像，加载器再把它送进内存并跳到 _start。本文讲解符号解析与重定位、静态与动态链接、GOT/PLT 与延迟绑定、动态库加载、程序启动流程与链接脚本布局。</description></item><item><title>「解释器与 JIT 编译」</title><link>https://plumephp.com/compiler-interpreter-jit/</link><pubDate>Wed, 30 Sep 2026 15:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-interpreter-jit/</guid><description>从 AST 解释器到字节码虚拟机再到 JIT 编译，讲解树遍历解释、内联缓存、热点探测、分层编译与代码缓存的实现原理，对比各执行模型取舍并给出伪代码示例。</description></item><item><title>「目标代码生成」</title><link>https://plumephp.com/compiler-code-generation/</link><pubDate>Wed, 30 Sep 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-code-generation/</guid><description>深入目标代码生成的关键环节，覆盖指令选择、寄存器分配、栈帧布局与调用约定、指令调度及窥孔优化，讲解图着色分配、活跃变量分析与复杂指令选择，附带伪代码与汇编示例。</description></item><item><title>「中间代码优化」</title><link>https://plumephp.com/compiler-intermediate-optimization/</link><pubDate>Wed, 30 Sep 2026 13:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-intermediate-optimization/</guid><description>系统讲解中间表示上的经典优化技术，覆盖常量折叠与传播、死代码消除、公共子表达式消除、循环不变量外提与强度削减、数据流分析框架以及 SSA 形式下的优化实现，附带伪代码与变换示例。</description></item><item><title>「语义分析与中间表示」</title><link>https://plumephp.com/compiler-semantic-ir/</link><pubDate>Wed, 30 Sep 2026 12:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-semantic-ir/</guid><description>讲解语义分析如何用符号表与类型系统赋予语法树意义，并介绍中间表示的设计取舍，涵盖作用域链、类型检查与推断、三地址码、控制流图与 SSA 形式，附带 Python 与 C 伪代码示例。</description></item><item><title>「语法分析与 AST 构建」</title><link>https://plumephp.com/compiler-syntax-parsing/</link><pubDate>Wed, 30 Sep 2026 11:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-syntax-parsing/</guid><description>深入语法分析的两大路线：递归下降与 LR 自动机，讲解上下文无关文法、FIRST/FOLLOW 集合、LL 与 LR 冲突消解、Pratt 运算符优先级解析以及抽象语法树的构建与错误恢复，附带可运行的 Python 示例。</description></item><item><title>「词法分析器实现」</title><link>https://plumephp.com/compiler-lexical-analysis/</link><pubDate>Wed, 30 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/compiler-lexical-analysis/</guid><description>从正则表达式到有限自动机，系统讲解词法分析器的手写与自动生成，覆盖 Thompson 构造、子集构造、DFA 状态表、最长匹配规则、跳过分隔符与错误恢复，并给出可运行的 Python 实现与避坑经验。</description></item></channel></rss>