机器语言:可以被计算机直接理解
汇编语言:引入助记符,依赖特定机器,编写效率低
高级语言:类似于数学定义或自然语言的简洁形式,编写效率高
编译:将高级语言翻译成汇编语言或机器语言的过程。
源程序——>(预处理器)——>经过预处理的源程序——>(编译器)——>汇编语言程序——>(汇编器)——>可重定位的机器代码——>(链接器/加载器)——>目标机器代码
预处理器:
1、把存储在不同文件中的源程序聚合在一起
2、把被称为宏的缩写语句转换为原始语句
可重定位:在内存中存放的起始位置不是固定的
连接器:
1、将多个可重定位的机器代码文件(包括库文件)连接到一起
2、解决外部内存地址问题
加载器:
1、修改可重定位地址
2、将修改后的指令和数据放到内存中适当的位置
编译分为两个阶段:
1、词法分析
2、语法分析:语法分析器从词法分析器输出的token序列中识别出各类短语,并构造语法分析树,语法分析树描述了句子的语法结构
语义分析的主要任务:
1、手机标识符的属性信息
2、语义检查
(1)变量或过程未经声明就使用
(2)变量或过程名重复声明
(3)运算分量类型不匹配
(4)操作符与操作数之间的类型不匹配
1)数组下标不是整数
2)对非数组标量使用数组访问操作符
3)对非过程名使用过程调用操作符
4)过程调用的参数类型或数目不匹配
5)函数返回类型有误
常用的中间表示形式:
1、三地址码:三地址码由类似于汇编语言的质量序列组成,每个指令最多有三个操作数
2、语法结构树/语法树
编译器的结构:
字符流——>(词法分析器)——>词法单元流——>(语法分析器)——>语法树——>(语义分析器)——>语法树——>(中间代码生成器)——>中间表示形式——>(机器无关代码优化器)——>中间表示形式——>(目标代码生成器)——>目标机器语言——>(机器相关代码优化器)——>目标机器语言
目标代码生成以源程序的中间表示形式作为输入,并把它映射到目标语言。
目标代码生成的一个重要任务是为程序中使用的变量合理分配寄存器。
字母表的正闭包:长度为正数的符号串构成的集合。
字母表的克林闭包:任意符号串(长度可以为零)构成的集合。
文法分类体系:逐级限制,0包含1,1包含2,2包含3,
1、0型文法:无限制文法/短语结构文法
2、1型文法:上下文有关文法
3、2型文法:上下文无关文法
4、3型文法:正则文法
来源:CSDN
作者:llz56
链接:https://blog.csdn.net/llz56/article/details/103713658