1.2 编译过程和编译程序的结构 任务 分析和识别单词 。 源程序是由字符序列构成的,词法分析扫描源程序(字符串), 根据语言的词法规则分析并识别单词,并以某种编码形式输 法 单词 是语言的基本语法单位,一般语言有五大类单词 分析 <1>语言定义的关键字或保留字(如BEGN、END、F) <2>标识符 <3>常数 <4>运算符(如+、-、*、) <5>界特(如;,()) 例题 对如下的程序片段进行词法分析 begin var sum,first,count:real;sum:=first+count*10 end. 返回 一编译原理-一 16
1.2 编译过程和编译程序的结构 任 务 分析和识别单词 • 源程序是由字符序列构成的,词法分析扫描源程序(字符串), 根据语言的词法规则分析并识别单词,并以某种编码形式输 出。单 词 是语言的基本语法单位,一般语言有五大类单词 • <1>语言定义的关键字或保留字(如BEGIN、END、IF) <2>标识符 <3>常数 <4>运算符(如+、-、 * 、/) • <5>界符(如;,()) 例 题 对如下的程序片段进行词法分析 • begin varsum, first, count: real; sum:=first+count*10 end. 词 法 分 析 -编译原理- 16
1.2编译过程和编译程序的结构 任务 分析和识别单词串 根据语法规则(即语言的文法),分析并识别出各种语 法成分,如表达式、各种说明、各种语句、过程、函数 程序等,并进行语法正确性检查。 法分析 对于前面提到的例子sum:=frst+count*10我们 例题 可以根据语言赋值语句的文法来分析和识别该 语句(单词串)。 ·<赋值语句>→<变量><赋值操作符><表达式> <变量>→<标识符> <赋值操作符>:= <表达式>→<表达式>+<表达式>|<表达式>*<表达式 >. 语法分析根据文法,将<变量>、<赋值操作符> 返回 一编译原理一 >迟别出来]进而将赋值语句识别出来,在识别在
1.2 编译过程和编译程序的结构 任 务 分析和识别单词串 • 根据语法规则(即语言的文法),分析并识别出各种语 法成分,如表达式、各种说明、各种语句、过程、函数 程序等,并进行语法正确性检查。 对于前面提到的例子sum:=first+count*10 我们 可以根据语言赋值语句的文法来分析和识别该 语句(单词串)。 例 题 • <赋值语句>→<变量><赋值操作符><表达式> <变量>→<标识符> <赋值操作符>→:= <表达式>→<表达式> +<表达式>|<表达式>*<表达式 >|. 语法分析根据文法,将<变量>、<赋值操作符>、<表达式 >识别出来,进而将赋值语句识别出来,在识别过程中进行 语法检查,若有错误,则应输出出错信息。 语 法 分 析 -编译原理- 17
1.2 编译过程和编译程序的结构 任务 语义审查(静态语义) ·上下文相关性 类型匹配 语义分析 类型转换 例题 real ·begin var sum,first,ccunt:real; sum:=first+count*10。O 。 end. 10.0 返回 一编译原理-一 18
1.2 编译过程和编译程序的结构 任 务 语义审查(静态语义) • 上下文相关性 类型匹配 类型转换 例 题 • begin • var sum, first, count: real; • sum:=first+count*10 • end. . 语 义 分 析 real int 10.0 -编译原理- 18
1.2编译过程和编译程序的结构 中间代码 一种介于源语言和目标语言之间的中间语言形式。 生成中间代码的目的: 中间代 <1>便于做优化处理; <2>便于编译程序的移植(中间代码不依赖与目标计算机) 中间代码的形式:编译程序设计者可以自己设计,常用的有 m子尘 码生成 元式、逆波兰表示等。 例题 sum:=first+count*10 由语法分析识别出为赋值语句,语义分析首先要分析语义上 的正确性,例如要检查表达式中和赋值号两边的类型是否一 致。根据赋值语句的语义,生成中间代码。即用一种语言形 式来代替另一种语言形式,这是翻译的关健步骤。(翻译的 实质:语义的等价性) 返回 一编译原理 19
1.2 编译过程和编译程序的结构 sum:=first+count*10 中间代码 • 生成中间代码的目的: <1> 便于做优化处理; <2> 便于编译程序的移植(中间代码不依赖与目标计算机) • 中间代码的形式:编译程序设计者可以自己设计,常用的有 四元式、三元式、逆波兰表示等。 例 题 • 由语法分析识别出为赋值语句,语义分析首先要分析语义上 的正确性,例如要检查表达式中和赋值号两边的类型是否一 致。根据赋值语句的语义,生成中间代码。即用一种语言形 式来代替另一种语言形式,这是翻译的关键步骤。(翻译的 实质:语义的等价性) 中 间 代 码 生 成 一种介于源语言和目标语言之间的中间语言形式。 -编译原理- 19
1.2 编译过程和编译程序的结构 四元式 三地址指令 例题 sum:=first+count*10 间代 运算符 运算对象1 运算对象2 结果 (1) intoreal 10 T1 (2) * count T1 T2 码生成 (3)+ first T2 T3 (4):= T3 sum ·其中T1和T2为编译程序生成的临时名字,用于存放运算的中 间结果 这样所生成的四元式与原来的赋值语句在语言的形式上不同, 但语义上等价。 返回 一编译原理-一 20
1.2 编译过程和编译程序的结构 四元式 三地址指令 例 题 • 运算符 运算对象1 运算对象2 结果 (1) intoreal 10 - T1 (2) * count T1 T2 • (3) + first T2 T3 (4) := T3 sum • 其中T1和T2为编译程序生成的临时名字,用于存放运算的中 间结果 • 这样所生成的四元式与原来的赋值语句在语言的形式上不同, 但语义上等价。 中 间 代 码 生 成 sum:=first+count*10 -编译原理- 20