编译与翻译
翻译程序
- 翻译时
不产生
新的独立目标程序 - 解释程序和源程序
参与
程序的运行
编译程序
- 编译时
产生
新的独立目标程序 - 编译程序和源程序
不参与
程序的运行
程序设计语言的成分
顺序、选择、循环结构
传值与传地址
略
编译、解释与翻译阶段
共同点:
编译和解释都不可省略 词法分析、语法分析、语义分析且顺序不可交换
编译器特点
- 词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
- 中间代码生成 和 代码优化不是必要,可省略
解释器特点
- 词法分析、语法分析、语义分析
编译过程
1.词法分析
输入:源程序
输出:记号流
分析字符、符号是否符合规定
2.语法分析
输入:记号流
输出:语法树
分析程序中的句子,结构
是否符合结构。能分析出所有的语法错误
3.语义分析
不能分析出所有的语义错误
分析类型是否匹配
不能发现动态语义错误,只能发现静态语义错误
4.目标代码生成
目标代码生成阶段的工作与具体的机器密切相关
寄存器的分配处于目标代码生成阶段
5.中间代码生成
- 后缀式、三地址码、三元式、四元式和树(图)
- 中间代码与机器无关
正规式
学会即可
有限自动机
最终都要回到终态
Σ
表示可以跳过此阶段