第17章 程序设计语言与语言处理程序基础
本章看起来像“编译原理缩略版”,实际考试更关心两件事:一是能不能分清语言、翻译方式、函数调用这些基本概念;二是能不能把编译过程、文法、正规式、有限自动机、后缀表达式放到同一条语言处理链路里理解。
mermaid
flowchart LR
A["程序设计语言"] --> B["源程序"]
B --> C["语言处理程序"]
C --> D["词法分析: 字符到单词"]
D --> E["语法分析: 单词到结构"]
E --> F["语义分析: 类型与含义"]
F --> G["中间代码"]
G --> H["优化与目标代码"]
D -.使用.-> I["正规式 / 有限自动机"]
E -.依据.-> J["文法 / 语法树"]
G -.常见形式.-> K["后缀表达式 / 三地址码"]学习路径
| 模块 | 页面 | 本质问题 |
|---|---|---|
| 语言基础 | 程序设计语言概述、编译程序与解释程序、语言特点 | 人写的程序怎样变成机器能执行的形式 |
| 语言成分 | 程序设计语言的基本成分、函数调用方式 | 语言如何表达数据、流程和过程调用 |
| 编译过程 | 编译程序基本原理、编译过程概述 | 编译器为什么要分阶段工作 |
| 形式语言 | 文法、正规式与正规集、有限自动机 | 语言规则如何被精确定义和识别 |
| 表达式 | 后缀表达式 | 表达式如何变成便于机器处理的线性形式 |
| 复习 | 章节概述、章节回顾 | 把常考边界和解题方法串起来 |
主线理解
低级语言接近机器,高级语言接近人的思维。越接近机器,执行控制越直接,编写越困难;越接近人,表达越自然,但必须依赖语言处理程序。编译程序把源程序整体翻译成目标程序,解释程序则在运行时逐句或逐段解释执行。
编译器之所以分词法、语法、语义等阶段,是因为“程序正确”本身有多个层次:单词要合法,句子结构要合法,类型和含义还要合理。词法分析依赖正规式和有限自动机,语法分析依赖文法和语法树,后续阶段再生成中间代码、优化、生成目标代码。
考试权重
| 高频点 | 常见问法 | 做题抓手 |
|---|---|---|
| 编译与解释 | 哪个生成目标程序,哪个运行时参与 | 看“目标程序”和“运行时是否需要处理程序” |
| 函数调用 | 形参变化是否影响实参 | 传值不影响,引用/地址可能影响 |
| 编译阶段 | 某错误属于词法、语法还是语义 | 词法看单词,语法看结构,语义看类型和含义 |
| 有限自动机 | 某串是否被识别,哪个正规式等价 | 逐字符走状态,必要时找反例 |
| 后缀表达式 | 中缀转后缀、语法树后序遍历 | 根在最后,栈可求值 |
复习建议
这章不适合孤立背定义。建议每学一个概念都问三句话:它解决哪个层次的问题,它为什么要和相邻概念区分,它在题目里会被怎样伪装。比如“语法错误”和“语义错误”只差一步:前者是结构不成句,后者是结构成句但含义不合理。