编译原理通关笔记:从哈工大课堂到及格线速通
1. 编译原理速通指南从哈工大课堂到及格线编译原理这门课在计算机专业里一直是个硬骨头尤其是哈工大的编译原理课程以内容深、实验多著称。作为一个过来人我完全理解大家面对这门课时的焦虑——复杂的理论推导、抽象的概念体系还有那让人头疼的八个大实验。但别担心这篇笔记就是来帮大家解决这个问题的。我把自己在哈工大课堂上学到的精华加上备考时总结的实战技巧全部浓缩在这份及格版笔记里。我们的目标很明确用最短的时间掌握最核心的考点顺利通过考试。2. 核心概念精讲2.1 编译过程全景图编译的本质就是一个翻译过程把高级语言比如C、Java转换成机器能懂的汇编或机器语言。这个过程可以类比人类翻译外文词法分析就像查字典把句子拆成单词并标注词性语法分析分析单词如何组成短语画出语法树语义分析检查句子是否通顺收集变量和函数信息中间代码把句子意思提炼成更抽象的表示代码优化对翻译进行润色让表达更高效目标代码最终翻译成品以C语言为例完整的编译系统包含四个关键组件预处理器处理#include和#define这些指令编译器核心部分把预处理后的代码转成汇编汇编器把汇编转成机器码还是逻辑地址链接器把多个目标文件合并成可执行程序2.2 文法与语言文法就像是编程语言的语法规则说明书。它用数学方式定义了终结符最基本的符号比如变量名、运算符非终结符语法成分比如表达式、语句产生式符号之间的转换规则开始符号最大的语法单位文法的分类从0型到3型限制越来越多。编程语言主要用2型文法上下文无关文法而词法分析多用3型文法正则文法。举个实际例子定义标识符的文法只需要4条规则S → L | LTT → L | D | LT | DTL → a|b|...|zD → 0|1|...|9这简单的几条规则就能描述所有可能的标识符展现了文法以有限定义无限的强大能力。3. 词法分析实战3.1 正则表达式到DFA词法分析的核心是把正则表达式转换成确定的有穷自动机(DFA)。这个转换分四步走RE→NFA按照优先级拆解正则式先处理括号内的内容然后是闭包(*)接着是连接(相邻)最后是或运算(|)NFA→DFA用子集法消除不确定性计算ϵ-closure消除空转移对每个状态集计算Ia得到新状态直到没有新状态产生DFA最小化用划分法合并等价状态先把状态分成终态和非终态检查每个子集是否可再分直到所有子集都不可分为止DFA实现用二维表或switch-case实现3.2 词法错误处理当DFA卡住时处理流程倒着检查已读入的字符找到最近能匹配终态的子串把这个子串作为一个token从下一个字符重新开始分析如果完全无法匹配进入恐慌模式持续丢弃字符直到能继续分析4. 语法分析精要4.1 自顶向下分析LL(1)文法是最常用的自顶向下分析方法关键是要计算三个集合FIRST集计算某非终结符能推出的首终结符如果X是终结符FIRST(X){X}对于产生式X→Y1Y2...Yn把FIRST(Y1)加入FIRST(X)如果Y1能推出ϵ继续加入FIRST(Y2)以此类推如果所有Yi都能推出ϵ加入ϵFOLLOW集计算某非终结符后可能出现的终结符把$加入开始符号的FOLLOW对于产生式A→αBβ把FIRST(β)-{ϵ}加入FOLLOW(B)如果β能推出ϵ把FOLLOW(A)加入FOLLOW(B)SELECT集计算决定使用哪个产生式对于A→α如果α不能推出ϵSELECTFIRST(α)否则SELECT(FIRST(α)-{ϵ})∪FOLLOW(A)4.2 自底向上分析LR分析是更强大的自底向上方法主要步骤构造LR(0)自动机从增广文法S→S开始计算项目集闭包根据转移符号生成新状态直到没有新状态产生构造分析表移入项对应ACTION表的s规约项对应ACTION表的r非终结符转移对应GOTO表冲突处理SLR用FOLLOW集解决冲突LR(1)加入展望符更精确判断LALR合并LR(1)的同心状态实际考试中SLR就够用了。重点掌握如何用FOLLOW集解决移进-规约冲突只有当下一个输入符号在规约产生式左部的FOLLOW集中时才选择规约。5. 语法制导翻译5.1 属性文法SDD语法制导定义分两类属性综合属性自底向上计算子节点决定父节点继承属性自顶向下传递依赖父节点或兄弟S-SDD只有综合属性计算简单建立依赖图按拓扑序计算属性通常在规约时完成计算5.2 翻译方案实现对于LR文法S-SDD的实现把语义动作放在产生式末尾在分析栈中开辟空间存储属性规约时执行对应的语义动作L-SDD适合LL文法实现方法继承属性动作放在对应符号前综合属性动作放在产生式末尾递归下降分析时按顺序执行动作考试中最常考的是中间代码生成特别是四元式。记住几个规律赋值操作结果在第四分量二元运算两个操作数在2、3分量数组访问下标作为目标数函数调用参数在2、3分量6. 备考策略与高频考点根据哈工大近年考题这些内容出现频率最高词法分析25%分值正则式到DFA的转换DFA最小化词法错误恢复策略语法分析35%分值FIRST/FOLLOW/SELECT计算LL(1)分析表构造SLR冲突解决LR(0)项目集计算语法制导翻译20%分值属性计算顺序S-SDD实现四元式生成综合应用题20%分值给一个小语言定义词法和语法设计属性文法生成中间代码备考建议先掌握算法步骤再理解原理多画状态转换图和语法树重点练习FIRST/FOLLOW计算熟悉常见的错误恢复策略考前做3-5套往年真题我在复习时发现很多同学卡在LR分析表的构造上。其实只要记住这个口诀移进看ACTION跳转看GOTO规约看FOLLOW就能解决大部分问题。考试时如果时间紧张至少要写出LR(0)的自动机SLR的分析表部分空着也没关系步骤分能拿大半。最后提醒哈工大的实验虽然多但考试还是以理论为主。把这份笔记里的核心概念和解题方法吃透及格绝对没问题。我当时考前三天开始看这份笔记最后拿了78分相信你们会考得更好

相关新闻

Spring Boot 4.0 对 AOT(提前编译)和 GraalVM 原生镜像的支持有哪些强制性变化或核心增强?如何针对原生镜像环境进行代码适配?

Spring Boot 4.0 对 AOT(提前编译)和 GraalVM 原生镜像的支持有哪些强制性变化或核心增强?如何针对原生镜像环境进行代码适配?

Spring Boot 4.0 对 AOT 和 GraalVM 原生镜像的支持增强与代码适配指南 随着微服务架构和云原生应用的流行,开发人员对应用程序的启动速度和资源使用效率的需求越来越高。在这种背景下,Spring Boot 4.0 引入了对 AOT(提前编译)和 …

2026/6/18 4:55:58阅读更多 →
基于 Raspberry Pi Pico 2 C/C++ SDK 的 SGP30 空气质量监测器

基于 Raspberry Pi Pico 2 C/C++ SDK 的 SGP30 空气质量监测器

采用设备 主控:Raspberry Pi Pico 2 (RP2350) 传感器:SGP30(I2C 地址 0x58),检测 eCO₂ 和 TVOC 显示屏:SSD1306 12864 I2C OLED(地址 0x3C) 接线方式: Pico 2 引脚连接…

2026/6/18 4:55:58阅读更多 →
Redpill Recovery (RR) 终极实战指南:从零构建企业级NAS系统的完整解决方案

Redpill Recovery (RR) 终极实战指南:从零构建企业级NAS系统的完整解决方案

Redpill Recovery (RR) 终极实战指南:从零构建企业级NAS系统的完整解决方案 【免费下载链接】rr Redpill Recovery (arpl-i18n) 项目地址: https://gitcode.com/gh_mirrors/rr2/rr 还在为搭建稳定可靠的黑群晖系统而烦恼?面对复杂的硬件兼容性问题…

2026/6/18 4:55:58阅读更多 →
工业AI视觉规模化落地:从托盘扫描到流式感知的实战架构

工业AI视觉规模化落地:从托盘扫描到流式感知的实战架构

1. 项目概述:这不是一句新闻稿,而是一组被压缩的工业现场密码“Gather AI Is Scaling Rapidly: 8x Pallets Scanned in Q1 2022 Than All of 2021”——这句话乍看像某家AI公司发在LinkedIn上的季度战报,但如果你在物流中心干过三年以上&…

2026/6/18 6:16:03阅读更多 →
树莓派上用TensorFlow Lite Model Maker做农田目标检测

树莓派上用TensorFlow Lite Model Maker做农田目标检测

1. 项目概述:为什么一个种菜人需要在树莓派上跑目标检测?你有没有过这种体验:蹲在自家小菜园里,盯着一垄刚冒头的西兰花幼苗,手悬在半空,迟迟不敢下手拔草——因为那几株“疑似杂草”的嫩芽,和西…

2026/6/18 6:16:03阅读更多 →
性能测试入门:从核心概念到实战流程的完整指南

性能测试入门:从核心概念到实战流程的完整指南

1. 性能测试入门:从“为什么”开始刚入行那会儿,一听到“性能测试”四个字,脑子里蹦出来的就是“用JMeter跑个脚本,看看TPS和响应时间”。干了十几年,踩过无数坑,也带过不少新人,我发现很多朋友…

2026/6/18 6:16:03阅读更多 →
AI工程化实战:从数据清洗到YOLO部署的工业级落地指南

AI工程化实战:从数据清洗到YOLO部署的工业级落地指南

1. 这不是科幻片里的“超级大脑”,而是一套可拆解、可训练、可落地的工程化工具链“Artificial Intelligence”——这个词被印在无数封面、PPT首页和融资BP里,听起来像一个宏大的终点。但在我过去十二年亲手部署过27个AI生产系统、从智能客服后台调优到工…

2026/6/18 6:16:03阅读更多 →
智能代码卫士:AST实时检测未覆盖分支

智能代码卫士:AST实时检测未覆盖分支

发散创新:打造「语义感知型」VSCode插件——基于AST实时高亮未覆盖分支 在日常开发中,你是否曾因 if/else 分支遗漏测试而线上翻车?是否在重构时反复确认 switch 的 default 是否被显式处理?传统 LSP 仅提供语法/类型检查&#xf…

2026/6/18 6:16:03阅读更多 →
2026 年靠谱的程序员接活渠道有哪些值得选择

2026 年靠谱的程序员接活渠道有哪些值得选择

当下互联网行业灵活用工模式愈发普及,不少程序员会利用业余时间承接开发类项目,增加收入的同时积累实战经验。2026 年各类程序员接活渠道不断更新迭代,平台服务、资金保障、项目资源都出现了明显分化,如何从众多渠道里选出靠谱的选…

2026/6/18 6:11:03阅读更多 →
ZigBee HA智能家居开发实战:从集群模型到NXP JN516x代码实现

ZigBee HA智能家居开发实战:从集群模型到NXP JN516x代码实现

1. ZigBee HA:智能家居的“通用语言”与开发基石如果你正在或计划踏入智能家居设备开发领域,尤其是基于ZigBee协议,那么“ZigBee Home Automation”这个名词你一定不陌生。它不仅仅是ZigBee联盟定义的一套应用层规范,更是确保不同…

2026/6/18 0:00:24阅读更多 →
Java毕设选题推荐:基于 Spring Boot 的个人随笔博客运维管理系统的设计与实现 基于 Spring Boot 的用户原创博客分享社区【附源码、mysql、文档、调试+代码讲解+全bao等】

Java毕设选题推荐:基于 Spring Boot 的个人随笔博客运维管理系统的设计与实现 基于 Spring Boot 的用户原创博客分享社区【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/18 0:00:24阅读更多 →
JN517x嵌入式开发实战:看门狗、脉冲计数器与I2C接口的深度解析与避坑指南

JN517x嵌入式开发实战:看门狗、脉冲计数器与I2C接口的深度解析与避坑指南

1. 项目概述在嵌入式开发领域,尤其是基于NXP JN517x这类无线微控制器的项目中,系统稳定性和与外设的可靠交互是两大核心挑战。前者关乎产品能否在无人值守的复杂环境中长期运行,后者则决定了设备能否准确感知世界并与其他芯片“对话”。JN517…

2026/6/18 0:00:24阅读更多 →