一、编译解释
- 解释器:翻译源程序时不生成独立的目标程序,解释程序和源程序要参与到程序执行过程中
边翻译边执行,效率低,可移植性好 - 编译器:翻译时将源程序翻译成独立保存的目标程序,源程序和目标程序都不参与目标程序的运行过程
先翻译后执行,效率高,可移植性差 - 高级语言可写编译和解释
编译为变量分配地址为逻辑地址,程序运行时再映射为物理地址
二、程序设计语言基础
- 控制成分:顺序,选择,循环控制
- 程序数据类型作用
便于为数据合理分配存储单元
便于对参与表达式计算的数据对象进行检查
便于规定对象的取值范围及能够进行的运算(小范围能够转大范围,大范围不能够转小范围)
- 常量无存储区,变量有存储区
三、函数
返回值类型 函数名(形参){
函数体
}
①传值调用:实参的值给形参,实参(常量,变量,表达式)
②引用调用:实参的地址给形参,形参的值给实参,(其中实参不能是常量,变量,表达式,实参必须有地址)
四、编译,解释程序翻译阶段
- 编译方式:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
解释方式:词法分析、语法分析、语义分析
编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换
编译方式中中间代码生成和代码优化不是必要,可省略 - 符号表
不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。
记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。 - 词法分析
输入:源程序
输出:记号流
词法分析阶段的主要作用是分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定 - 语法分析
输入:记号流
输出:语法树,分析树
语法分析阶段的主要作用是对各条语句的结构进行合法性分析,分析程序中的句子结构是否正确,可发现所有的语法错误 - 语义分析
输入:语法树(分析树)
语义分析阶段的主要作用是进行类型分析和检查
语义分析阶段不能发现程序中所有的语义错误语义分析阶段可以发现静态语义错误不能发现动态语义错误,动态语义错误运行时才能发现 - 目标代码生成
目标代码生成阶段的工作与具体的机器密切相关
寄存器的分配处于目标代码生成阶段 - 动态的语义错误
程序运行时才能检测出来,eg:死循环 - 中间代码生成
常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式
中间代码与具体的机器无关(不依赖具体的机器),可以将不同的高级程序语言翻译成同一种中间代码。
中间代码可以跨平台。
因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性 - 正规式 ——>词法分析
五、有限自动机
有限自动机是词法分析的一个工具,它能正确地识别正规集
确定的有限自动机(DFA):对每一个状态来说识别字符后转移的状态是唯一的
不确定的有限自动机(NFA):对每一个状态来说识别字符后转移的状态是不确定的
在S₀识别1之后状态不确定,可到S₀也可到S₁,是不确定的有限自动机
六、上下文无关文法
- 上下文无关文法
被广泛的用于表示各种程序语言的语法规则
- 中缀式:左根右
后缀式:左右根
优先级:①()②×,/ ③+,— ④