编译原理期末考试复习

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第一章:1.编译程序的步骤和任务:1)词法分析:从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。2)语法分析:是在词法分析基础上将单词序列分解成各类语法短语(比如程序、语句、表达式等),通过语法分析确定整个输入串是否构成一个语法上正确的程序。3)语义分析:是审查源程序有无语义错误,为代码生成阶段收集类型信息。4)中间代码产生:将源程序变成一种易于翻译成目标代码的内部表示形式。5)代码优化:对前阶段生成的中间代码进行变换或改造,使生成的目标代码更为高效6)目标代码生成:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。2.前端和后端的概念,试问前端通常包括那些阶段,后端包括那些阶段?答:前端只依赖于源语言,与目标机无关。编译程序的前端通常包括词法分析程序、语法分析程序、语义分析程序、中间代码生成程序及相关的表格管理程序和出错处理程序。后端是指编译器中依赖于目标机器的部分,只与中间代码有关。通常包括目标代码生成程序、代码优化程序以及相关的表格管理程序和出错处理程序。遍(PASS):对输入文件(源程序或其等价的中间语言程序)从头到尾扫视,完成预定处理的过程。一个多遍的编译程序较之一遍的编译程序可能少占内存,逻辑结构可能清晰些,但效率相对可能差点3.程序的正确与否:结构上的语法规则,语义上的语义规则。翻译程序:汇编,解释,编译。4.解释程序及其与编译程序的比较解释程序功能:源程序+初始数据=计算结果解释与编译的区别:工作模式:这是根本区别,编译把源程序翻译成目标代码,而解释直接得到计算结果,不生成目标代码。存储区内容:编译方式翻译和执行分开,解释方式翻译和执行同时并允许修改源程序,因此二者存储组织不同。效率:解释慢于编译,很多语言两种方式都有。标识符:=表达式第三章:文法和语言1.文法的直观概念:一组判定规则。在实践中,文法不包含多余产生式。2.文法G定义为四元组(VT,VN,S,P),其中:VT是一个非空有穷终结符号集合;VN是一个非空有穷的非终结符号集合,且VT∩VN=Φ;P是一个产生式的非空有穷集合(注意:产生式左部至少含有一个非终结符);SVN,称为开始符号,且S至少必须在某个产生式的左部出现一次。通常用V表示VN∪VT,V称为文法G的字母表或字汇表.3.句型、句子:设文法G,如果符号串x是从识别符号推导出来的,即S→x,x∈V*,则称x是一个句型。仅含终结符号的句型是一个句子。4.语语言言::语言L(G)是由文法G产生的所有句子所组成的集合。5文法的类型:逐渐对产生式施加限制四种类型:0型,1型,2型,3型0型:G=(VT,VN,S,P),规则形式:,(VTVN)*,中至少有一个非终结符1型(上下文有关):,仅S-除外规则形式:AAVN,,,(VTVN)*,2型(上下文无关):规则形式:AAVN,(VTVN)*3型正规文法(右线性):AaB或AaA,BVN(左线性)ABa或AaaVT{}6.最左(最右)推导在推导的任何一步αβ,其中α、β是句型,都是对α中的最左(右)非终结符进行替换规范推导:即最右推导。规范句型:由规范推导所得的句型。7.文法的二义性如果一个文法存在某个句子对应两棵不同的语法树,或者说,若一个文法中存在某个句子,它有两个不同的最左(最右)推导,则说这个文法是二义的.如果产生上下文无关语言的每一个文法都是二义的,则说此语言是先天二义的。8.自上而下的分析方法:自上而下分析法,是从文法开始符号出发,反复使用各种产生式,逐步进行推导,直至推导出输入符号串。过程:自上而下方法是从文法识别符号开始,将它作为语法树的根,向下逐步建立语法树,使语法树的末端结点符号串正好是输入符号串。关键问题:假定要被代换的最左非终结符号是A,且有n条产生式:Aa1|a2|…|an,那么如何确定用哪个产生式右部去替代A?9.自下而上的分析方法:自下而上分析法,是从输入符号串开始,逐步进行归约,直至归约到文法的开始符号。过程:自下而上方法是从输入符号串开始,以它作为语法树的末端结点,自底向上地构造语法树,使语法树的根结点正好是文法的开始符号。关键问题:因为分析工作的每一步都是从当前串中选择一个子串,将它归约到某个非终结符,暂且把这个子串称为可归约串,问题是,每一步如何确定这个可归约串?10.短语:若S*αAδ且A+β,则称β是句型αβδ相对于非终结符A的短语。直接短语:若S*αAδ且Aβ,则称β是句型αβδ相对于非终结符A的直接短语。句柄:一个句型的最左直接短语。(产生式的右部)11.子树:一棵语法树中一个特有的结点连同它的全部后裔,连接这些后裔的边以及这些结点的标记,称为子树。子树与短语的关系(1)短语:子树的末端结点(即树叶)组成的符号串;(2)直接短语:简单子树的末端结点组成的符号串;(3)句柄:最左简单子树的末端结点组成的符号串;左图所示的关于句型E+E*i的语法树来说:它有3棵子树,即3个短语分别为i、E*i和E+E*i;直接短语、句柄均为i。从语法树中可以看出,所有树叶的组合就是其相对应的父结点的短语。34251X6abababab2Y句型i+i*i的语法树有5棵子树,短语和直接短语如下:直接短语:i1,i2,i3短语:i1,i2,i3,i1*i2,i1*i2+i3句柄:i1注意:i2+i3不是短语不是某棵子树的结果12.有关文法的实用限制:有害规则是指形为U-U的产生式。会引起文法二义性。多余规则是指文法中那些任何句子推导都用不到的规则,包括两种规则,即不可到达的和不可终止的。不可达到的:不在文法的任何规则右部出现的非终结符。不可终止的:文法中那些不能从其推出终结符号串的非终结符。第四章:词法分析1.任务:从左至右逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析2、接口方式:(1)词法分析工作可以组织成独立的一遍,把字符流的源程序变为单词序列,输出在一个中间文件上,这个文件作为语法分析程序的输入而继续编译过程。(2)将词法分析程序设计成一个子程序,当语法分析程序需要一个单词时,则调用该子程序,从源程序中读入一些字符,直到识别出一个单词,或说直到下一个单词的第一个字符为止,这种设计方案是把词法分析和语法分析程序放在同一遍,省掉了中间文件。单词符号的输出形式:二元组:(单词种别,单词自身的值)单词符号的分类:关键字,标识符,常数,运算符,界符等(这种分类不是唯一的)3.正规文法与正规式的转换(若两个正规式x和y所表示的正规集相同,则说x和y等价,写作x=y。)4.NFA转换为DFA:DFA的表示(1)用转换函数;(2)状态转换矩阵;(3)状态转换图NFA与DFA的主要区别:允许有多个初始状态。允许状态在其输出边上有相同的符号(多值映射)。允许输出边上有空串符号。NFA特点:在给定状态和符号的情况下,不能唯一的确定下一个状态。NFA的确定化基本方法基本方法:边合并,符号合并(NFA转化成的DFA不是唯一的)【例】NFAM如右图所示,试将其确定化为DFAM'。【解答】(1)用子集法将图所示的NFAM确定化为表1。(2)对表1中的所有子集重新命名得到表2的状态转换矩阵ε_closure(S0)5.DFA化简:通过消除多余状态和合并等价状态将一个DFAM转换成一个最小的与之等价的DFAM`多余状态是指,从该自动机的开始状态出发,任何输入串都不能到达的那个状态。在有穷自动机中,两个状态s和t等价的条件是:1)一致性条件:即s和t必须同为终态或同为非终态2)蔓延性条件:即对所有输入符号,s和t必须转换到等价的状态里。有穷自动机的状态s和t不等价,则称这两个状态是可区别的。6.正规式转换为有穷自动机:r=s|tr=s*第五章:自顶向下语法分析方法求FIRST集,FOLLOW集LL(1)文法判定1、语法分析是编译程序的核心部分:在词法分析的基础上,识别单词符号序列是否是给定文法的正确句子(程序)。自上而下分析的前提:消除左递规和消除回溯。自顶向下分析法就是从文法的开始符号出发,试图推导出与输入的单词串完全匹配的句子。xxyyNN((tt))NN((ss))xxyyNN((ss))如果能够推导出,则该输入串是给定文法的句子。如果不能推导出,则该输入串不是给定文法的句子。2.自顶向下分析法分两种:不确定的自顶向下分析法:是带有回溯的分析方法,效率低,代价高,极少使用。确定的自顶向下分析法:对文法有一定的限制,但实现简单直观,便于手工或自动构造。3.确定的自顶向下分析思想:判定是否为LL(1)文法首符号FIRST集:设设GG==((VVTT,,VVNN,,SS,,PP))是是上上下下文文无无关关文文法法FFIIRRSSTT(())=={{aa||→→aaββ,,aaVVTT,,,,ββVV**}}若若→→εε,,则则规规定定εεFFIIRRSSTT(())..后跟符号FOLLOW集:FFOOLLLLOOWW((AA))==aaSS→→……AAaa……,,aaVVTT,,AAVVNN若若SS→→......AA,,则则规规定定##∈∈FFoollllooww((AA))..选选择择集集合合SSEELLEECCTT集集::给给定定上上下下文文无无关关文文法法的的产产生生式式AA--αα,,AA∈∈VVNN,,αα∈∈VV**,,若若αα→→﹨﹨εε,,则则SSEELLEECCTT((AA--αα))==FFIIRRSSTT((αα))如如果果αα→→εε,,则则SSEELLEECCTT((AA--αα))==((FFIIRRSSTT((αα))--{{εε}}))FFOOLLLLOOWW((AA))4.LL(1)的含义:LL(1)文法是无二义的、LL(1)文法不含左递归第1个L:从左到右扫描输入串第2个L:生成的是最左推导1:向右看1个输入符号便可决定选择哪个产生式一个上下文无关文法是LL(1)文法的充分必要条件是:对每个非终结符A的任两个不同产生式A,Aβ,满足:Select(A)∩Select(Aβ)=,其中:、β不同时推导出注:对LL(1)文法进行语法分析时不会产生回溯。5.某些非LL(1)文法到LL(1)文法的等价变换:1.提取左公因子2.消除左递归(如果一个文法是左递归时,则不能采用自顶向下分析法。)(1)左递归的定义(含有左递归的文法绝对不是LL(1)文法)一个文法含有下列形式的产生式时,①AAAVN,V*直接左递归②ABBAA,BVN,,V*间接左递归(2)直接左递归的消除(改为右递归)形如:A→Aa|β(a非,β不以A打头)改写为:A→βA¢A¢→aA¢|形如:A→Aa1|Aa2|...|Aan|b1|b2|...|bm其中,每个a都不等于,b1,...,bm均不以A开头。改写为:A→b1A¢|b2A¢|...|bmA¢A¢→a1A¢|a2A¢|...|anA¢|SSaSbSbS’S’aS’|εE→E+T|TT→T*F|FF→(E)|iE→TE'E'→+TE'|εT→FT'T'→*FT'|εF→(E)|i6.不确定性分析思想:(1)由于相同左部的产生式的右部FIRST集交集不为空而引起回塑。S-xAyA-ab|a(2)由于相同左部产生式的右部存在能→ε的,且非终结符FOLLOW集中含有其他产生式右部FIRST集的元素。1)S-aAS2)S-b3)A-bAS4)A-εFOLLOW(A)={a,b}(3)由于文法含有左递归而引起回溯7.确定的自顶向下分析方法:递归子程序法、预测分析法。8.预测分析法基本思想:从左到右扫描源程序,直接根据:预测分析器构成:预测分析程序,先进后出栈,预测分析表——与文法有关第七章:LR分析LR(0)分析表识别活前缀的DFA分

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功