第17章 程序设计语言与语言处理程序基础
📚 本章课程
| 课程 | 内容 |
|---|---|
| 17.1.1 程序设计语言概述 | 语言分层(机器/汇编/高级)与翻译器全景;本章命题主线入口 |
| 17.1.2 编译程序与解释程序 | 目标代码 vs 边解释边执行;字节码+虚拟机/JIT混合模型 |
| 17.1.3 多种程序设计语言特点 | 语言识别题:Fortran/Pascal/Lisp/Prolog/脚本语言关键词速记 |
| 17.1.4 程序设计语言的基本成分 | 数据类型 + 控制结构三分法 + 类型转换触发场景 |
| 17.1.5 函数调用方式 | 传值/传引用对输出结果影响;递归/嵌套调用为何依赖栈 |
| 17.2.1 编译程序基本原理概述 | 编译器流水线全景;符号表与错误处理贯穿作用 |
| 17.2.2 编译过程概述 | 阶段职责/输入输出/错误分类:软考最爱考的“职责匹配题” |
| 17.2.3 文法 | 文法四元组 + Chomsky层次与识别模型对照表 |
| 17.2.4 正规式与正规集 | 正规式三运算与等价关系;文字约束->正规式匹配 |
| 17.2.5 有限自动机 | DFA/NFA/ε转换;识别字符串与正规式等价联动 |
| 17.2.6 后缀表达式 | 表达式树后序遍历=后缀;栈求值“先右后左” |
| 17.3 章节概述 | 命题主线总图与考前速记表 |
| 17.4 章节回顾 | 冲刺复盘:高频坑位 + 模拟题闭环训练 |
这章在软考里考的不是“写编译器”,而是考你能否把阶段职责、栈模型、等价关系说清楚。
🎯 本章定位(命题老师视角)
- 常见分值形态:本章在上午选择题中通常占据相对稳定的分值(经常接近 5~6 分量级,具体以当次真题为准)。
- 命题风格:
- 用一句话描述一个阶段职责,让你选“词法/语法/语义/运行时”。
- 给一个后缀表达式或表达式树,让你求转换/求值。
- 给一个正规式或有限自动机,让你判断等价或识别哪些串。
- 高频本质:都是“对应关系题”。只要对应关系记牢,几乎不需要临场发挥。
🧭 命题主线(抓住这4条就稳)
- 编译阶段职责与错误分类:词法/语法/语义/运行时分别管什么、输出什么、能发现什么错误。
- 栈模型贯穿两类题:调用栈(递归/嵌套返回)+ 操作数栈(后缀表达式求值)。
- 形式语言三角等价:正规式 <-> 有限自动机 <-> 正规文法(表达能力等价)。
- 表达式树与遍历:前序=前缀,中序=中缀,后序=后缀;后缀求值先右后左。
⭐ 复习优先级(时间不够就按这个顺序)
- 第一优先(必拿分):17.2.2(编译阶段职责/错误)+ 17.1.5(传参+栈)
- 第二优先(高频联动):17.2.4(正规式)+ 17.2.5(有限自动机)+ 17.2.6(后缀)
- 第三优先(概念题):17.2.3(文法层次)+ 17.1.3(语言识别题)
📌 一页速记(考前10分钟扫一遍)
1) 编译阶段职责速记表(输入-输出-错误)
| 阶段 | 输入 | 输出 | 常见错误 |
|---|---|---|---|
| 词法分析 | 字符流 | Token流 | 非法字符/记号不合法 |
| 语法分析 | Token流 | 语法树/分析树 | 括号不匹配/缺分号/结构错 |
| 语义分析 | 语法树+符号表 | 带语义信息的树/IR | 类型不匹配/声明使用不一致 |
| 运行阶段 | 可执行程序 | 运行结果 | 数组越界/变量为0作除数/死循环 |
高频判断:中间代码生成、代码优化通常按“可选阶段”考。
2) Chomsky层次与识别模型(只背这一行)
0型->TM;1型->LBA;2型(CFG)->PDA;3型(正规)->FA。
3) 传值 vs 传引用(输出题的核心)
| 方式 | 传递内容 | 修改形参是否影响实参 |
|---|---|---|
| 传值 | 值的拷贝 | 否 |
| 传引用/传址 | 地址/别名 | 是 |
4) 正规式三运算(会读就能做题)
|:并(A或B)- 连接:AB(先A后B)
*:0次或多次(含空串ε)
等价题做法:用反例验证“双向包含”。
5) 后缀表达式栈规则(最常扣分点)
- 操作数入栈
- 遇运算符:先弹右操作数,再弹左操作数,算
左 op 右,结果入栈
🧠 高频坑位(最容易被扣分的点)
- 把“语法分析输入=字符流”写错:更常见口径是“语法分析输入=Token流”。
- 把“解释型”理解成“不经过词法/语法/语义”:解释执行也常有这些前端步骤。
- 后缀求值把顺序写反:
a b -写成b-a。 - NFA识别题只走一条路径:NFA是“存在一条可达终态路径即可接受”。
✅ 建议学习路线
- 先抓全景:读
docs/software-designer/17-programming-language/12-chapter-overview.md。 - 然后先做稳定得分:17.2.2(阶段+错误)-> 17.1.5(传参+栈)-> 17.2.6(后缀)。
- 最后做联动:17.2.4(正规式)+ 17.2.5(自动机)+ 17.2.3(文法层次)。
- 冲刺闭环:
docs/software-designer/17-programming-language/13-chapter-review.md。
🎯 本章课程总览
| 课程 | 内容 | 时长 |
|---|---|---|
| 17.1.1 程序设计语言概述 | 建立程序设计语言分层(机器/汇编/高级)与语言处理程序(编译/解释)的整体框架,明确第17章在软考中的高频考点。 | 45分钟 |
| 17.1.2 编译程序与解释程序 | 系统掌握编译器与解释器的工作方式、输出产物与性能权衡,能在选择题中精准判断描述的正误。 | 45分钟 |
| 17.1.3 多种程序设计语言特点 | 掌握常见程序设计语言的典型特征与应用场景,能在选择题中根据描述快速识别语言或判断特性。 | 45分钟 |
| 17.1.4 程序设计语言的基本成分 | 掌握高级程序设计语言的基本语言成分(数据类型、控制结构等)及类型转换的常见触发场景,解决选择题中的概念辨析。 | 45分钟 |
| 17.1.5 函数调用方式 | 掌握传值调用与传引用调用的差异,并能结合代码判断调用后的变量值;理解递归/嵌套调用为何依赖栈。 | 45分钟 |
| 17.2.1 编译程序基本原理概述 | 从整体上理解编译器的组成与工作流:分析(词法/语法/语义)、中间代码、优化、目标代码生成,并掌握符号表与错误处理在各阶段的贯穿作用。 | 45分钟 |
| 17.2.2 编译过程概述 | 细化掌握编译过程各阶段任务、输入输出与典型错误类型,能快速解答“哪个阶段做什么/能发现什么错误”的高频题。 | 45分钟 |
| 17.2.3 文法 | 掌握文法的四元组表示、终结符/非终结符/产生式等基本概念,并理解Chomsky文法层次与自动机模型的对应关系。 | 45分钟 |
| 17.2.4 正规式与正规集 | 掌握正规式(正则表达式)的基本构造与含义,理解正规式与正规集(字符串集合)的等价关系,并能完成软考常见的“文字描述->正规式”匹配题。 | 45分钟 |
| 17.2.5 有限自动机 | 掌握有限自动机(DFA/NFA)的基本概念、识别字符串的方法与ε转换含义,并理解其与正规式/正规文法的等价关系。 | 45分钟 |
| 17.2.6 后缀表达式 | 掌握后缀表达式(逆波兰式)的构造与栈求值方法,能根据表达式或语法树写出后缀形式并正确计算结果。 | 45分钟 |
| 17.3 章节概述 | 从语言基础到编译实现,再到形式语言与表达式求值,构建第17章高频考点全景图并给出复习优先级与作答模板。 | 45分钟 |
| 17.4 章节回顾 | 以命题老师视角梳理第17章稳定得分点与高频陷阱,并通过模拟练习把“职责匹配、栈模型、等价关系”三条主线练到不失误。 | 45分钟 |
🧪 作答模板(客观题/综合题)
- 第一步:识别题型(概念、流程、计算、综合)。
- 第二步:提取关键词(对象、条件、约束、目标)。
- 第三步:调用方法并写出关键中间步骤。
- 第四步:检查边界(符号、范围、单位、合理性)。
🛣️ 学习路线建议
- 第一轮:按课程顺序建立知识骨架。
- 第二轮:按题型专题训练并沉淀模板。
- 第三轮:只看错题与速记表做考前冲刺。