编译原理期末卷高分攻略:正规式、LL(1)与四元式核心考点拆解
简介这份常州工学院编译原理试卷Adoc格式压缩包约55KB共1个文件面向高校计算机专业学生及备考编译原理课程的读者用于检验和巩固课程核心知识点。试卷内容覆盖正规表达式与有限自动机、逆波兰表示、文法二义性证明、LL(1)文法与预测分析表构造以及if-then-else语句的四元式翻译等典型题型并配有具体题目与分值分布便于自测与查漏补缺。资源以单一doc文档呈现结构清晰可直接打印或在线练习。目前已有391人学习下载适合需要系统复习编译原理、熟悉考试题型与解题思路的学生使用也可作为教师命题参考。1. 从一张期末卷看编译原理到底考什么正规式、LL(1) 与四元式才是拿分主力编译原理这门课很多人复习到后期会有一种“玄学”感平时作业会做一到卷面就翻车。翻车点往往不在概念背没背而在形式化推导的步骤是否写全、是否踩中判分点。这份试卷库把考点摊得很直白正规表达式与最简 DFA、逆波兰与四元式、文法二义性、First/Follow 集与预测分析表、条件语句翻译。整张卷子 100 分里光正规式加 DFA 就占 30 分LL(1) 相关占 25 分四元式序列占 25 分——也就是说这三块拿稳及格线基本就踩住了。它适合正在刷期末真题、准备课程补考或者想用一套卷子把词法、语法、语义、代码生成串起来的人。下面按考点模块拆开讲每块都配真题答法和易错点。2. 正规表达式与最简 DFA30 分的大题怎么一步步拿满2.1 真题拆解不以 0 开头但以 11 结尾的串题目要求在字母表 {0,1} 上写出所有不以 0 开头、但以 11 结尾的字符串的正规表达式并构造等价的最简 DFA。这类题通常分两步给分正规式写对拿一部分DFA 状态最简再拿一部分。先分析语言结构。不以 0 开头意味着首字符只能是 1以 11 结尾意味着最后两位固定是 11。中间部分可以是任意 0/1 串。所以正规式可以写成1 (0|1)* 1 1注意这里不能写成1(0|1)*11就完事还要检查是否覆盖了“长度恰好为 2 的串 11”。当(0|1)*取空串时1 11得到111而11本身呢11首字符是 1末两位是 11但它只有两位中间部分为空正规式1(0|1)*11展开后最短是111漏掉了11。所以更严谨的写法是11 | 1(0|1)*11或者等价地写成1(1|0(0|1)*1)?1这类形式。判卷时只要语言描述正确、能覆盖11和111等边界串通常都给分。构造 DFA 时建议按“首字符校验 → 中间任意 → 末尾匹配 11”三段式设计状态q0初态读入 1 转到 q1读入 0 则进入死状态因为不能以 0 开头。q1已经合法开头读 0 或 1 都留在 q1中间任意但一旦读到连续的 1 要记录进度。q2刚读到一个 1可能是结尾 11 的第一位。q3已经读到 11接受态。死状态任何非法输入进入后不再离开。最简化的关键是把“中间任意”和“末尾匹配”合并考虑。常见做法是设四个有效状态加一个死状态然后用划分法或填表法合并等价状态。很多同学在这里丢分是因为死状态没画或者接受态和中间态混在一起导致 DFA 接受非法串。2.2 真题拆解包含 01 子串的所有串第二小题 12 分要求写出包含01子串的所有二进制串的正规表达式。这个相对直接(0|1)* 01 (0|1)*构造 DFA 时状态可以设计为q0还没遇到 0读 0 转到 q1读 1 留在 q0。q1已经遇到 0 但还没遇到 01读 0 留在 q1读 1 转到 q2。q2已经包含 01接受态读 0 或 1 都留在 q2。这个 DFA 只有三个状态已经是最简。判分点在于q2 必须是接受态且自环表示一旦包含 01后面任意字符都不影响接受性。2.3 易错点正规式写对但 DFA 画错这类题最常见的失分不是不会而是细节翻车漏掉空串或最短串。比如第一题漏掉11第二题漏掉01本身。DFA 没有死状态。不以 0 开头的语言读入 0 必须进入死状态否则会接受非法串。最简 DFA 没有真正化简。有些同学画了五六个状态就交卷其实可以合并到三四个。接受态标记错误。包含 01 的串一旦进入接受态就应永远接受不能因为后续字符跳出。提示DFA 最简化的判分很看过程建议在卷面上写出“初始 DFA → 划分等价类 → 最简 DFA”三步即使最后状态图有小错过程分也能拿到。3. 逆波兰、四元式与二义性中间代码和文法分析的得分套路3.1 逆波兰表示与四元式序列题目要求写出AB*(C-D)E/(C-D)的逆波兰表示及四元式序列。逆波兰表示就是后缀表达式按运算符优先级和括号展开A B C D - * E C D - / 四元式序列则要把每一步运算拆成(op, arg1, arg2, result)的形式。注意C-D出现了两次可以复用同一个临时变量( -, C, D, T1 ) ( *, B, T1, T2 ) ( , A, T2, T3 ) ( /, E, T1, T4 ) ( , T3, T4, T5 )这里 T5 就是最终结果。判分点在于临时变量命名一致、运算顺序正确、重复子表达式是否复用。有些同学把C-D算两次虽然结果对但四元式数量多了可能被扣优化分。3.2 文法二义性证明与语言描述题目给出文法 GN → SE | E S → SD | D E → 0 | 2 | 4 | 6 | 8 | 10 D → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9要求证明二义性并描述语言。二义性证明的标准做法是找到同一个句子有两棵不同的语法树。比如句子00可以走N → SE → DE → 0E → 00也可以走N → SE → SD → DD → 00。两条推导路径不同说明文法二义。语言描述则要观察文法生成什么E 是偶数0,2,4,6,8,10D 是数字 0-9S 由 D 或 SD 组成N 由 SE 或 E 组成。整体看这个文法生成的是以偶数结尾的数字串也就是所有末位为偶数的十进制数。注意10作为 E 出现说明语言里包含以 10 结尾的串但本质上还是偶数结尾。3.3 易错点二义性证明只写一句话很多同学证明二义性时只写“因为有两棵语法树”但不画出两棵树或写出两条推导这是拿不到分的。正确做法是先选一个具体句子比如00或02。写出两条不同的最左推导或画出两棵语法树。明确指出“同一句子有两种不同推导故文法二义”。语言描述也要用自然语言说清不能只写“偶数结尾”最好补一句“所有末位为 0、2、4、6、8 或 10 的十进制数字串”。4. LL(1) 文法与预测分析表25 分的硬骨头怎么啃4.1 First 集和 Follow 集的计算题目给出文法E → TE E → E | ε T → FT T → T | ε F → PF F → *F | ε P → (E) | ^ | a | b计算 First 集时从终结符开始往上推First(E) First(T) First(F) First(P) { (, ^, a, b }First(E) { , ε }First(T) First(T) ∪ { ε } { (, ^, a, b, ε }First(F) { *, ε }Follow 集要从开始符号 E 出发Follow(E) { $, ) }因为 E 后面可能跟)或结束符。Follow(E) Follow(E) { $, ) }。Follow(T) First(E) \ {ε} ∪ Follow(E) { , $, ) }。Follow(T) Follow(T) { , $, ) }。Follow(F) First(T) \ {ε} ∪ Follow(T) { (, ^, a, b, , $, ) }。Follow(F) Follow(F)。Follow(P) First(F) \ {ε} ∪ Follow(F) { *, (, ^, a, b, , $, ) }。4.2 证明 LL(1) 与构造预测分析表证明 LL(1) 的关键是对每个非终结符其各产生式的 First 集互不相交若某产生式可推出 ε则 First 集与 Follow 集不相交。检查一遍E 只有一个产生式无冲突。E 的两个产生式 First 分别是 {} 和 {ε}且 Follow(E) {$,)} 与 {} 不相交。T 只有一个产生式。T 的 First 是 {(,^,a,b} 和 {ε}Follow(T) {,$,)} 与前者不相交。F 只有一个产生式。F 的 First 是 {} 和 {ε}Follow(F) 与 {} 不相交。P 的四个产生式 First 分别是 {(}、{^}、{a}、{b}互不相交。所以该文法是 LL(1) 文法。预测分析表按行是非终结符列是输入符号。每个单元格填入产生式编号。比如 E 行在(、^、a、b列都填E → TEE 行在列填E → E在$和)列填E → ε。构造时注意ε 产生式只填在 Follow 集对应的列这是最容易错的地方。4.3 易错点Follow 集漏掉$或)LL(1) 这块的失分点非常集中Follow 集忘记加入$。开始符号的 Follow 一定包含$。Follow 集忘记传递。比如 Follow(T) 要包含 Follow(T)因为 T 可能推出 ε。预测分析表把 ε 填错列。ε 只能填在 Follow 集对应的列不能填在 First 集列。证明 LL(1) 时只写“没有冲突”不逐条检查 First 和 Follow 的交集。提示预测分析表建议先画空表再逐行填填完检查每行是否有重复填项。如果有重复说明文法不是 LL(1)或者你算错了。5. 条件语句翻译成四元式15 分的控制流题怎么不丢分5.1 真题拆解if-then-else 的四元式序列题目要求把if x 0 y 0 then z : x y else begin x : x 2; y : y 3 end;翻译成四元式序列。这类题的标准做法是先翻译条件再翻译 then 分支再翻译 else 分支最后回填跳转地址。四元式序列可以写成( , x, 0, T1 ) ( , y, 0, T2 ) ( and, T1, T2, T3 ) ( j, T3, _, 5 ) ( j, _, _, 8 ) ( , x, y, T4 ) ( :, T4, _, z ) ( j, _, _, 12 ) ( , x, 2, T5 ) ( :, T5, _, x ) ( , y, 3, T6 ) ( :, T6, _, y )这里第 4 条j, T3, _, 5表示如果 T3 为真跳到第 5 条开始执行 then 分支否则继续执行第 5 条j, _, _, 8跳到 else 分支。第 8 条j, _, _, 12是 then 分支执行完后跳过 else 分支。5.2 易错点跳转地址回填错误条件语句翻译的失分点几乎全在跳转地址上条件为假时跳转地址写错导致 then 和 else 都执行或都不执行。then 分支结束后忘记跳过 else 分支。临时变量命名混乱T1、T2 重复使用导致语义错误。复合语句 begin-end 里的多条赋值没有按顺序翻译。提示做这类题时先在草稿纸上标出行号再写四元式。跳转地址用行号表示最后统一检查一遍控制流是否闭合。6. 考前一周怎么练从真题到答题模板的落地方法如果你手里只有这一套卷子别急着背答案按下面这个顺序练三遍效果比刷十套题都稳。第一遍按考点分块做。先只做正规式和 DFA 那 30 分做完对照上面的分析检查正规式有没有漏边界串DFA 有没有死状态最简有没有合并到位。然后单独做 LL(1) 那 25 分重点检查 First/Follow 集有没有漏$和)预测分析表有没有把 ε 填错列。最后做四元式那 25 分检查跳转地址和临时变量。第二遍限时整套做。给自己 90 分钟模拟考场节奏。做完后不要只看分数把每道题的判分点列出来正规式写对给几分DFA 状态图画对给几分最简再给几分。这样你才知道自己丢的是哪一步的分。第三遍只做错题和易错点。把上面提到的易错点整理成一张检查表考点检查项常见错误正规式是否覆盖最短串和边界串漏掉11或01DFA是否有死状态、是否最简接受非法串、状态未合并逆波兰运算符顺序是否正确括号优先级搞反四元式临时变量是否复用、跳转是否正确重复计算子表达式、跳转地址错二义性是否画出两棵语法树只写结论不写推导First/Follow是否包含$和)忘记传递 Follow预测分析表ε 是否填在 Follow 列填在 First 列条件翻译控制流是否闭合then 后未跳过 else这张表考前每天过一遍比翻书有用。我自己的血泪经验是编译原理的卷面分不是靠“看懂”拿的是靠“写全步骤”拿的。正规式写出来只是第一步DFA 状态图画出来才是第二步最简化写清楚才是第三步。每一步都有分少一步就少一截。从那以后我每次做编译原理题都强制走一遍“先写语言描述 → 再写正规式 → 再画 DFA → 再化简 → 最后检查边界串”的流程哪怕题目再简单也不跳步。希望这套卷子的考点拆解和答题模板能帮你在考场上少翻一次车。本文还有配套的精品资源点击获取

相关新闻

Docker容器隔离与网络通信原理:从namespace到iptables一网打尽

Docker容器隔离与网络通信原理:从namespace到iptables一网打尽

先说个现象:很多人本机用Docker跑一两个容器,感觉一切都很美好;可一旦项目多起来,要同时起十几个服务,最让人头疼的一定是网络。容器之间互相不通、端口映射诡异失效、跨主机通信直接懵圈,这些问题几乎每个…

2026/10/19 6:00:36 阅读更多 →
从零搭建 artcraft 创意工具:本地优先架构与静态导出实践

从零搭建 artcraft 创意工具:本地优先架构与静态导出实践

1. 从零搭建一个叫 artcraft 的创意工具:我踩过的坑和最终跑通的方案第一次看到 artcraft 这个词,脑子里蹦出来的是“艺术”加“手艺”的组合,直觉告诉我这应该是一个跟创意生产、手工制作或者视觉表达沾边的项目。后来陆续在一些独立开发者的…

2026/10/19 6:00:36 阅读更多 →
diagram-design:从草图到系统,掌握技术图表设计核心方法

diagram-design:从草图到系统,掌握技术图表设计核心方法

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次看到 “diagram-design” 这个标题,很多人会以为它只是教你怎么画流程图、时序图或者架构图。但真正做过技术方案、写过设计文档、给团队做过评审的人都知道,画图这件事从来…

2026/10/19 6:00:36 阅读更多 →

最新新闻

代码重构是手艺活:行为不变、小步提交与可回滚的实战心法

代码重构是手艺活:行为不变、小步提交与可回滚的实战心法

代码重构这件事,我一直觉得被很多人做小了。刚工作那几年,我也把重构当成"把看不顺眼的代码改成看得顺眼的代码",干起来特别解压,改完还有一种莫名的成就感。直到有一次,我花两个晚上把一个模块从里到外收拾…

2026/10/19 6:32:52 阅读更多 →
Studio 5000 v33虚拟机部署实战:从环境配置到PLC通信调试

Studio 5000 v33虚拟机部署实战:从环境配置到PLC通信调试

各位做自动化、尤其天天跟罗克韦尔生态打交道的朋友,应该都有过这种体验:一台电脑上装完 FactoryTalk 全家桶,过段时间想再装另一个版本的 Studio 5000,明明安装步骤都对,打开软件却各种报错;或者编译速度慢…

2026/10/19 6:32:52 阅读更多 →
Oracle EBS物料事务处理API实战:接口表、批量处理与错误排查

Oracle EBS物料事务处理API实战:接口表、批量处理与错误排查

1. 物料事务处理API到底在解决什么问题做过Oracle EBS库存模块的兄弟都清楚,INV模块最核心的东西就是物料事务处理。你每天在系统里看到的收货、发货、子库存转移、账户别名发放,背后全都是在往MTL_MATERIAL_TRANSACTIONS这张表里写记录。问题来了&#…

2026/10/19 6:32:52 阅读更多 →
游戏资源聚合站架构拆解:CDN加速、防盗链与静态化设计

游戏资源聚合站架构拆解:CDN加速、防盗链与静态化设计

前阵子有朋友发来一个站,让我帮忙从技术角度拆一拆“游戏资源聚合分享站”这一类平台到底是怎么搭起来的。这类网站从外面看就是一堆游戏卡片、详情页和下载入口,好像没什么技术含量,但真等你有一定访问量之后会发现,采集、搜索、…

2026/10/19 6:32:52 阅读更多 →
Spring Security 7 OIDC登录:ID Token与userinfo端点claims合并机制详解

Spring Security 7 OIDC登录:ID Token与userinfo端点claims合并机制详解

前几天帮一个合作方排查登录问题,他们的应用从 Spring Security 6 升级到 7 之后,用户在登录后看到的姓名、头像全部变成了默认值。查了半天,问题出在 ID Token 和 userinfo 端点的 claims 合并上。说实话,类似的问题我见过不止一…

2026/10/19 6:32:52 阅读更多 →
S7-1200伺服与步进FB块封装实战:运动控制从底料到得力助手

S7-1200伺服与步进FB块封装实战:运动控制从底料到得力助手

前阵子在现场调一台三轴贴标设备,用西门子S7-1200搭配步进和伺服混用,电气图纸看着简单,程序倒是把我折腾得不轻。当时最头疼的问题就是:每个轴的运动控制逻辑写起来大同小异,但报警处理、回零、限位、使能这些细节各有…

2026/10/19 6:31:52 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →