主要内容:编译程序概述
一、什么是编译程序
- 高级语言翻译为低级语言(汇编、机器语言)。
- 编译程序(在宿主机)经过“翻译”动作将“源代码程序”整体转变成“目标语言程序”(在目标机)后再执行。
- 编译程序分类:诊断/优化/交叉/可变目标编译程序;其中交叉是指宿主机和目标机不同。
- 对比:“解释程序”,边读取边解释执行,一般不生成目标代码。
二、为什么学习编译原理
- 理解计算系统(比计算机更广泛的概念)在各学科的应用。
- 具备设计计算系统能力。
- 训练计算思维(Computational Thinking):利用计算机科学基础概念去求解问题。
- 理解高级语言
- 运用编译原理和方法构造实用工具
编译与计算思维:
-
抽象
- 提取共性、忽略非本质内容、忽略个体细节部分
- 毕加索画牛(抽象派)
- 实例:比如化学分子式、物理抽象
- 图灵机(纸带、读写头、状态寄存器、控制读写头工作的规则)
- 可计算 == 图灵可计算
- 有限自动机、形式文法...
-
自动化:抽象思维结果在计算机上实现,分析表+控制程序
-
分解
- 分析问题,全局决策解法
- 分解问题,降低解决难度
- 例子:引入中间语言(源代码和目标语言之间)、编译分为多个阶段、CI/CD流水线
-
递归:问题和子问题求解过程类似
-
权衡:理论 vs 可实现等,具体问题分析 ROI
-
编译原理和方法的运用
- html/xml 分析
- 语言处理软件:单词纠错、语法检查、自动翻译等
- 搜索引擎
- shell 解释器、协议解析等