编译原理--第一章
- 格式:ppt
- 大小:3.09 MB
- 文档页数:33
编译原理第⼀章学习笔记第1章编译程序的基本概念1.1什么是编译程序java中反编译命令:javap汇编语⾔本质上是⼀种助记符编译程序和解释程序两⼤不同:编译程序有⽬标程序⽽解释程序没有⽐如在C语⾔中,.exe就是⽬标程序前者效率⾼⽽后者交互性好1.2 编译程序的逻辑结构编译程序分为五个阶段词法分析结果是⼀个token序列语义分析结果是⼀个语义树语法分析结果是⼀个语法树/中间代码中间代码形式与源语⾔和⽬标语⾔没有关系——————————————————以此为界,上⾯是前端,下⾯是后端优化处理⽬标代码⽣成在编译过程中,编译程序不断地和符号表管理程序和错误处理程序打交道1.3编译程序的实现机制遍:编译程序对源程序或等价程序扫描的遍数在整个编译过程中,看似扫描了五遍,其实只有两遍,分别是对前端和后端进⾏的扫描即第⼀遍:词法分析、语法分析、语义分析。
第⼆遍:代码优化和中间代码⽣成每遍中的各阶段的⼯作是穿插进⾏的,例如下图:其中,语法分析器处于核⼼地位,每当语法分析器需要⼀个完整的语法单位时,便向词法分析器请求⼀个Token。
当接收到所需要的token之后,便调⽤语义分析器⽣成中间代码。
1.4 编译程序的⽣成⽅法涉及三个语⾔:源语⾔、⽬标语⾔和编译程序的实现语⾔编译程序的⽣成⽅法:⽤:利⽤已有的编译器写:⾃⼰动⼿写⼀个半⽤半写:重写现有编译器的后端⾃动⽣成编译程序:词法分析程序⽣成器LEX语法分析程序⽣成器YACC编译程序⽣成器输⼊:词法规则、语法规则和语义解释1.5 编译过程实例分析对如下C语⾔程序进⾏编译:int a,b;b = a + 2*5;1.词法分析:识别单词并分类词法分析的结果是以token的形式传给语法分析2.语法分析:组词成句并进⾏语法错误检查⽣成结果是⼀棵语法树分⽀语句由变量和表达式组成:变量赋值语句(expression)赋值语句可以分成项(item)/项之间的加减项可以分成因式(factor)/因式的乘除因式则可以是具体的常数/变量3.语义分析:分析各种语法成分语义分析需要构建两个东西——标识符的语义辞典(符号表)&语句的语义树(中间语⾔)符号表分为:名字类型,⽐如整型int种类,⽐如变量,常量,函数的名字等等,这⾥是值value地址,是⼀个指针接下来是语义树,和语法树很类似,但是是完全不同的,前者是描述语义信息,⽽后者描述的确实构成。
第一章编译程序概述目录1.1 什么是编译程序1.2 编译过程概述1.3 编译程序的结构1.4 编译阶段的组合1.5 编译技术和软件工具1.1 什么是编译程序编译程序:是一个语言翻译程序,是将用高级语言书写的源程序翻译成等价的低级语言的翻译程序。
(C ,Pascal,Foxbase 等) (机器语言,汇编语言) 翻译程序:是把一种语言书写的程序(源程序)翻译成另一种语言(目标语言)的等价的程序。
编译程序的重要性:使得计算机用户不必考虑与机器有关的繁琐细节,使程序员和程序设计专家独立于机器。
编译程序的发展■第一个编译程序的出现:20世纪50年代早期,主要将算术公式翻译成机器代码■20世纪50年代中期,一批编译系统程序开发成功■20世纪50年代末,开始研究编译程序的自动生成工具(LEX 、Y ACC )■20世纪60年代,研究使用自展技术,1971年PASCAL 自展技术成功后,影响越来越大。
1.2 编译过程概述一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序从一种表示形式转换成另一种表示形式。
典型的划分方法:(下图)词法分析阶段:编译过程的第一个阶段从而识别出一个个单词。
(逻辑上紧密相连的一组字符,这些字符具有集体含义。
)单词:标识符,保留字,常数、算符,界符等语法分析:编译过程的第二个阶段依据语言的语法规则从单词符号串中识别出各种语法单位(如“程”,“语句”,“表达式”等)。
目的:检查各种语法单位在语法结构上的正确性。
例子中:符合赋值语句的语法规则,即:<变量>=<表达式>例:s=2*3.1416*r*(h+r)规则<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=“(”<表达式>“)”<表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数> ■词法分析和语法分析本质上都是对源程序的结构进行分析。
第一章习题解答2.编译程序有哪些主要构成成分?各自的主要功能是什么?编译程序的主要构成成分有:词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、表格管理程序及出错处理程序。
(1)词法分析程序:从左到右扫描源程序,识别单词及其有关属性;(2)语法分析程序:分析源程序的结构, 判别它是否为相应程序设计语言中的一个合法程序;(3)语义分析程序:审查源程序有无语义错误,为代码生成阶段收集类型信息;(4)中间代码生成程序:将源程序变成一种内部表示形式;(5)代码优化程序:对前阶段产生的中间代码进行变换或进行改造,使生成的目标代码更为高效;(6)目标代码生成程序:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码;(7)表格管理程序:保存编译过程中的各种信息;(8)出错处理程序:若编译过程中发现源程序存在错误,则报告错误的性质和错误发生的地点,有些还可以自动校正错误。
3.什么是解释程序?它与编译程序的主要不同是什么?解释程序接受某个语言的程序并立即运行这个源程序。
它的工作模式是一个个的获取、分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果,它特别适合程序员交互方式的工作情况。
而编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器的汇编或二进制代码程序,这个二进制代码程序再机器上运行以生成结果。
它们的主要不同在于:解释程序是边解释边执行,解释程序运行结束即可得到该程序的运行结果,而编译程序只是把源程序翻译成汇编或者二进制程序,这个程序再执行才能得到程序的运行结果。
(当然还有其他不同,比如存储组织方式不同)THANKS !!!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考。