计算机程序设计语言及编译
编译器在语言处理系统中的位置
编译系统的结构
人工英汉翻译的例子
编译器的结构
词法分析/扫描(Scanning)
词法分析的主要任务
从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。
将识别出的单词转换成统一的机内表示——词法单元(token)形式
token:< 种别码,属性值 >
例:词法分析后得到的token序列
语法分析 ( parsing)
语法分析器(parser)从词法分析器输出的token序列中
识别出各类短语,并构造语法分析树(parse tree)
语法分析树描述了句子的语法结构
例1:赋值语句的分析树
例2:变量声明语句的分析树
语义分析的主要任务
收集标识符的属性信息
种属 (Kind)
简单变量、复合变量(数组、记录、…)、过程、…
语义分析的主要任务
收集标识符的属性信息
种属 (Kind)
类型 (Type)
整型、实型、字符型、布尔型、指针型、…
收集标识符的属性信息
种属 (Kind)
类型 (Type)
存储位置、长度
值作用域
参数和返回值信息
参数个数、参数类型、参数传递方式、返回值类型、…
收集标识符的属性信息
语义检查
变量或过程未经声明就使用
变量或过程名重复声明
运算分量类型不匹配
操作符与操作数之间的类型不匹配
数组下标不是整数
对非数组变量使用数组访问操作符
对非过程名使用过程调用操作符
过程调用的参数类型或数目不匹配
函数返回类型有误
常用的中间表示形式
常用的三地址指令
三地址指令的表示
三地址指令的四元式表示
中间代码生成的例子
编译器的结构