第二章 程序语言
- 1.编译程序和解释程序
- 1.1编译器和解释器
- 1.2编译方式和解释方式
- 1.3符号表
- 1.4编译过程概述
- 2.传值和传地址
- 3.正规式
- 4.自动有限机
- 5.上下文无关文法
- 6.中缀,后缀表达式转换
1.编译程序和解释程序
1.1编译器和解释器
1.编译器:
编译时将源程序翻译成独立保存的目标程序
机器上运行的是与源程序等价的目标程序
源程序和编译程序都不在参与目标程序的运行过程
2.解释器:
解释源程序时不生成独立的目标程序
解释程序与源程序要参与到程序的运行过程中
1.2编译方式和解释方式
编译方式都有,解释方式只有前三个
编译器和解释器都不可省略前三个且顺序不可交换
编译器方式中中间代码生成,代码优化可省略
1.3符号表
不断收集,记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中
记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成
1.4编译过程概述
1.词法分析
输入:源程序
输出:记号流
作用:分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定
2.语法分析
输入:记号流
输出:语法树(分析树)
作用:对各条语句的结构进行合法性分析,分析程序中的句子结构是否正确
可以发现程序中的所有语法错误
3.语义分析
输入:语法树
作用:进行类型分析和检查
不能发现程序中所有的语义错误,可以发现静态的语义错误,不能发现动态语义错误(运行时才能发现)
4.目标代码生成
目标代码生成阶段的工作与具体的机器密切相关,寄存器的分配工作处于目标代码生成阶段
5.中间代码生成
中间代码:后缀式,三元地址码,三元式,四元式,树(图)
中间代码与具体的机器无关
可以将不同的机器语言翻译成同一种中间代码
可以跨平台
有利于进行与机器无关的优化处理和提高编译程序的可移植性
2.传值和传地址
1.传值调用:
实参传给形参,实参可以是变量,常量,表达式,不可以双向传递
2.传引用(地址)调用:
实参地址传给形参,形参必须有地址,实参不能是常量,表达式,可以双向传递,改变形参的值也改变实参的值
3.正规式
4.自动有限机
是词法分析的工具,能正确识别正规集
有初态和终态,∑空,合法的最终要停留在终态
确定的有限自动机(DFA):每一个状态识别字符后转移的字符状态是唯一的
不确定的有限自动机(NFA):每一个状态识别字符后转移的字符状态是不确定的
5.上下文无关文法
广泛地用于表示各种程序设计语言的语法规则
6.中缀,后缀表达式转换
中缀:a?b
后缀:ab?
优先级相同从右向左
后缀表达式用栈得出中缀表达式