Skip to content

第17章 程序设计语言与语言处理程序基础

本章看起来像“编译原理缩略版”,实际考试更关心两件事:一是能不能分清语言、翻译方式、函数调用这些基本概念;二是能不能把编译过程、文法、正规式、有限自动机、后缀表达式放到同一条语言处理链路里理解。

mermaid
flowchart LR
  A["程序设计语言"] --> B["源程序"]
  B --> C["语言处理程序"]
  C --> D["词法分析: 字符到单词"]
  D --> E["语法分析: 单词到结构"]
  E --> F["语义分析: 类型与含义"]
  F --> G["中间代码"]
  G --> H["优化与目标代码"]
  D -.使用.-> I["正规式 / 有限自动机"]
  E -.依据.-> J["文法 / 语法树"]
  G -.常见形式.-> K["后缀表达式 / 三地址码"]

学习路径

模块页面本质问题
语言基础程序设计语言概述编译程序与解释程序语言特点人写的程序怎样变成机器能执行的形式
语言成分程序设计语言的基本成分函数调用方式语言如何表达数据、流程和过程调用
编译过程编译程序基本原理编译过程概述编译器为什么要分阶段工作
形式语言文法正规式与正规集有限自动机语言规则如何被精确定义和识别
表达式后缀表达式表达式如何变成便于机器处理的线性形式
复习章节概述章节回顾把常考边界和解题方法串起来

主线理解

低级语言接近机器,高级语言接近人的思维。越接近机器,执行控制越直接,编写越困难;越接近人,表达越自然,但必须依赖语言处理程序。编译程序把源程序整体翻译成目标程序,解释程序则在运行时逐句或逐段解释执行。

编译器之所以分词法、语法、语义等阶段,是因为“程序正确”本身有多个层次:单词要合法,句子结构要合法,类型和含义还要合理。词法分析依赖正规式和有限自动机,语法分析依赖文法和语法树,后续阶段再生成中间代码、优化、生成目标代码。

考试权重

高频点常见问法做题抓手
编译与解释哪个生成目标程序,哪个运行时参与看“目标程序”和“运行时是否需要处理程序”
函数调用形参变化是否影响实参传值不影响,引用/地址可能影响
编译阶段某错误属于词法、语法还是语义词法看单词,语法看结构,语义看类型和含义
有限自动机某串是否被识别,哪个正规式等价逐字符走状态,必要时找反例
后缀表达式中缀转后缀、语法树后序遍历根在最后,栈可求值

复习建议

这章不适合孤立背定义。建议每学一个概念都问三句话:它解决哪个层次的问题,它为什么要和相邻概念区分,它在题目里会被怎样伪装。比如“语法错误”和“语义错误”只差一步:前者是结构不成句,后者是结构成句但含义不合理。