1.2.1编译过程概述p2 编译过程可分为下面5个阶段 n 词法分析 n语法分析 n语义分析和中间代码生成 n优化 n目标代码生成 n表格管理和错误处理
6 1.2.1编译过程概述 p2 编译过程可分为下面5个阶段 n 词法分析 n 语法分析 n 语义分析和中间代码生成 n 优化 n 目标代码生成 n 表格管理和错误处理
第一阶段词法分析p2 例某C语言源程序 n任务 main {float sum,first,count; u输入源程序(字符串) .sum=first+count*10;. u根据词法规则 输出结果 u识别出单词 class value 保留字 main 界符一左括号 ( n单词内部表示形式 界符一右括号 界符-左花括号 u二元式 保留字 float (class,value) 标识符1-id1 sum 单词 单词值 算符-乘号 米 类型 整数 10
7 第一阶段 词法分析p2 n 任务 u 输入源程序(字符串) u 根据词法规则 u 识别出单词 n 单词内部表示形式 u 二元式 (class,value) 单词 类型 单词值 例某C语言源程序 main( ) {float sum,first,count; .sum=first+count*10;. } 输出结果 class value 保留字 main 界符-左括号 ( 界符-右括号 ) 界符-左花括号 { 保留字 float 标识符1-id1 sum . 算符-乘号 * 整数 10
第二阶段语法分析p3 n任务 u输入单词符号串 u根据语言的语法规则对单词符号串进行扫描和分解 识别出各类语法单位 n程序语言的语法单位 u表达式、语句和程序等 u例X1=Y+10*Z 语法单位:表达式Y,10,Z,10*Z 赋值语句X1=Y+10*Z; n语法单位内部表示 u语法树
8 第二阶段 语法分析 p3 n 任务 u 输入单词符号串 u 根据语言的语法规则对单词符号串进行扫描和分解 u 识别出各类语法单位 n 程序语言的语法单位 u 表达式、语句和程序等 u 例 X1= Y + 10*Z; 语法单位:表达式 Y,10,Z,10*Z 赋值语句 X1=Y+10*Z; n 语法单位内部表示 u 语法树
语法单位的内部表示:语语法树 例某C语言源程序 赋值语句的语法树 main() <赋值语句〉 {float sum,first,count; ,S证3 t+count10i父标识符> 表达式〉》 sum <赋值语句>→〈标识符>=<表达式>; <表达式>→〈表达式>+表达式》 <表达式〉+ 表达式〉 <表达式>→<表达式>*<表达式》 表达式>→〈标识符〉》 <标识符>〈表达式〉*<表达式〉 <表达式>→<常数> first <标识符〉 <常数> count 10
9 语法单位的内部表示:语法树 例某C语言源程序 main( ) {float sum,first,count; .sum=first+count*10;. } <赋值语句>→<标识符>=<表达式>; <表达式>→<表达式>+<表达式> <表达式>→<表达式>*<表达式> <表达式>→<标识符> <表达式>→<常数> 赋值语句的语法树 <赋值语句> <标识符> = <表达式> ; sum <表达式> + <表达式> <标识符> first <表达式> * <表达式> <标识符> count <常数> 10