• 1. 编译原理 教材:编译原理 张素琴 吕映芝 清华大学出版社 参考教材:编译原理(第2版) 蒋立源 西北工业大学出版社 主讲教师: 刘立月 Office_Tel: 7046813 E_mail: lly_nwpu@163.com
  • 2. 教学内容及学时分配
  • 3. 教学内容及学时分配(56学时:44+12)
  • 4. 课程成绩评定 平时成绩(30%) (考勤20、 书面作业30、上机练习30、态度与提问20 ) 期末考试(70%)
  • 5. 第1章 编译程序概论考查重点: 编译程序 编译程序与解释程序的根本区别 编译程序各部分的功能 编译程序的逻辑结构
  • 6. 1.1 什么是编译程序计算机语言低级语言高级语言:如PASCAL,C等 机器语言汇编语言(唯一能被计算机执行的)2、执行高级语言或汇编语言的步骤: (1)把高级语言程序或汇编语言程序转换成计算机所能理解的语言程序—机器语言程序 。 转换的办法:解释、翻译 (2)运行所得的机器语言程序得到计算结果1、计算机语言的分类
  • 7. 3、解释程序 定义: 一个源程序的解释程序是这样一个程序,它以源语言书写的程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。 源语言:BASIC、LISP等 解释程序源程序输入数据计算结果边解释边执行
  • 8. 4、翻译程序:把一种语言(源语言)书写的程序翻译成另一种语言(目标语言)等价的程序。 汇编程序:源语言程序为汇编语言;目标语言为机器语言的翻译程序。 (区别:汇编语言程序与汇编程序) 编译程序:源语言程序为高级语言,而目标语言为低级语言(汇编语言或机器语言)的翻译程序。编译程序高级语言程序 (源程序)低级语言程序 (目标程序)思考: 翻译与编译的关系? 解释与编译的主要区别是?
  • 9. 编译程序运行系统目标程序输入数据计算结果源程序
  • 10. 需预处理的源程序预处理程序源程序编译程序汇编程序装配/连接编辑程序目标汇编程序可再装配的机器代码绝对机器代码可再装配目标文件5、高级语言程序的处理过程 (目标程序:汇编语言)
  • 11. 1. 2 编译过程概述1、编译程序的组成 例:一段英文翻译为中文时,通常经过以下步骤: 识别句子中的一个个单词;  词法分析 分析句子的语法结构;  语法分析 分析句子的含义;  语义分析 进行初步翻译;  中间代码生成 对译文进行修饰;  中间代码优化 写出最后的译文。  目标代码生成
  • 12. 编译程序的逻辑结构词法分析程序语法分析程序语义分析程序中间代码生成代码优化程序目标代码生成信 息 表 管 理 程 序错 误 检 查 程 序源程序 单词符号中间代码中间代码中间代码语法单位目标代码
  • 13. 功能:从左到右读入源程序的每个字符,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(逻辑上紧密相连的一组字符,具有集体含义。如:标识符、保留字(关键字)、算符、界符等)。 例. 某源程序片断如下: begin var sum , first , count : real ; sum := first + count * 10 end.保留字 begin 保留字 var 标识符 sum 逗号 , 标识符 first 逗号 , 标识符 count 冒号 : 保留字 real 分号 ; 标识符 sum 赋值号 := 标识符 first 加号 + 标识符 count 乘号 * 整数 10 保留字 end 界符 .2、词法分析
  • 14. 3、语法分析功能:在词法分析的基础上,将单词序列分解成各类语法短语(也叫语法单位,可用语法树来表示),如“程序”、“语句”、“表达式”等。 依据:语言的语法规则(一般通过递归来定义)。 目的:通过语法分析确定整个输入串是否构成一个语法上正确的程序。
  • 15. 语法短语可用语法树表示: 如:sum := first + count * 10 内部形式:id1:=id2+id3*10 的语法树赋值语句标识符表达式表达式+表达式表达式标识符整数标识符:=表达式*id1 sumid2 firstid3 count10:=id1+id2*id310简化形式
  • 16. 语法规则的递归表示 如:表达式的表示 任何标识符是表达式。 任何常数(整常数、实常数)是表达式。 若表达式1和表达式2都是表达式,那么 表达式1+表达式2,表达式1*表达式2 (表达式1)都是表达式。 如:语句的表示 标识符:=表达式 是语句。 while (表达式) do 语句是语句 if (表达式) then 语句 else 语句是语句。 结合上述语法规则理解语法短语即语句: sum := first + count * 10 的语法树的构成。
  • 17. 4、语义分析功能:审查源程序是否有语义错误,为代码生成阶段收集类型信息。如:类型检查。:=id1+id2*id310inttoreal语句:sum := first + count * 10 内部形式:id1:=id2+id3*10
  • 18. 5、中间代码生成功能:将源语言转换为编译系统内部表示方式,中间语言,即中间代码(一种结构简单、含义明确的记号系统。) 中间代码设计原则: 容易生成; 容易将它翻译成目标代码。 四元式: (运算符,运算对象1,运算对象2,结果)
  • 19. 如:源程序 sum := first + count * 10 内部形式:id1:=id2+id3*10 生成的四元式可以是: ( inttoreal 10 - t1 ) ( * id3 t1 t2 ) ( + id2 t2 t3 ) ( := t3 - id1):=id1+id2*id310inttoreal
  • 20. 6、代码优化( inttoreal 10 - t1 ) ( * id3 t1 t2 ) ( + id2 t2 t3 ) ( := t3 - id1)( * id3 10.0 t2 ) ( + id2 t2 id1 )( * id3 10.0 t1 ) ( + id2 t1 id1 )功能:对中间代码进行变换或改造,使生成的目标代码更高效。(省时间与空间)
  • 21. 7、目标代码生成程序任务 把中间代码(或经过优化处理之后)变换成特定机器上的低级语言代码(汇编语言或机器语言)。说明:它依赖于具体的计算机的硬件系统结构和指令系统。 要求 对于所用的翻译策略或算法要做到: 一是使所生成的目标代码尽可能短; 二是充分利用计算机可用资源的效率。
  • 22. 绝对地址的机器指令代码 这种代码可以立即执行。 汇编语言形式的目标程序 这种代码还需要汇编程序汇编之后才能运行。 模块结构的机器指令(可重定位的指令代码) 这种代码在运行前必须借助于一个连接装配程序把各个目标模块连接在一起,装入内存中,使之成为一个可以运行的绝对地址的机器指令代码程序。目标代码的形式
  • 23. 错误的种类: 语法错误 语法错误是指源程序中有不符合语法(或词法)规则的错误,它们可在词法分析或语法分析时检测出来。 语义错误 语义错误是指源程序中不符合语义规则的错误,这些错误一般在语义分析时检测出来,有的要在运行时才能检测出来。 8、错误检查和处理程序
  • 24. 1.最重要的是符号表 2.信息表的结构9、信息表管理程序名 字信息……
  • 25. ( * id3 10.0 t1 ) ( + id2 t1 id1 )sum := first + count * 10MOVF id3, R2 MULF #10.0, R2 MOVF id2, R1 ADDF R1, R2 MOV R1, id1目标代码(汇编指令代码)内部形式:id1:=id2+id3*10 ( inttoreal 10 - t1 ) ( * id3 t1 t2 ) ( + id2 t2 t3 ) ( := t3 - id1)代码优化中间代码词法,语法及语义分析
  • 26. 有关名词:(了解——自己看) 前端(front end):主要依赖于源语言而与目标机器无关的编译阶段。如:词法分析、语法分析、语义分析、中间代码生成、部分优化工作、与前端有关的出错处理工作和符号表管理工作。 后端(back end):依赖于目标机而一般不依赖于源语言,只与中间代码有关的编译阶段。如:目标代码生成,以及相关出错处理和符号表操作。 遍(趟):对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。每一遍扫视可完成上述一个阶段或多个阶段的工作。1. 4 编译阶段的组合
  • 27. 1. 5 编译程序的生成1、编译程序的设计目标 目标程序小,执行速度快。 编译程序小,执行速度快。 诊断能力强,可靠性强。 可移植性,可扩充性。
  • 28. 2、编译器的生成 合理的方法是用另一种语言来编写编译器,而使用该种语言的编译器早已存在了。用语言B编译语言A的编译器语言A正运行的编译器语言B已存在 的编译器
  • 29. (1) LEX: 自动产生词法分析器3.编译程序生成工具词法规则说明LEX词法分析程序(C /C++程序)输入: 词法(正规表达式) 识别动作(C程序段) 输出: yylex( ) 函数
  • 30. 语法规则说明YACC语法分析程序 (C /C++程序)输入: 语法规则(产生式) 语义动作(C/C++程序段) 输出: yyparse( ) 函数(2) YACC: 自动产生语法分析器
  • 31. 1.源语言 对被编译的语言要深刻理解其结构(语法)和含义(语义) 。 2.目标语言 假定目标语言是机器语言,那么,就必须搞清楚硬件的系统结构和操作系统的功能。 3.编译方法 把一种语言程序翻译为另一种语言程序的方法很多,但必须准确地掌握一二。4、构造一个编译程序必须掌握的内容
  • 32. 语言的结构化编辑器 语言程序的调试工具 语言程序测试工具 高级语言之间的转换工具 并行编译技术 (了解——自己看)1. 6 编译技术和软件工具