词法分析

- 词法分析的主要任务
从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统一的机内表示——词法单元 (token) 形式 token:<种别码,属性值>

- 例子 词法分析后得到的token序列

其中 while ( != ) ++ ; } 都是一词一码的单词,因此对于的token第二个值都是空的 - 。
语法分析

语法分析器(parser)从词法分析器输出的token序列中识别出各类短语 ,并构造语法分析树(parse tree)。
语法分析树描述了句子的语法结构

- 语法分析树
- 例子 赋值语句的分析树
position = initial + rate * 60;
<id, position> <=> <id,initial> <+> <id, rate> <*> <num,60> <;>

- 例子 变量声明语句的分析树
D = Declaration
T = Type
IDS = Identify Sequence

语义分析

语义分析的主要任务
- 收集标识符的属性信息
-
种属(Kind)
简单变量、复合变量(数组、记录、… )、过程… -
类型
整型、实型、字符型、布尔型、指针型… -
存储位置、长度

-
值
-
作用域
-
参数和返回值信息
参数个数、参数类型、参数传递方式、返回值类型、…
符号表
语义分析阶段收集的这些标志服信息,都会存放在符号表中。

字符串标这种设计比较灵活,因为每个name的字符串长度是不一致的。
- 语义检查
- 变量或过程未经声明就使用
- 变量或过程名重复声明
- 运算分量类型不匹配
- 操作符与操作数之间的类型不匹配
数组下标不是整数
对非数组变量使用数组访问操作符
对非过程名使用过程调用操作符
过程调用的参数类型或数目不匹配
函数返回类型有误
网友评论