编译原理-引论
22页1、引论赵建华 南京大学计算机系 2009年2月课程内容 引论 编译器的总体结构 词法分析 语法分析 语法制导的翻译技术 中间代码生成 运行时刻环境 代码生成 机器无关优化编译器的作用 读入以某种语言(源语言) 编写的程序 输出等价的,用另一种语言 (目标语言)编写的程序。 通常目标程序是可执行的。 解释器 直接利用用户提供的输入, 执行源程序中指定的操作。 不生成目标程序,而是根据 源程序的语义直接运行。 Java语言的处理结合了编译 和解释。编译器的结构(1) 编译器可以分为分析部分和综合部分 分析部分(前端,front end) 把源程序分解成组成要素,并加上语法结构 使用这个结构创建源程序的中间表示 同时收集和源程序相关的信息,存放到符号表 综合部分(后端,back end) 根据中间表示和符号表信息构造目标程序 前端部分是机器无关的,后端部分是机器 相关的。编译器的结构(2) 编译器可分成顺序执行的一组步骤(phase)词法分析 词法分析/扫描(lexical analysis, scanning) 读入源程序的字符流,输出成为有意义的词素 (lexeme) token-name
2、由语法分析步骤使用 attribute-value指向相应的符号表条目,由语义分析 /代码生成步骤使用 例子 position = initial + rate * 60 语法分析 语法分析/解析(syntax analysis/parsing) 根据各个词法单元的第一个分量来创建树形中 间表示形式。通常是语法树(syntax tree) 指出了词法单元流的语法结构。语义分析 语义分析(semantic analysis) 使用语法树和符号表中的信息,检查源程序是否满足 语言定义的语义约束。 同时收集类型信息,用于代码生成。 类型检查,类型转换。中间代码生成 根据语义分析的输出,生成类机器语言的中间表示 三地址代码: 每个指令最多包含三个运算分量 t1 = inttofloat(60); t2 = id3 * t1; t3 = id2 + t2;代码优化 通过对中间代码的分析,改进中间代码,得到更好 的目标代码 快、短、能耗低代码生成 把中间表示形式映射到目标语言 寄存器的分配 指令选择 内存分配其它概念 符号表管理 记录源程序中使用的变量的名字,收集各种属性 趟(PASS) 每趟读入
《编译原理-引论》由会员第***分享,可在线阅读,更多相关《编译原理-引论》请在金锄头文库上搜索。
2024-03-26 4页
2024-03-26 5页
2024-03-26 8页
2024-03-26 10页
2024-03-26 11页
2024-03-26 9页
2024-03-26 4页
2024-03-26 4页
2024-03-26 7页
2024-03-26 8页