编译原理整理
- 格式:docx
- 大小:17.81 KB
- 文档页数:2
第一章 引论• 为什么要用编译器 • 与编译器相关的程序 • 翻译步骤• 编译器中的主要数据结构1、语言处理器 1、简单的说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。
2、编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误。
3、使用编译器是为了提高编程的速度和准确度。
4、与编译器相关的程序:解释程序(interpreter )、汇编程序(assembler )、连接程序(linker )、装入程序(loader )、预处理器(preprocessor )、编辑器(editor )、调试程序(debugger )、描述器(profiler )、项目管理程序(project manager )。
5、解释器是另一种常见的语言处理器。
它并不通过翻译的方法生成目标程序。
从用户的角度来看,解释器直接利用用户提供的输入执行源程序中指定的操作。
6、一个源程序可能被分割成多个模块,并存放于独立的文件中。
把源程序聚合在一起的任务有时会由一个被称为预处理器(preprocessor )的程序独立完成。
预处理器还负责把那些称为宏的缩写形式转换为源语言的语句。
7、连接器(linker )能够解决外部内存地址的问题。
8、加载器(loader )把所有的可执行目标文件放到内存中执行。
2、一个编译器的结构OutputSourceProgramFront endBack endObject1、将编译器看成黑盒,则源程序映射为在语义上等价的目标程序,而这个映射由两部分组成:分析部分和综合部分。
2、分析部分把源程序分解成多个组成要素,并在这些要素之上加上语法结构。
3、综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序。
4、编译器的第一个步骤:词法分析(lexical)或扫描(scanning)。
词法分析器读入组成源程序的字符流,并且将它们组成有意义的词素(lexeme)的序列。
第1章:1、名词:解释器/解释程序 interpreter;编译器/编译程序 compiler;翻译器/翻译程序translator。
三者的区别与联系。
虚拟机(如JAVA虚拟机JVM、Tiny语言虚拟机)是哪种程序?(1)解释器(也称为解析程序)则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.(2)编译器(也称为编译程序)是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;(3)翻译器(也称为翻译程序)是一种系统程序,它将计算机编程语言编写的程序翻译成另外一种计算机语言的一般来说等价的程序,主要包括编译程序和解释程序,汇编程序也被认为是翻译程序。
程序的最初形式称为源程序或者源代码,翻译后的形式被称为目标程序或者目标代码。
大多数翻译程序是将高级语言编写的程序翻译为机器语言形式的可执行程序。
但是也有些翻译程序将源程序翻译成其他高级语言或者字节码等中间形式。
(4)解释器翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立的目标程序。
解释器是另外种形式的语言处理器,它相当于不生成上面的目标程序,直接将输入“放到”源程序中,然后经过解释器,就得到了输出。
通常情况下,编译过程比解释过程更快,但解释器能够有更好的错误诊断,因为解释器是逐句进行解释的。
编.0译器和解释器可以结合起来进行处理,Java语言处理器就是其中的代表,其过程是源程序经过翻译器处理后得到中间程序,也被称作字节码(bytecode),然后和输入共同加入到虚拟机(virtual machine)的前端,得到输出,其前一部分用到编译器,后一部分用到解释器,这样做的好处是一个机器解释的代码可以应用在另外的机器上,甚至可以延伸到网络上。
2、编译过程图示 P5 图1-1第3章:1、Chomsky语言文法分类,程序语言的语法是哪一类,词法是哪一类,其产生式有什么特点。
编译原理的复习提纲1.编译原理=形式语言+编译技术2.汇编程序:把汇编语言程序翻译成等价的机器语言程序3.编译程序:把高级语言程序翻译成等价的低级语言程序4.解释执行方式:解释程序,逐个语句地模拟执行翻译执行方式:翻译程序,把程序设计语言程序翻译成等价的目标程序5.计算机程序的编译过程类似,一般分为五个阶段:词法分析、语法分析、语义分析及中间代码生成、代码优化、目标代码生成词法分析的任务:扫描源程序的字符串,识别出的最小的语法单位(标识符或无正负号数等)语法分析是:在词法分析的基础上的,语法分析不考虑语义。
语法分析读入词法分析程序识别出的符号,根据给定的语法规则,识别出各个语法结构。
语义分析的任务是检查程序语义的正确性,解释程序结构的含义,语义分析包括检查变量是否有定义,变量在使用前是否具有值,数值是否溢出等。
语法分析完成之后,编译程序通常就依据语言的语义规则,利用语法制导技术把源程序翻译成某种中间代码。
所谓中间代码是一种定义明确、便于处理、独立于计算机硬件的记号系统,可以认为是一种抽象机的程序代码优化的主要任务是对前一阶段产生的中间代码进行等价变换,以便产生速度快、空间小的目标代码编译的最后一个阶段是目标代码生成,其主要任务是把中间代码翻译成特定的机器指令或汇编程序编译程序结构包括五个基本功能模块和两个辅助模块6.编译划分成前端和后端。
编译前端的工作包括词法分析、语法分析、语义分析。
编译前端只依赖于源程序,独立于目标计算机。
前端进行分析编译后端的工作主要是目标代码的生成和优化后端进行综合。
独立于源程序,完全依赖于目标机器和中间代码。
把编译程序分为前端和后端的优点是:可以优化配置不同的编译程序组合,实现编译重用,保持语言与机器的独立性。
7.汇编器把汇编语言代码翻译成一个特定的机器指令序列第二章1.符号,字母表,符号串,符号串的长度计算P18,子符号串的含义,符号串的简单运算XY,X n,2.符号串集合的概念,符号串集合的乘积运算,方幂运算,闭包与正闭包的概念P19,P20 A0 ={ε}3.重写规则,简称规则。
《编译原理》知识点总结目录第一章引论第二章高级语言及其语法描述第三章语法分析——自上而下分析第四章属性文法和语法制导翻译第五章语义分析和中间代码产生第六章优化第一章引论一.编译程序(compiler):把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序二.编译程序的工作的五个阶段:词法分析、语法分析、中间代码产生、优化、目标代码产生1.词法分析任务: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。
依循的原则:构词规则描述工具:有限自动机FOR I := 1 TO 100 DO保留字标识符等符整常数保留字整常数保留字2.语法分析任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。
依循的原则:语法规则述工具:上下文无关文法3.语义分析与中间代码产生任务:对各类不同语法范畴按语言的语义进行初步翻译。
(变量是否定义、类型是否正确等)依循的原则:语义规则中间代码:三元式,四元式,逆波兰记号,树形结构等。
是一种独立于具体硬件的记号系统。
例:将Z:=X + 0.618 * Y 翻译成四元式为(1) * 0.618 Y T1(2) + X T1 T2(3) := T2 _ Z4. 优化任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。
依循的原则:程序的等价变换规则FOR K:=1 TO 100 DOBEGINM := I + 10 * K;N := J + 10 * K;END4.目标代码产生任务: 把中间代码变换成特定机器上的目标代码。
依赖于硬件系统结构和机器指令的含义目标代码三种形式:a)绝对指令代码: 可直接运行b)可重新定位指令代码: 需要连接装配c)汇编指令代码: 需要进行汇编第二章高级语言及其语法描述2.1.1语法词法规则:单词符号的形成规则。
a)单词符号是语言中具有独立意义的最基本结构。
可编辑修改精选全文完整版1什么事编译程序?:什么是解解释程序?它们的区别?编译程序就是指这样的一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序。
解释程序也是一种翻译程序,它将原程序作为输入,一条语句一条语句地读入并解释执行。
区别:编译程序将源程序翻译成目标程序后在执行该目标程序:解释程序则逐条读出源程序中的语句并解释执行。
2什么是扫描器?:扫描器就是词法分析器,他接受输入的源程序,队源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。
通常把此法分析器作为一个子程序,每当词法分析器需要一个单词符号时就调用这个子程序。
每次调用时,词法分析器就从输入串中识别出一个单词符号交给语法分析器。
3.正规表达是到上下无关文法的转换方法是什么?:正规表达式所描述的语言结构均可以用上下文无关文法描述,反之则不一定。
方法如下:1.构造正规表达式的NFA;2.若0为初始状态,则A为开始符号;3.如果存在映射关系f(i,a)=J,则定义产生式Ai→aAj 4. 如果存在映射关系f(i,ξ)=J,则定义产生式Ai→Aj。
5.若1为终态,,则定义产生式Ai→ξ。
4.什么是语法树?:对文法G[s]:(Vt,Vn,S, )满足下列条件的树称为G[s]的语法树。
(1)每个结点用G[s]的一个终结符或非终结符标记。
(2)根据点用文法开始符S标记。
(3)内部结点一定是非终结符,如果某内部结点A有n个分支,它的所有子结点从左至右依次标记为X1,X2,X3……. Xn,则A→X1,X2,X3……. Xn一定是文法G[s]的一条产生式。
(4)如果某节点标记为ξ,则它必为叶结点是父结点的唯一子结点。
5.自下而上分析原理是什么?:自下而上是就是自左至右扫描输入串,自下而上进行分析:通过反复查找当前句型的句柄(最左直接短语),并使用产生式规则将找到的句柄归约为相应的非终结符。
编译原理中重点整理1.翻译程序:将某一种语言(源语言)程序转换为与其逻辑上等价的另一种语言(目标语言)程序。
编译程序:源语言为高级语言,目标语言为汇编语言或机器语言的翻译程序。
汇编程序:源语言为汇编语言,目标语言为机器语言的翻译程序。
解释程序:源语言程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。
2.解释器与编译器的主要区别在于:运行目标程序时的控制权在解释器而不在目标程序。
3.编译程序的工作过程可划分五个阶段:①词法分析:从左到右一个字符一个字符的读入源程序,对构成源程序的字符串进行扫描和分解,从而识别出一个个单词(也称单词符号或简称符号)②语法分析:在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等③语义分析和中间代码生成:语义分析是在语法分析程序确定出语法短语后,审查有无语义错误,并为代码生成阶段收集类型信息。
完成语法分析和语义处理工作后,编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或称中间代码,它是一种结构简单、含义明确的记号系统。
④代码优化:为了使生成的目标代码更为高效,可以对产生的中间代码进行变换或进行改造,这就是代码的优化。
⑤目标代码生成:目标代码生成阶段的任务就是是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
4.前端(Front-End)——与目标机无关的部分后端(Back-End )——与目标机有关的部分5.编译系统:编译程序与运行系统合称编译系统6.遍:对源程序或源程序的中间结果从头到尾扫描一次,并做有关的加工处理,生成新的中间结果或目标程序。
7.文法是一个四元组:G[S]=(VN, VT, P, S)VN:非终结符集合;VT :终结符集合;P :产生式集合(α→β或α∷=β);S :开始符号(或称根符号,识别符号)。
若S ->α,α∈V*,则称α为文法G的句型若S ->α,α,α∈VT*,则称α为文法G的句子语言是所有句子构成的集合,它是所有终结符号串所组成的集合VT*的子集,即L(G) VT* 8.0型文法又叫短语文法,它所确定的语言称为0型语言。
编译原理编译原理编译器是什么?知识树基本过程词法分析语言正则语言正则定义如何让计算机识别用正则表达式定义的语言NFA 非确定有限自动机DFA 确定有限自动机正则表达式转 NFA直接用 NFA 识别语言直接从正则表达式转 DFA最小化 DFA 的算法语法分析语法的形式化:上下文无关文法推导推导 derivation字符串符号文法语法分析树文法的二义性文法二义性的消除消除左递归消除直接的左递归消除间接的左递归计算 first() 集合计算 follow(A) 集合LL(1) 文法的分析表自底向上的文法分析SLR 文法LR(0) 项扩充文法自动机的过程Closure of Item SetsSLR 分析表的构建(重点)LR(1) 文法构造 LR(1) 分析表缺点LALR 文法语法制导定义基本思想举例语法制导定义继承属性翻译模式再次举例:中缀转后缀扩展文法扩展语法树通过自顶向下的分析来实现先序遍历实现先序遍历Evaluation Order and Dependency Graphs 显式的语法分析树S-属性制导定义L-属性制导定义需要满足三条规则:语义分析和中间代码生成Introduction3 地址代码1. 类型和声明举例来说明翻译过程2. 赋值和表达式类型检查3. 布尔表达式和流控制流控制的语法制导定义布尔表达式的语法制导定义运行时环境内存管理stack 和活动记录活动树活动记录(帧)进程内通信堆管理多线程垃圾回收代码生成指令选择寄存器分配和赋值指令调度抽象目标状态机指令集基本块流图生存期和后续使用信息简单代码生成器代码优化窥孔优化局部优化控制流分析和循环优化消除共同子表达式✔编译器是什么?编译器是一个程序,主要是用来把源程序转换成另外一种计算机语言的程序。
语言编译的全过程:✔知识树编译原理正则语言识别 T oken上下文无关文法CFG 构建语法分析树语法制导翻译生成中间代码代码优化代码生成编译原理是一种语言处理器,它完成了很多工作。
复习汇总一、第一章概述1.文法与自动机的等价1)0型文法—图灵机2)1型文法—线性有界非确定图灵机3)2型文法—非确定下推自动机4)3型文法—有限状态自动机2.编译技术的应用1)语法制导的结构化编辑器2)程序格式化工具3)软件测试工具4)程序理解工具5)高级语言的翻译工具6)等等3.从面向机器的语言到面向人类的语言(结合第二章第9小点理解)1)面向机器的语言:机器指令,汇编语言2)面向人类的语言:通用程序设计语言,数据查询语言,形式化描述语言(正规式,产生式)等等。
4.各语言的分类(结合第二章第9小点理解)1)过程式语言,面向对象语言:通用程序设计语言。
2)函数语言:面向特点领域的,递归特性。
例如LISP语言3)说明性,非算法式语言:LEX/YACC,SQL。
4)脚本式语言:Shell语言5.语言之间的转换(李静PPT41)1)高级语言之间的转换一般称为预处理或转换。
2)高级语言翻译成汇编语言或机器语言称之为编译。
3)把汇编语言翻译成机器语言称之为汇编。
4)将一个汇编语言程序汇编为可在另一台机器上运行的机器指令称之为交叉汇编。
5)把机器语言翻译成汇编语言称之为反汇编。
6)把汇编语言翻译成高级语言称之为反编译。
6.编译器和解释器1)编译器●源程序的翻译和翻译后的程序的运行是两个不同的阶段。
◆编译阶段:用户输入源程序,经过编译器的处理,生成目标程序。
◆目标程序的运行阶段:根据要求输入数据,得出结果。
2)解释器(凡是可以采用编译器的地方均可以采用解释器)●解释器把翻译和运行结合到一起,编译一段源程序,紧接着就执行它。
这种方式称为解释。
7.解释器的优点(对比与编译器)1)具有较好的动态特性。
2)具有较好的移植特性。
8.解释器的缺点(对比于编译器)1)相比于编译器需花费大量的时间。
2)占用更多的内存空间。
9.编译器的工作阶段(结合第二章6小点红色部分理解)1)源程序->词法分析器->语法分析器->语义分析器->中间代码生成器->代码优化器->目标代码生成器->目标代码2)工作过程中的每个阶段均采用了符号表管理器,出错处理器。
1编译程序:从高级语言到汇编语言或机器语言的翻译程序2.源程序:用汇编语言或高级语言编写的程序3. 目标程序:用目标语言所表示的程序。
目标语言:介于源语言和机器语言之间的“中间语言”,也可以是某种机器的机器语言,也可以是某机器的汇编语言。
4 翻译程序:将源程序转换为目标程序的程序称为翻译程序。
5 赋值语句的语法规则:A::=V=EE::=T|E+TT::=F|T*FF::=V|(E)|CV::=标识符C::=常数6 遍:对源程序(包括源程序中间形式)从头到尾扫描一次,并做有关的加工处理,生成新的源程序中间形式或目标程序,通常称之为一遍。
优点:节省内存空间,提高目标代码质量,逻辑机构清晰缺点:编译时间较长,会增加输入输出所消耗的时间,在内存许可下少用为妙7前端:通常将与源程序有关的编译部分称为前端。
包括词法分析,语法分析,语义分析,等分析部分后端:与目标机有关的部分称为后端。
包括中间代码生成,代码优化,目标程序生成等综合部分8编译程序构成部分以及功能:(1)词法分析(扫描器):输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词及其有关属性,并转换成属性字。
(2)语法分析(分析器):在词法分析的基础上,根据语言的语法规则,逐一分析词法分析时得到的属性字,检查语法错误,若没有错误,则给出正确的语法结构(如短语、子句、句子、程序段、程序等)。
(3)语义分析(语义处理):语法分析识别出的各类语法范畴,分析其含义,进行和初步翻译,产生介于源代码和目标代码之间的一种代码“中间代码”。
或者直接生成目标代码。
(4)优化:依据程序的等价变换规则,尽量压缩目标程序运行时所需的时间和所占的存储空间,以提高目标程序的质量(5)目标代码生成:把经过优化的中间代码转化成特定机器上的低级语言代码。
9计算机执行用高级语言编写的程序途径有两种:解释方式和编译方式。
根本区别:是否生成了目标代码。
解释方式下,翻译程序事先并不对高级语言程序进行彻底翻译以得到机器代码,而是读入一条语句,就解释其含义并执行,然后再读入下一条语句,再解释执行,即按,源程序中语句的动态顺序逐句地进行分析解释,并立即予以执行。
1. 软件工程是用科学知识和技术原理来定义、开发、维护软件的一门学科。
2. 软件生命周期模型是描述软件开发过程中各种活动如何执行的模型。
3. 进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资开发。
4. 要开发的项目是否存在任何侵犯、妨碍等责任问题,要开发项目目的运行方式在用户组
织内是否行得通,现有管理制度、人员素质、操作方式是否可行。
5. 投资回收期就是使累计的经济效益等于最初的投资费用所需的时间。
6. 输入数据与输出数据结构找不到对应关系的情况,称为结构冲突。
7. 把程序划分成独立运行且可以独立访问的模块,每个模块完成一个子功能,把这些模块
集成起来构成一个整体,可以完成指定的功能满足用户的需求。
8. 描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。
9. 白盒测试又叫做结构测试,把程序看成装在一个透明的白盒子里,按照程序内部的逻辑
测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。
10. 耦合是对一个软件结构内各个模块之间互连程度的度量。
11. 内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。
12. 系统流程图是描述物理模型的传统工具,用图形符号表示系统中各个元素表达了系统中各种元素之间的信息流动)情况。
13. 独立路径是指包括一组以前没有处理的语句或条件的一条路径。
从程序图来看,一条独立路径是至少包含有一条在其他独立路径中未有过的边的路径。
14. 喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
15. 变换模型是一种适合于形式化开发方法的模型,从软件需求形式化说明开始经过一系列变换,最终得到系统的目标程序。
此模型必须有严格的数学理论和形式化技术的支持,尚处于研究和实验阶段。
1. 请简要说明可行性分析的内容。
1. 技术可行性:技术分析说明使用现有系统是否能完成本系统的开发。
经济可行性:经济分析应着重两个因素“成本和收益”,应向管理层提供有关这两方面
足够的信息。
如果项目的收益大于成本,则此项目可以说是经济上可行。
操作可行性:系统的操作方式是否能够在组织内得到认同,是否违背有关法律、制度、道德、文化等因素。
. 1. 螺旋模型:螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。
理解这种
模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型
瀑布模型:瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
增量模型又称演化模型。
在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。
1. 数据字典,主要用来描述数据流程图中的数据流、数据存储、处理过程和和数据源点/终点。
作用:数据流程图描述了系统的逻辑结构,其中的四个基本图形元素的含义无法在数据流程图中详细说明,因此数据流程图需要与其他工具配合使用,数据字典就是这样的工具之一。
包括的条目:数据流词条、数据元素词条、数据存储词条、数据加工处理词条、数据源点及终点词条。
3. 3. 可行性研究首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制。
把它们清楚地列举出来。
然后分析员进行简单的需求分析,经过压缩的设计,探索出若干种可提供选择的主要解决办法。
对每种解决办法都要研究它的可行性。
主要从经济可行性、技术可行性和社会可行性三方面进行研究。