引论
# 1.编译过程
# 2.编译器在语言处理系统中的位置
# 3.英汉翻译例子
1.词法分析
2.语法分析
3.语义分析
# 4.编译器结构
其中此法分析、语法分析、语义分析常常可以一起实现,共称为“语法制导翻译(Syntax Directed Translation)”
# 1.词法分析/扫描(Scanning)
例子:
# 2.语法分析(Parsing)
例子1:变量声明语句的分析树
例子2:变量声明语句的分析树
# 3.语义分析
主要任务:
# 3.1.收集标识符的属性信息
- 种属(Kind)
- 类型(Type)
- 存储位置、长度
- 值
- 作用域
- 参数和返回值信息 ➢参数个数、参数类型、参数传递方式、返回值类型、..
每一个标记符的各种信息都存在符号表中,同时带着一个字符串表存储标识符的名字,如下:
只是将字符串地址存在符号表中的好处是节省空间,因为只需要固定长度的字符串地址就可以,而不用取最长的字符串长度来做列长;同时也方便了多次利用和修改。
# 3.2.语义检查
➢变量或过程未经声明就使用 ➢变量或过程名重复声明 ➢运算分量类型不匹配 ➢操作符与操作数之间的类型不匹配 ➢数组下标不是整数 ➢对非数组变量使用数组访问操作符 ➢对非过程名使用过程调用操作符 ➢过程调用的参数类型或数目不匹配 ➢函数返回类型有误
# 4.中间代码生成
# 4.1.常用的中间表示形式
三地址码(Three-address Code)
三地址码由类似于汇编语言的指令序列组成,每个指令最多有三个操作数(operand)
语法结构树/语法树(Syntax Trees)
# 4.2.三地址码:
三地址指令的表示方法有以下三种:
- 四元式(Quadruples),格式为(op,y,z,x)
- 三元式(Triples)
- 间接三元式(Indirect triples)
四元式例子: