陈火旺编译原理复习重点及复习思路总结

陈火旺编译原理复习重点及复习思路总结
陈火旺编译原理复习重点及复习思路总结

作为考研课程中最难的科目,编译原理的复习一直以来困扰着无数的计算机考研者,特别是本科期间没有认真学习这门课程或者专业外的人士。由sodme写作的这一系列文章将主要以陈火旺院士的编译原理教材为主线,对编译原理的复习重点和复习思路进行归纳和总结,以帮助大多数朋友尽快入门。由于绝大多数的本科编译教材,都是在围绕着原理性方面的知识进行介绍和展开,所以,本总结也适合于使用其它教材的朋友。anyway,希望使用各种不同教材的朋友都能从中受益并有所感悟。

与数据结构的总结类似,对于编译的总结都是采用我自己认为比较容易理解的语言进行描述,绝不对书上的概念和算法进行原原本本的照搬,这里,在多数情况下讲的都是我自己的学习经验和学习心得。So,其行文写作的style可能有些朋友不太适应,but,I promise:这个总结绝不会平庸、泛泛无奇。

Ok,now,let’s go.

一、编译原理的章节结构及重点构成

第1章引论:本章属非重点章节,简单介绍了编译的基本知识。出题分值不会太多,如果出题(很多情况是不出题,^_^),其分值比例一般情况下不会超过5%.

第2章高级语言及其语法描述:本章属重要章节,在本章逐步引出了编译的若干基础概念和术语。如果出题,其分值比例一般在5%-20%.

第3章词法分析:重难点章节。本章是难点章节之一,同时又是编译原理最重要的章节和多数学校的必考章节之一,通常作为大题中的先行题考查。分值比例各有侧重,一般在10%~20%不等。

第4章语法分析-自上而下分析:重难点章节。本章的难度要高于词法分析一章,与词法分析一章一样,同属编译原理最重要的章节之一,是多校学校的必考章节之一,通常作为大题考查。如果出题,其分值在10%~20%不等(如果同一试卷中既出现词法分析又出现语法分析,语法分析题目的分值一般比词法分析的分值要大)。

第5章语法分析-自下而上分析:重难点章节。属多数学校的必考章节之一,其重要性描述同上,通常作为大题考查。一般情况下,在同一学校的同一张编译试卷内,多数不会同时考自上而下分析和自下而上分析两种语法分析方法,各学校会根据自身题目的难度定位选择考查自上而下的还是自下而上的。自下而上的分析要难一点。如果本章出题,其分值比例约为:10%~20%.

第6章属性文法和语法制导翻译:重难点章节。属多数学校的必考章节之一。多数与语义分析一章联合出题,通常作为大题考查。如果出题,本章的分值比例约为:10%~20%左右。第7章语义分析和中间代码生成:重难点章节,常考内容之一,报考名校的同学应该多留意本章节内容。如果出题,本章分值约为:10%左右。

第8章符号表:非重点章节,本章介绍的是编译过程中的辅助内容,并未紧密联系编译的主体思想。多数学校在本章不出题,如果出题,其分值比例约为:5%左右。

第9章运行时存储空间组织:常考内容之一。本章多数会联系实际语言进行考查,如果出题,其分值比例约为:10%左右。

第10章优化:常考内容之一。分值比例约为:10%左右。

第11章目标代码生成:较少考查,即使考查,分数比例一般在5%左右。

第12章并行编译基础:很少考查,只作了解,了解其基本概念即可。

关于重要性标识的几点说明:

“必考内容”:是针对于多校学校一般的出题规律而言,本章极易被考到。或者说,作为

一个完整的试卷,本章是应该被考查的,这是放在多个学校都比较适合的规律,也就是说本章是不同的学校共同关注的章节。

“常考内容”:虽然本章内容重要,但是,各校根据自己的考查方式,可能选择考,也可能不选择考查这一章,这样的章节常常作为对必考章节的配合和补充,以完善和形成一张完整的试卷。这些章节要求读者自己对所报院校的历年试题进行归纳和分析,从中找出哪些是是这一次比较容易考查到的。

注:关于分值比例的统计样本来自于国防科大,中科院,上海交大,哈工大,清华等多所学校的历年试题。

二、编译原理各章节重点难点归纳

第1章引论:

本章作为编译原理的开启章节,其意义在于为原本对编译一无所知的朋友撩开一条细缝,让你从本章大致了解编译程序工作的原理。所以,本章的考点都是象征性的。需要读者掌握的是:清楚编译程序的总框架,了解编译程序工作的大致过程,能分辨清楚编译前端与后端的区别及其相互配合的方法,要清楚编译程序是如何生成的。请大家记忆并理解以下概念:编译程序,解释程序,翻译程序,扫描器,分析器,编译前端与后端,符号表,“遍”的概念等。说让大家记忆并理解以上概念,并不是要大家原原本本地记住书上的解释,而是让大家达到这样的一种程度:知道这些概念的含义,并且能够按照自己的语言对其进行准确描述。一般而言,当你真正理解了一个概念之后,你是有能力对其进行精辟描述的。针对于本章的考点,多数是考查这些小概念,比如国防科大就曾经考过“扫描器”等概念。In a word,理解第一。

第2章高级语言及其语法描述:

本章的2.1和2.2节在先期为2.3节作了很多铺垫,其目的是为了引出2.3中的几个重量级概念:上下文无关文法,语法分析树和二义性,同时也引出了与此紧密联系的其它概念:推导,句型,句子,最左推导,最右推导等。最后给出了另一个常考点:乔姆斯基的方法分类。

对于本章,读者应该掌握:

正确理解程序设计语言中语法和语义的含义,了解书上列举的高级语言中的一般特性。一般情况下,这两点是不会直接考查的,如果是想考查某种高级语言的特性,也会放在后面的优化或目标代码生成章节中进行考查。所以,这里只要求你理解及了解。但是,下面的这些东东就是必须掌握的了,而且是必须通过大量作题掌握的:

1.上下文无关文法的定义,判断和转化,以及与上下文无关文法密切相关的概念。

首先,应该掌握上下文无关文法的四个构成要素;其次,应该清楚对于上下文无关文法,其每个产生式的左部和右部必须满足的条件。在有关上下文无关文法的考点中,有这样几种考查方式:给出某语言的自然语言描述方式,要求写该语言的上下文无关文法表述形式;给出某语言的上下文无关文法,要求用自然语言描述该语言;给出某语言的上下文无法方法,要求证明该文法是否二义;给出某语言的上下文无关文法,要求给出指定句子的最左或最右推导;给出某语言的上下文无关文法,要求给出指定句子的语法分析树;给出一个具有二义性的上下文无关文法,要求将其转换成非二义性的。以上的综合分析,几乎含盖了所有与上下文无关文法有关的出题角度,大家应该全部掌握。

2.乔姆斯基的文法分类。

首先,应该非常清楚乔姆斯基对于四种文法分类的定义,并能理解其含义。几种文法中,最基本的是0型文法,读者可以将它理解为其它所有文法的基础,它是可以表示任何语言的文法。后面的1,2,3三种文法,是分别对于0型文法产生式的两边作了不同的限制之后,形成了新的文法。比如:规定0型文法的每个产生式中,其左边字符集长度小于右边字符集长度并且同时规定开始符号只可出现于产生式的左边,不能出现在任何产生式的右边,这样,就成为了1型文法(即上下文有关文法)。其它与此类似,在1型文法的基础上,进一步规定该文法的任意产生式,其左部只允许有一个字符且必须为非终结符,这样就构成了上下文无关文法;再在上下文无关文法的基础上进行限制:规定除了左部有且只有一个非终结符外,还特别规定右部最多只允许有两个字符,当为两上字符时必须一个为非终结符,另一个为终结符,而当只有一个字符时,必须为终结符,这样的文法就成了正规文法。这样一层套一层的限制,就形成了从0型到3型文法的定义体制,每一层都是在前一层基础上进行定义的,所以说前一层一定比该层表示的范围要广,因为其受的限制要少。

那么,我们在判断一个文法时应该以什么规则来判断呢?这个规则当然是:3->2->1->0.也就是说,我们判断是从高到低来判断的,比如:一旦判断其属于正规文法之后就没必要再判断其是否属于上下文无关的了(因为它必定属于上下文无关,我们应该以最高规则来判定其属于的文法类型),其它情况与此类推。只有当我们判断不属于3型文法时,我们才向下判断,其是不是属于2型的,若不属于2型的,则依此类推再向下判断。最终的结果如果不属于3,2和1三种类型,那就只有属于0型了。

“给定一个文法,要求判断其属于何种文法”是一个重要考点,其出题形式可能是填空,选择等多种题型。

第3章词法分析:

很多人觉得编译这个科目很难学,望而生畏,以致于举步不前,最大的一个原因是把编译技术看得过于神秘化了。其实,说白了,编译这门课程无非就是对一个“大”程序的各个部分、各个模块上升到理论化的程度进行分析和介绍。这个“大程序”就是我们所要研究的“编译程序”。

前两章为研究编译技术作了一些概念和技术上的先期铺垫,在本章的词法分析内容里将开始介绍编译技术的第一个重要技术点:词法分析。

本章最为重要的内容是3.3节:正规式和有限自动机,对于词法分析一章的考点,可以说80%到90%以上集中在这一节的内容上。针对于这一节的知识点介绍和考点分析,我们将稍后给出,现在先来看一下学习3.3节所必须先知道和理解的基本概念:

a.词法分析器的功能(或称词法分析的任务):输入的是源程序,输出的是分析完成的单词符号;

b.状态转换图:是一张有向图,用于标识在特定的输入下词法分析器应该选择的分析方向。

对于考点a,有些学校会作为选择、判断或填空题进行考查,而对于考点b,多数是与有限自动机一些考查,要求给出以“状态图”表示的确定有限自动机,也有的学校的试题中,是要求直接给出针对于某正规式的状态转换图,比如中科院曾经考到:已知某系统下的设备文

件名的定义方式(以正规式给出),要求给出符合这种定义的状态转换图。理解状态转换图的含义是进行本章学习的重要前提,大家记住一句话:状态转换图,就是一张当输入不同的内容时,选择不同分析路径的有向图。

下面,我们重点看一下有关“正规式与有限自动机”这一考点的各种可能考查形式:

a.题目给定一正规式,要求给出其NFA,DFA或最简DFA形式。

b.题目给定一用状态图表示的NFA,要求给出其对应的DFA或最简DFA形式。

c.题目给定一NFA,DFA或最简DFA,要求给出其对应的正规式。

d.题目给定一正规集,要求给出其相应的DFA。

e.题目给定一用自然语言描述的正规集,要求给出其相应的正规式表示形式。

这些考点,综合起来看,是在正规式,正规集,NFA和DFA之间作各种可能的转换,当然这种转换正确与否的判断标准就是转换之后的内容是不是与转换之前的内容等价,如果等价,我们就认为转换是正确的。

在考点e这类的转换题目中,有一些是需要另外规纳出来的,他们在某一方面具有共同的特征,如果掌握了其中一题,将可举一反三解出其它题。比如有以下的几种题目就可以作以总结:

1.求偶(奇)数个a与偶(奇)数个b构成的语言的正规式

2.求能被3(4、5、或其它任意给定的n)整除的正规式的DFA

3.求不以(或以)n(n从0到9)开头的XXXX(符号某种条件的)奇(偶数)数的正规式

以上三种类型的考题,在每一种类型中,都是有规律可循的,也都有简便的方法可以帮助我们快速求解其正规式,进而快速确定DFA及最简DFA。针对于这三种类型的解题思路分析,我会在另外的文章中给出。

第4章语法分析-自上而下的分析:

说明:这一次的更新,确实有点慢了,距上次已经有了20天的时间,这段时间主要因为sodme所在的公司在进行搬迁事宜,所以心境和环境都不太安定,让大家久候了,以后我尽量在一到两周左右的时间里把这个贴子更新完毕,今天是10月12日,请大家监督,这个贴子最晚截止更新时间是10月26日。

大家在参阅编译原理的这个重点归纳贴子时,可能会感觉与数据结构规纳贴子风格不太一致,在编译的总结里,我较多地讲解了书上的一些我认为是较难理解的内容,而不仅仅是给出考点。因为从我接触的网友反映的情况看来,大家对编译还是比较头疼的,所以,我希望通过这样的规纳同时帮助大家从另外一个角度或以另外一种思维来看待编译原理课程。

当词法分析器对源程序进行了词法分析,获得了一个个独立的单词符号后,编译程序总控模块就会调用语法分析子程序对这些单词符号集进行语法分析,也就是:利用该文法的产生式来判断这些单词符号是否足以构成一个在语法上正确的程序。如果可以构成一个在语法上正确的程序,则接着作编译下面的工作,比如:语法制导翻译,中间代码生成、代码优化等工作;而如果不能构成一个在语法上正确的程序,则给出相应的错误提示并将错误信息记入对应的数据记录中。

语法分析的规则主要基于两种:自上而下分析和自下而上分析。这一章,主要讲解自上而下的分析方法。自上而下分析的大致思路是:根据产生式规则,从产生式的开始符号进行推导,一直推导到可以产生当前要判断的这个句子为止。如果推导了所有可能情况,但没有推出这样的句子,那么这个句子就是不符合该语言的语法规则的(产生式即定义了语言的语法规则)。

在陈火旺老师的编译教材上,详细描述了一种自上而下的分析方法:LL(1)分析法,陈老教材的这一章也是围绕这一点而展开的。下面,我们介绍一下本章的主要常考知识点及考查角度:

1.给定一文法,要求将其改造成可以进行自上而下分析的形式。这里面涉及到两方面的知识点:左递归的去除及公因子的提取。所谓的左递归是指产生式是形如:P->Pab...的形式,即:产生式右边的第一个字符就是该产生式左边的那个非终结符。当一个文法中有左递归的产生式时,是无法进行自上而下推导的,因为只要这个产生式被推导,就势必会使这种推导过程陷入一种递归循环无休止推导的情形。去除左递归的方法是比较简单的,其基本思路是将左递归通过转化变成与之等价的右递归。即将形如:P->Pa|b 形式的左递归变成如下形式:P->bP',P'->aP'|e(注:e表示空)。这一点只要多作练习,很快就会掌握。提取公因子的目的是为了避免推导过程中的回溯,也就是使每一次的向下推导是唯一的,而不是有多个选择,因为有多个选择的话就可能出现回溯。

2.给定一文法,要求判断其是否为LL(1)文法。判断一个文法是否为LL(1)文法主要有两种方法:一种是判断文法是否二义,如果二义,则文法必定不为LL(1)(注意:此命题的否合命题不真);二是根据陈老教材P73页:关于LL(1)文法成立的三个条件。显然,第一种判断方法效率是比较高的,但是,其只能判断文法“不为”LL(1)的,并不能判定文法“是”LL(1)的,要判断文法“是”LL(1)的,就得用第二种方法,但在考题中,如果要求你判断某文法是否为LL(1)的,则该文法多半不是LL(1)的,而且此点可以很容易地用二义性来证明,这是一种常考形式。

3.给定一文法,要求构造LL(1)分析表。LL(1)分析的重点和难点内容都在其分析表的构造上,后面要讲的LR分析也是,它的难点也在于其分析表的构造。构造LL(1)分析表是一个常考点,也是大分值题的可能出题点,对于普通学校而言,相比于LR分析,他们更喜欢考LL(1),因为LR要比LL(1)复杂得多,而名校则更喜欢考LR,当然,这只是针对于较普遍的情况作的总结,并不是一定成立的推论。LL(1)分析表构造前,需要先弄清FIRST集和FOLLOW 集的构造方法,简单地说,FIRST集是用于求非终结符推出的产生式中的第一个终结符的,而FOLLOW集是用于求与该非终结符后紧邻的那个终结符的。FIRST集的构造方法见教材P78页,在构造的三个规则中,前两个规则都是比较容易理解的,第三个规则看上去就有点复杂了,我们简单地来看第三条规则,就是:当由X推出的产生式中前面若干个非终结符,其FIRST集均含有空时,就取这若干个非结符的后一个字符的FIRST集,当然,这“后一个字符”可能是终结符,也可能是非终结符,只要其FIRST集不为空就行;而当X推出的右边全是非终结符,且这些非终结符的FIRST集全含有空时,就把空加到FIRST(X)中。FOLLOW集的构造方法很简单,不作详细讲解了。LL(1)分析表的构造方法见教材P79页,构造规则主要有3条。说到这里,大家应该明确分析表中的各个单元到底代表什么含义,我作一下简单的介绍:分析表中的最顶一行,是产生式中所有的终结符;分析表中的最左一列,是产生式中所有的非终结符;而产生式中间的诸多单元格则可以存放该文法的产生式或特殊标志(比如成功和错误标志)。这样的二维表格构成的单元格的含义是:当左边的非终结符遇到最上一行中的某个终结符时应该选择哪个产生式进行向下的推导,这个产生式就是放在对应二维坐标处的产生式。

4.给定一文法,先要求求解其LL(1)分析表,然后要求给出针对于某一个句子的具体分析过程。这个考点的第二问主要就是考查考生对预测分析程序的工作过程的理解了,预测分析程序完全是按照分析表机械工作的,针对于考生而言,要明确何时出栈,何时入栈,以及如何入栈,这些细节信息都是要通过作题掌握的,只理解而不会熟练解答是没有用的。

5.给定一文法,要求给出其递归下降分析程序。递归下降分析的条件也是无左递归及不带回溯,其构造的过程比较简单,就是将每个非终结符处理成可以互相递归调用的过程体。详细过程参照P74到P75的例子,你可以试着写一下P76页教材上未列出的F过程的实现。

下一次,我们会详细讲解LR分析,敬请期待。如果网友对讲解有什么意见或建议,也欢迎跟贴指出,谢谢大家。

后续内容:

第5章语法分析-自下而上的分析:

第6章属性文法和语法制导翻译:

第7章语义分析和中间代码生成:

第8章符号表:

第9章运行时存储空间组织:

第10章优化:

第11章目标代码生成:

第12章并行编译基础:

欢迎来到免费考研网https://www.360docs.net/doc/647602388.html,

四川大学编译原理期末复习总结

一、简答题 1.什么是编译程序 答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。 将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。 2.请写出文法的形式定义 答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S) –其中Vn表示非终结符号 –Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ –S是开始符号, –P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*) 3.语法分析阶段的功能是什么 答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:程序、语句、表达式)。确定整个输入串是否构成语法上正确的程序。 4.局部优化有哪些常用的技术 答:优化技术1—删除公共子表达式 优化技术2—复写传播 优化技术3—删除无用代码 优化技术4—对程序进行代数恒等变换(降低运算强度) 优化技术5—代码外提 优化技术6—强度削弱 优化技术7—删除归纳变量 优化技术简介——对程序进行代数恒等变换(代数简化) 优化技术简介——对程序进行代数恒等变换(合并已知量) 5.编译过程分哪几个阶段 答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。每个阶段把源程序从一种表示变换成另一种表示。 6. 什么是文法 答:文法是描述语言的语法结构的形式规则。是一种工具,它可用于严格定义句子的结构; 用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。 7. 语义分析阶段的功能是什么 答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码); 并对静态语义进行审查。 8.代码优化须遵循哪些原则 答:等价原则:不改变运行结果 有效原则:优化后时间更短,占用空间更少 合算原则:应用较低的代价取得较好的优化效果 9.词法分析阶段的功能是什么 答:

最新编译原理试题汇总+编译原理期末试题(8套含答案+大题集)

编译原理考试题及答案汇总一、选择 1.将编译程序分成若干个“遍”是为了_B__。 A . 提高程序的执行效率 B.使程序的结构更加清晰 C. 利用有限的机器内存并提高机器的执行效率 D.利用有限的机器内存但降低了机器的执行效率 2.正规式 MI 和 M2 等价是指__C__。 A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。 C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等 3.中间代码生成时所依据的是 _C_。 A.语法规则 B.词法规则 C.语义规则 D.等价变换规则 4.后缀式 ab+cd+/可用表达式__B_来表示。 A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d 6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。 A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析 7.词法分析器用于识别__C___。 A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符 8.语法分析器则可以发现源程序中的___D__。 A.( ) 语义错误 B.( ) 语法和语义错误 C.( ) 错误并校正 D.( ) 语法错误 9.下面关于解释程序的描述正确的是__B___。 (1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为打开编译程序技术的僵局而开发的 A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3) 10.解释程序处理语言时 , 大多数采用的是__B___方法。 A.( ) 源程序命令被逐个直接解释执行 B.( ) 先将源程序转化为中间代码 , 再解释执行 C.( ) 先将源程序解释转化为目标程序 , 再执行 D.( ) 以上方法都可以 11.编译过程中 , 语法分析器的任务就是__B___。 (1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的 (3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构 A.( ) (2)(3) B.( ) (2)(3)(4)C.( ) (1)(2)(3) D.( ) (1)(2)(3)(4) 12.编译程序是一种___C__。 A. ( ) 汇编程序 B.( ) 翻译程序 C.( ) 解释程序 D.( ) 目标程序 13.文法 G 所描述的语言是_C____的集合。 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B.( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C.( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串 14.文法分为四种类型,即 0 型、1 型、2 型、3 型。其中 3 型文法是___B__。 A. ( ) 短语文法 B.( ) 正则文法 C.( ) 上下文有关文法 D.( ) 上下文无关文法15.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 __D___。 A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式

编译原理复习题2017(含试卷)

* 编译原理复习题 一.简答题: 1) 什么是句子? 什么是语言? 解答:句子——设G 是一个给定的文法,S 是文法的开始符号,如果S x (其中x ∈V T * ),则称x 是文法的一个句子。 语言——语言是句子的集合。 或——设G[S]是给定文法,则由文法G 所定义的语言L(G)可描述为:L(G)={x │ S x,x ∈V T * } 。 2) DFA 与NFA 有何区别 ? 解答:DFA 与NFA 的区别表现为两个方面:一是NFA 可以有若干个开始状态,而DFA 仅只有一个 开始状态。另一方面,DFA 的映象M 是从K ×∑到K ,而NFA 的映象M 是从K ×∑到K 的子集,即映象M 将产生一个状态集合(可能为空集),而不是单个状态。 3) 自顶向下的语法分析方法的基本思想是什么? 解答:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接 推导,试图推导出文法的句子,使之与给定的输入串匹配。 4) 自底向上的语法分析方法的基本思想是什么? 解答:从给定的输入串(终结符串)开始,根据文法的规则一步一步的向上进行直接归约,试图 归约到文法的开始符号。 5) 一个上下文无关文法G 包括哪四个组成部分? 解答:一组非终结符号,一组终结符号,一个开始符号,以及一组产生式。 6) 在自底向上的语法分析方法中,分析的关键是什么?

解答:关键是寻找句柄。 7)在自顶向下的语法分析方法中,分析的关键是什么? 解答:关键是选择候选式。 8)什么是属性文法? 答:是在上下文无关文法的基础上,为每个文法符号(含终结符和非终结符)配备若干个属 性值,对文法的每个产生式都配备了一组属性计算规则(称为语义规则)。在语法分析过 程中,完成语义规则所描述的动作,从而实现语义处理。 一个属性文法形式的定义为一个三元组AG,AG=(G,V,E)。 其中G为一个上下文无关文法;V为属性的有穷集;E为一组语义规则。 9)语法制导翻译 语法制导翻译:定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。 语法制导翻译(Syntax-Directed Translations): –一个句子的语义翻译过程与语法分析过程同时进行。 在文法中,文法符号有明确的意义,文法符号之间有确定的语义关系。属性描述语义信息, 语义规则描述属性间的的关系,将语义规则与语法规则相结合,在语法分析的过程中计算语义 属性值。 10)词法分析的主要任务是什么? 解答:词法分析器的任务是对构成源程序的字符串从左到右逐个字符逐个字符地进行扫 描,依次把它们识别为一个一个具有独立意义的单词,并确定其属性,再转换为长度统一的属 11)图示运行时存储空间的划分(分为哪几个区)。 解答: 一般分为静态区和动态区: 程序代码区、静态数据区、栈区和堆区 12)常用的中间语言种类有哪几种? 解答: 常用的中间语言种类有逆波兰表示、三元式、四元式和树形表示。 13)文法G所描述的语言是什么的集合? 解答:是由文法的开始符号推出的所有终结符串的集合。或说是句子的集合。 14)乔姆斯基把文法分为四种类型,即0型、1型、2型、3型。其中2型文法叫什么? 解答: 2型文法叫上下文无关文法。 15)常见的动态存贮分配策略有哪两种? 解答:常见的两种动态存贮分配策略是栈式动态分配策略和堆式动态分配策略。 16)语法分析的任务是什么?

编译原理概念期末总结复习

翻译程序:把一种语言程序转换成另一种语言程序,且在功能上是相同的这样的程序。 编译程序:把高级语言转换成低级语言,且在功能上是相同的这样的程序。 解释程序:边解释边执行源程序的程序。区别:编译程序有中间代码,而解释程序没有。编译过程的五个阶段: 1、词法分析任务:对构成源程序的字符串进行扫描和分解,识别出一个个单词。 2、语法分析任务:在词法分析的基础上,根据语言规则,把单词符号串分解成各类语法 单位。 3、语义分析和中间代码产生任务:对语法分析所识别出的各类语法范畴,分析其含义, 并进行初步翻译。 4、优化任务:对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效 的目标代码。 5、目标代码生成任务:把中间代码变换成特定机器上的低级语言代码。 编译程序的七个部分词法分析器,语法分析器、语义分析与中间代码产生器、优化器、目标代码生成器、表格管理和出错处理。 编译程序生成的五个办法:机器语言、高级语言、移植、自编译方式和使用工具自动生成。词法规则:指单词符号的形成规则。(也就是正规式) 语法规则:规定了如何从单词符号形成更大的结构。就是语法单位的形成规则。 空字:不包含任何符号的序列。 闭包: 中所有的符号组成的集合。 上下文无关文法是指:所定义的语法范畴是完全独立于这种范畴可能出现的环境的文法。上下文无关文法的四个组成部分:一组终结符号、一组非终结符号、一个开始符号和一组产生式。 终结符号也就是不可再分的基本符号。 非终结符号是用来代表语法范畴,表示一定符号串的集合。 开始符号是语言中我们最感兴趣的语法范畴。 产生式是定义语法范畴的书写规则。 句子:文法中从开始符号推导的终结符号串。 句型:从开始符号推导的符号串。 语言:文法中所有句子的集合。 程序语言的单词符号分为五种:关键字、标识符、常数、运算符和界符。 二元式表示:(种类,属性) 正规式的运算符有三种:或,连接和闭包。优先顺序是:闭包,连接,或。 DFA怎么识别字:若存在一条从初态结点到某一终态结点的通路,且这条通路上所有弧的标记符连接成的字是a,则称a可为DFA所识别。 DFA怎么识别空字:若DFA的初态结点同时又是终态结点,则空字可为DFA所识别。NFA怎么识别字:若存在一条从某一初态结点到终态结点的通路,且这条通路上所有弧的标记字依序连接成的字等于a,则称a可为NFA识别。 NFA怎么识别空字:若M的某些结点即是初态又是终态结点,或者存在一条从某个初态结点到某个终态结点的空通路,那么,空字可为M所识别。 语言的语法结构是用上下文无关文法描述的。 语法分析分为两类:自上而下分析法,自下而上分析法。 自上而下分析法面临的问题:1.文法的左递归问题。2.回溯3.成功可能是暂时的,产生虚假匹配。4.难于知道输入串中出错的确切位置。5.效率低,代价高。

编译原理复习整理(重点含答案)

1、给出下面语言的相应文法。L1={a n b n c i|n≥1,i≥0} 从n,i的不同取值来把L1分成两部分:前半部分是anbn:A→aAb|ab后半部分是ci:B→Bc|ε所以整个文法G1[S]可以写为:G1(S):S→AB;A→aAb|ab;B→cB|ε 3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。 (要求:先将正规式转化为NFA,再将NFA确定化,最小化)

4、对下面的文法G: E →TE ’ E ’→+E|ε T →FT ’ T ’→T|ε F →PF ’ F ’ →*F ’|ε P →(E)|a|b|∧ (1)证明这个文法是LL(1)的。 (2)构造它的预测分析表。 (1)FIRST(E)={(,a,b,^}FIRST(E')={+, ε}FIRST(T)={(,a,b,^}FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^}FIRST(F')={*,ε}FIRST(P)={(,a,b,^}FOLLOW(E)={#,)} FOLLOW(E')={#,)}FOLLOW(T)={+,),#}FOLLOW(T')={+,),#}FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式: '→+'→'→'→E E T T F F P E a b ||*|()|^||εεε FIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φ FIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ

编译原理知识点汇总

编译原理的复习提纲 1.编译原理=形式语言+编译技术 2.汇编程序: 把汇编语言程序翻译成等价的机器语言程序 3.编译程序: 把高级语言程序翻译成等价的低级语言程序 4.解释执行方式: 解释程序,逐个语句地模拟执行 翻译执行方式: 翻译程序,把程序设计语言程序翻译成等价的目标程序 5.计算机程序的编译过程类似,一般分为五个阶段: 词法分析、语法分析、语义分析及中间代码生成、代码优化、目标代码生成 词法分析的任务: 扫描源程序的字符串,识别出的最小的语法单位(标识符或无正负号数等) 语法分析是: 在词法分析的基础上的,语法分析不考虑语义。语法分析读入词法分析程序识别出的符号,根据给定的语法规则,识别出各个语法结构。 语义分析的任务是检查程序语义的正确性,解释程序结构的含义,语义分析包括检查变量是否有定义,变量在使用前是否具有值,数值是否溢出等。

语法分析完成之后,编译程序通常就依据语言的语义规则,利用语法制导技术把源程序翻译成某种中间代码。所谓中间代码是一种定义明确、便于处理、独立于计算机硬件的记号系统,可以认为是一种抽象机的程序 代码优化的主要任务是对前一阶段产生的中间代码进行等价变换,以便产生速度快、空间小的目标代码 编译的最后一个阶段是目标代码生成,其主要任务是把中间代码翻译成特定的机器指令或汇编程序 编译程序结构包括五个基本功能模块和两个辅助模块 6.编译划分成前端和后端。 编译前端的工作包括词法分析、语法分析、语义分析。编译前端只依赖于源程序,独立于目标计算机。前端进行分析 编译后端的工作主要是目标代码的生成和优化后端进行综合。独立于源程序,完全依赖于目标机器和中间代码。 把编译程序分为前端和后端的优点是: 可以优化配置不同的编译程序组合,实现编译重用,保持语言与机器的独立性。 7.汇编器把汇编语言代码翻译成一个特定的机器指令序列 第二章 1.符号,字母表,符号串,符号串的长度计算P18,子符号串的含义,符号串的简单运算XY,Xn, 2.符号串集合的概念,符号串集合的乘积运算,方幂运算,闭包与正闭包的概念P19,P20A0 ={ε} 3.重写规则,简称规则。非xx(V

编译原理结课论文

目录

1.绪论 概述 “编译原理”是一门研究设计和构造编译程序原理课程,是计算机各专业的一门重要的专业课。编译原理这门课程蕴含着计算机学科中解决问题的思路和解决问题的方法,对应用软件和系统软件的设计与开发有一定的启发和指导作用。“编译原理”是一门实践性很强的课程,要掌握这门课程中的思想,就必须要把所学到的知识应用于实践当中。而课程设计是将理论与实践相互联系的一种重要方式。 设计目的 课程设计是对学生的一种全面综合素质训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂很多,但也更接近实际。编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构解决问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的能力。 设计题目及要求 基于这个学期所学习的内容以及自己所掌握到的知识,本次我所要设计的题目是赋值语句的四元式生成。

要求: (1)设计语法制导生成赋值语句的四元式的算法; (2)编写代码并上机调试运行通过; (3)输入一赋值语句; (4)输出相应的表达式的四元式; 2.背景知识 语法制导翻译方法 语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。语义动作是为产生式赋予具体意义的手段,它一方面指出了一个产生式所产生的符号串的意义,另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。在语法分析的过程中,当一个产生式获得匹配(对于自顶向下分析)或用于规约(对于自底向上分析)时,此产生式相应的语义子程序就进入工作,完成既定的翻译任务。语法制导翻译分为自底向上语法制导翻译和自顶向下语法制导翻译。 属性文法 属性文法是编译技术中用来说明程序语言语义的工具,也是当前实际应用中比较流行的一种语义描述方法。属性是指与文法符号的类型和值等有关的一些信息,在编译中用属性描述处理对象的特征。属性文法是一种

编译原理考试重点题

1、设正规式r= a(a|b)*, 将r转换为相应的正规文法。 令S为文法开始符,首先形成S →a(a|b)*,然后形成S →aA和A →(a|b)*,再变换成: S→aA A→ε A→(a|b)A, 进而变换成正规文法形式: S→aA A→ε A→aA A→bA 2、令文法G[S] S→cC,S→c,C→cC,C→dC,C→c,C→d, 将该文法转换为相应的正规式。 首先有S=cC|c, C=(cC|dC)|(c|d) =(c|d)C|(c|d) =(c|d)*|(c|d) =(c|d)+ 进一步有

S=c(c|d)+|c =c(c|d)* c(c|d)*即为该文法所对应的正规式 令文法G[S]为: S->S+A|A A->A*B|B B->(S)|a|b (1)分析说明a*a+b是该文法的一个句型; (2)指出该句型的所有短语、直接短语和句柄。(1)该字符串对应的语法树为: 所以a*a+b为该文法的句型。 (2)短语为:a,a,a*a,b,a*a+b; 直接短语为:a,a,b; 句柄为:最左边的a 令文法G[S]为: S->aCcDe C->b|Cb D->d

(1)分析说明aCbcde是它的一个句型; (2)指出该句型的所有短语、直接短语和句柄。 (1)此句型对应语法树如下,故aCbcde为此文法的一个句型。 (2)短语为:aCbcde,Cb,d; 直接短语:Cb,d; 句柄: Cb。 构造正规式(a|b)*相应的最小化DFA。 1、首先构造对应的NFA: 2、将NFA确定化: 3、对其最小化:

设有非确定的有自限动机NFA M=({A,B,C},{0,1},δ,{A},{C}),其中: δ(A,0)={C}, δ(A,1)={A,B}, δ(B,1)={C}, δ(C,1)={C}。 请画出状态转换距阵和状态转换图。 状态转换距阵为: 状态转换图为:

编译原理学习心得

编译原理学习心得 编译原理学习心得1 编译程序在计算机科学与技术的发展历史中发挥了巨大作用,是计算机系统的核心支撑软件。而“编译原理”这门课程一直以来是国内外大学计算机相关专业的重要课程。因为它的知识结构贯穿程序设计语言、系统环境以及体系结构,能以相对的视角体现从软件到硬件以及软硬件协同的整机概念。其理论基础又涉及形式语言与自动机、数据结构与算法等计算机学科的许多重要方面,为联系计算机科学理论和计算机系统的典范。 虽然编译原理这门课程在大多数的人里认为枯燥无味,学起来就像看天书一样。然而学习这门课程还是有一定的好处的。比如可以更加容易的理解在一个语言种哪些写法是等价的,哪些是有差异的,可以更加客观的比较不同语言的差异,并且学习新的语言的效率也会更加高,语言转换也会更加游刃有余。 不学“编译原理”这门课程的话,自己的编程思想会很浅显。而且编程也只仅仅停留在编程上,无法深入理解其中的原理。 学习编译原理的话,从文法、正规式、NFA与DFA的定义,下手,要用心动脑去体会 编译原理学习心得2

从联系最紧密的操作系统来说吧,你写多线程/多进程的程序就得和操作系统的知识打交道。写多线程得加锁吧,临界区、死锁的四个条件之类的标准的操作系统的内容吧(不得不吐槽一下,某国内一线电商干了三年的程序猿,写多线程居然不知道加锁,也是醉了)。进程间通信的几种方式什么管道、socket、共享内存等,这也是操作系统的内容吧。文件系统,这也是经常要打交道的东西。还有内存什么的,你做Android 开发,这些里边有很多东西都在系统层面被封装好了,但是你要是不知道原理,一旦出了错根本无从调试,况且你该不会打算写一辈子写Android 就是填逻辑吧。 然后,是编译原理,普通的程序猿是接触不到编译器或者虚拟机的开发的。但是这并不意味着编译原理就用不到。说个最常见的读取配置文件,只要你的配置文件有自定义的语法,你就要用编译原理的东西。还有类似于自动生成代码啦、正则表达式啦这些都算是编译原理的内容。你既然是写Java 的不了解虚拟机怎么可以,最基本的字节码总是需要能看懂的吧,分析一些疑难杂症的时候字节码还是很有用的。 最后,是计算机原理,如果只是做应用开发的话计算机原理其实不必要掌握的多深入,但是一些基本的概念还是要清楚的。比如寄存器、缓存、中断什么的,关键的时候可以帮助你调试。在一些对性能要求非常高的场合,也是很有作用的。此外,学了

编译原理试题

中间语言与语法制导翻译重点与难点 重点:语法制导翻译的基本思想,属性文法,翻译模式,说明语句的翻译方案。 三地址码,各种语句的目标代码结构、属性文法与翻译模式。 难点:属性的意义,对综合属性,继承属性,固有属性的理解,属性计算,怎么通过属性来表达翻译。布尔 表达式的翻译,对各种语句的目标代码结构、属性文法与翻译模式的理解。 基本要求 掌握语法制导翻译的基本思想,属性文法,综合属性,继承属性,固有属性,属性计算,s_属性文法, L_属性文法,说明语句的翻译方案,翻译模式、属性文法的实现 掌握中间语言与语义分析的基本概念;熟练掌握语法(结构)树、三地址代码、赋值与控制语句的翻译、 说明语句的翻译;掌握组合数据说明的翻译、过程调用翻译。 例题解析 例1 给定文法E --> T { R.i := T.p } R { E.p := R.s } R --> addop T { R1.i := mknode( addop.val, R.i, T.p ) } R { R.s := R1.s } R --> : { R.s := R1.s } T --> ( E ) { T.p := E.p } T --> id { T.p := mkleaf( id, id.entry) } T --> num { T.p := mkleaf( n um, n um.val ) } (1) 指岀文法中的各非终结符具有哪些综合属性和哪些继承属性 ⑵ 画岀按本翻译模式处理表达式 a + 20 + ( b - 10 ) 时所生成的语法树 【解】 (1)E的综合属性p,R的继承属性i,综合属性s ; T的综合属性p ⑵处理表达式a + 20 + ( b - 10 ) 时所生成的语法树如下 例2定义一个计算器的属性文法,完成一个输入表达式值的计算和显示 【解】计算器的文法 L T E E T E1 + T | T T T T1 * F | F F T ( E ) | digit

《编译原理》总复习-07级

《编译原理》总复习-07级 第一章编译程序的概述 (一)内容 本章介绍编译程序在计算机科学中的地位和作用,介绍编译技术的发展历史,讲解编译程序、解释程序的基本概念,概述编译过程,介绍编译程序的逻辑结构和编译程序的组织形式等。 (二)本章重点 编译(程序),解释(程序),编译程序的逻辑结构。 (三)本章难点 编译程序的生成。 (四)本章考点 全部基本概念。 编译程序的逻辑结构。 (五)学习指导 引论部分主要是解释什么是编译程序以及编译的总体过程。因此学习时要对以下几个点进行重点学习:翻译、编译、目标语言和源语言这几个概念的理解;编译的总体过程:词法分析,语法分析、语义分析与中间代码的生成、代码优化、目标代码的生成,以及伴随着整个过程的表格管理与出错处理。 第三章文法和语言课外训练 (一)内容 本章是编译原理课程的理论基础,主要介绍与课程相关的形式语言的基本概念,包括符号串的基本概念和术语、文法和语言的形式定义、推导与归约、句子和句型、语法分析树和二义性文法等定义、文法和语言的Chomsky分类。 (二)本章重点 上下文无关文法,推导,句子和句型,文法生成的语言,语法分析树和二义性文法。(三)本章难点 上下文无关文法,语法分析树,文法的分类。 (四)本章考点 上下文无关文法的定义。 符号串的推导。 语法分析树的构造。 (五)学习指导 要构造编译程序,就要把源语言用某种方式进行定义和描述。学习高级语言的语法描述是学习编译原理的基础。上下文无关文法及语法树是本章学习的重点。语法与语义的概念;程序的在逻辑上的层次结构;文法的定义,文法是一个四元组:终结符号集,非终结符号集,开始符号、产生式集;与文法相关的概念,字符,正则闭包,积(连接),或,空集,产生式,推导,直接推导,句子,句型,语言,最左推导,最右推导(规范推导);学会用文法来描述语言及通过文法能分析该文法所描述的语言;语法树及二义性的概念、能通过画语法树来分析一个文法描述的语言是否具有二义性;上下文无关文法的定义和正规文法的定义,能判断一个语言的文法是哪一类文法。 附训练试题:

编译原理复习要点

考试安排:7月13日(20周周三),15:00-17:00,20208 填空10X1分、选择10X2分、简答4X5分、大题5X10分 考试大题:循环优化 LL(1).定义之类的 算符优先算法 … 自下而上分析法(20分,选择、填空、大题) 第一章引论 一.编译程序(compiler): 把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序 二.编译程序的工作的五个阶段: 词法分析、语法分析、中间代码产生、优化、目标代码产生 1.词法分析 任务: 输入源程序, 符号。 依循的原则:构词规则 描述工具:有限自动机 保留字标识符等符整常数保留字整常数保留字 2.语法分析 任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。 依循的原则:语法规则 述工具:上下文无关文法 3.语义分析与中间代码产生 任务:对各类不同语法范畴按语言的语义进行初步翻译。(变量是否定义、类型是否正确等) 依循的原则:语义规则 中间代码:三元式,四元式,逆波兰记号,树形结构等。是一种独立于具体硬件的记号系统。 例:将Z:=X + 0.618 * Y 翻译成四元式为 (1) * 0.618 Y T1 (2) + X T1 T2 (3) := T2 _ Z 4. 优化 任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效 的目标代码。 依循的原则:程序的等价变换规则 FOR K:=1 TO 100 DO BEGIN M := I + 10 * K;

N := J + 10 * K; END 4.目标代码产生 任务: 把中间代码变换成特定机器上的目标代码。 依赖于硬件系统结构和机器指令的含义 目标代码三种形式: a)绝对指令代码: 可直接运行 b)可重新定位指令代码: 需要连接装配 c)汇编指令代码: 需要进行汇编 三. 编译程序结构 编译程序总框 (简答题5分) 第二章高级语言及其语法描述 2.1.1语法 词法规则:单词符号的形成规则。 a)单词符号是语言中具有独立意义的最基本结构。一般包括:常数、标识符、基 本字、算符、界符等。 b)描述工具:正规式和有限自动机 语法规则:语法单位的形成规则。 a) 语法单位通常包括:表达式、语句、分程序、过程、函数、程序等; c)描述工具:上下文无关文法 2.1.2语义 语义:一组规则,用它可以定义一个程序的意义。 描述方法: a)自然语言描述:隐藏错误、二义性和不完整性 b)形式描述: ?无二义性 ?完整性

计算机题库编译原理试题汇总

编译原理考试题及答案汇总 一、选择 1.将编译程序分成若干个“遍”是为了_B__。 A . 提高程序的执行效率 B.使程序的结构更加清晰 C. 利用有限的机器内存并提高机器的执行效率 D.利用有限的机器内存但降低了机器的执行效率 2.正规式 MI 和 M2 等价是指__C__。 A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。 C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等 3.中间代码生成时所依据的是 _C_。 A.语法规则 B.词法规则 C.语义规则 D.等价变换规则 4.后缀式 ab+cd+/可用表达式__B_来表示。 A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d 6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。 A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析 7.词法分析器用于识别__C___。 A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符 8.语法分析器则可以发现源程序中的___D__。 A.( ) 语义错误 B.( ) 语法和语义错误 C.( ) 错误并校正 D.( ) 语法错误 9.下面关于解释程序的描述正确的是__B___。 (1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为打开编译程序技术的僵局而开发的 A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3) 10.解释程序处理语言时 , 大多数采用的是__B___方法。 A.( ) 源程序命令被逐个直接解释执行 B.( ) 先将源程序转化为中间代码 , 再解释执行 C.( ) 先将源程序解释转化为目标程序 , 再执行 D.( ) 以上方法都可以 11.编译过程中 , 语法分析器的任务就是__B___。

编译原理概念总结

第一章 引论 ? 为什么要用编译器 ? 与编译器相关的程序 ? 翻译步骤 ? 编译器中的主要数据结构 1、语言处理器 1、简单的说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。 2、编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误。 3、使用编译器是为了提高编程的速度和准确度。 4、与编译器相关的程序:解释程序(interpreter )、汇编程序(assembler )、连接程序(linker )、装入程序(loader )、预处理器(preprocessor )、编辑器(editor )、调试程序(debugger )、描述器(profiler )、项目管理程序(project manager )。 5、解释器是另一种常见的语言处理器。它并不通过翻译的方法生成目标程序。从用户的角度来看,解释器直接利用用户提供的输入执行源程序中指定的操作。 6、一个源程序可能被分割成多个模块,并存放于独立的文件中。把源程序聚合在 一起的任务有时会由一个被称为预处理器(preprocessor )的程序独立完成。预处理器还负责把那些称为宏的缩写形式转换为源语言的语句。 7、连接器(linker )能够解决外部内存地址的问题。 8、加载器(loader )把所有的可执行目标文件放到内存中执行。 2、一个编译器的结构 Output Source Program Front end Back end Object

1、将编译器看成黑盒,则源程序映射为在语义上等价的目标程序,而这个映射由两部分组成:分析部分和综合部分。 2、分析部分把源程序分解成多个组成要素,并在这些要素之上加上语法结构。 3、综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序。 4、编译器的第一个步骤:词法分析(lexical)或扫描(scanning)。词法分析器读入组成源程序的字符流,并且将它们组成有意义的词素(lexeme)的序列。词法分析器产生词法单元(token)。 5、分隔词素的空格会被词法分析器忽略掉。 6、编译器的第二个步骤:语法分析(syntax)或解析(parsing)。语法分析器使用由词法分析器生成的各个词法单元的第一个分量来创建树形的中间表示。 7、语义分析(static semantic analysis):语义分析器使用语法树和符号表中的信息 来检查源程序是否和语言定义的语义一致。它同时也收集类型信息,并把这些信息存放在语法树或符号表中,以便在随后的中间代码生成过程中使用。语义分析的一个重要部分是类型检查(type checking)。编译器检查每个运算符是否具有匹配的运算分量。 8、总的说,编译器的翻译步骤是:扫描程序----语法分析程序----语义分析程序---- 源代码优化程序----代码生成器----目标代码优化程序。 3、编译器结构中的主要数据结构 1、记号(token) 2、语法树(syntax tree) 3、符号表(symbol table) 4、常数表(literal table) 5、中间代码(intermediate code) 6、临时文件(temporary file) 4、将编译器分成了只依赖于源语言(前端( front end))的操作和只依赖于目 标语言(后端( back end))的操作两部分。 第二章词法分析 ? 扫描处理 ? 正则表达式 ? 有穷自动机 ? 从正则表达式到D FA ? 利用L e x自动生成扫描程序 1、Tokens记号标记:identifiers、keywords、integers、floating-point、symbols、strings、comments 1、使用正则表达式去描述程序语言tokens 2、一个正则表达式是归纳确定 3、一个正则表达式R描述一组字符串集合L(R) 4、L(R) = the language defined by R 5、所有的token都能用正则表达式表示 2、正则表达式: 1、基本正则表达式:他们是字母比哦啊中的单个字符且自身匹配

程序设计语言编译原理_考试重点(终)

1 2 3 开 4 1 0 1 1 1 0 1 3 0 1 2 a a a ,a b b b 第一章 引论 1.编译程序分几个阶段,每个阶段的任务是什么? 五个阶段:词法分析、语法分析、语义分析、中间代码生成、优化、目标代码生成 词法分析任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。(如基本字,标识符,常数,算符和界符)。 语法分析任务:在词法分析基础上,将单词符号串转化为语法单位(语法范畴)(短语、子句、句子、程序段、程序),并确定整个输入串是否构成语法上正确的程序。 语义分析和中间代码生成任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。 代码优化任务:对于代码(主要是中间代码)进行加工变换,以期能够产生更为高效(省时间和空间)的目标代码 。 目标代码生成任务:将中间代码变换成特定机器上的低级语言代码 2.表格管理和出错处理:编译各阶段均须维持表格并进行表格管理,建表的技术支持是数据结构,表格的分类、结构、处理方法决定于语言及机器,还有优化措施。一个好的编译程序应该:全,最大限度发现错误;准,准确指出错误的性质和发生地点;局部化,将错误的影响限制在尽可能小的范围内。源程序中的错误通常分为 :语法错误,不符合语法(或词法)规则的错误,如单词拼写错误、括号不匹配 ... 语义错误,不符合语义规则的错误,如说明错误、作用域错误、类型不匹配 ... 3.前端、后端:编译前端主要由与源语言有关,但与目标机无关的那些部分组成。编译后端包括编译程序中与目标机有关的那些部分。 4.遍:根据系统资源的状况、运行目标的要求……等,可以将一个编译程序设计成多遍扫描的形式,在每一遍扫描中,完成不同的任务。遍可以和阶段相对应,也可无关。单遍代码不太有效。遍 是对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。 5.“运算符与运算对象类型不符”属于语义错误 6.算法逻辑上的错误属于语义错误 7.编译程序:能够把某一种语言程序转换成另一种语言程序,而后者与前者在逻辑上是等价的一种程序。通常是从高级语言转换成为低级语言。 8.解释程序:它以该语言写的源程序作为输入,但是不产生目标代码,而是边解释边执行源程序本身。 9.诊断编译程序:专门用于帮助程序开发和调试的编译程序。 10.优化编译程序:着重于提高目标代码效率的编译程序。 11.宿主机:运行编译程序的计算机。 12.目标机:运行编译程序所产生目标代码的计算机。 13.交叉编译程序:一个程序产生不同 于宿主机的机器代码的程序。 14.可变目标编译程序:如果不需要重新编译程序中与机器无关的部分就能改变目标机,则该编译程序就叫做可变目标编译程序。 PS :世界上第一个编译程序——FORTRAN 编译程序——20世纪50年代 15.编译过程 第一阶段:词法分析——词法分析器 1)任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),标示符,常熟,算符和界符。2)单词符号是语言的基本组成成分,是人们理解和编程的基本要素。3)描述词法规则的有效工具是:正规式和有限自动机 第二阶段:语法分析——(词法)分析器 1)任务:在词法分析的基础上,根据语言的语法规则,把单词符号分解成各类语法单位,如“短语”、“子句”、“句子”、“程序段”和“程序”等。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。2)语法分析所依据的是语言的语法规则。通常是上下文无关文法描述、3)词法分析是一种线性分析,而语法分析是一种层次结构分析。 第三阶段:语义分析和中间代码产生——语义分析器 1)任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。2)对每种语法范畴进行静态语义检查—>进行中间代码的翻译。3)语义分析所依据的是语言的语义规则,通常使用属性文法描述语义规则。4)中间代码:一种含义明确、便于处理的记号系统,它通常独立于具体的硬件。5)中间代码的四元式表示形式。此外还有三元式、间接三元式、逆波兰记号和树。 第四阶段:优化——优化器 1)任务:在于前段产生的中间代码进行加工交换,,以期在最后阶段能产生更为高效(省时间和空间)的目标代码。2)优化的主要方面有:公共字表达式、优化循环、删除无用代码等等。3)优化所依据的原则:程序的等价变化原则。 第五阶段:目标代码生成——目标代码生成器 1)任务:吧中间代码(或经优化处理后)变换成特定机器上的低级语言代码。2)形式:绝对指令代码或可重定位的指令代码或汇编指令代码。 16.编译程序的结构 语法错误:指源程序中不符合语法(或词法)规则的错误,他们可在词法分析和语法分析时检测出来 语法错误:指源程序中不符合语义规则的错误,一般在语义分析时检测出来,有的要在运行时才能检测出来。通常有:说明错误、作用域错误、类型不一致等 遍:对源程序或源程序的中间结果从头 到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。 编译前段:由与源程序有关但与目标程序无关的那些部分组成。包括词法分析、语法分析、语义分析与中间代码和一些优化工作。 编译后端:编译程序中与目标机有关的那些部分,后端不依赖于源语言而仅仅依赖于中间语言。 集成化的程序设计环境的特点:它将相互独立的程序设计工具集成起来,以使为程序员提供完整的、一体化的支持,从而进一步提高程序开放效率,改善程序质量。 17.T 形图 第二章 高级语言及其语法描述 1. 程序语言是由语法和语义两方面定义的。 2.上下文无关文法的定义:四个组成部分:一组终结符号、一组非终结符号、一个开始符号、一组产生式。一个上下文无关文法G 是一个四元式(VT,VN,S, P ),其中: VT :是非空有限集,它的每个元素是终结符号;VN :是非空有限集,它的每个元素是非终结符号, VT ∩VN=Φ,VT ∪VN=V;S :S ∈VN ,称为开始符号;P :产生式集合(有限),每个产生式形式是{ P->α| P ∈VN , α∈(VT ∪VN)*,S 至少一次为P }; 3.推导、最左推导、最右推导:1、推导:如两个串u0、un ,存在一个串序列u0=>u1=>…=>un ,则我们称这个序列是从u0到un 的一个推导。 U1un :表示从u0出发,经一步或若干步,可推导出un. U1 un :表示从u0出发,经0步 或若干步,可推导出un. 最左推导是指,任何一步α=>β都是对α中的最左非终结符进行替换的。最右推导是指,任何一步α=>β都是对α中的最右非终结符进行替换的。 4.语法树:在编译中产生语法树是为了语法分析。 5、什么是句型?什么是句子?什么是语言? 假定G 是一个文法,S 是它的开始符号。如果S=> α,则称α是一个句型。仅含终结符的句型是一个句子。文法G 所产生的句子的全体是一个语言。 语言是由句子组成的集合,是由一组记号所构成的集合。 6.乔姆斯基把文法分成4种类型,即0型文法、1型文法、2型文法和3型文法。0型文法也称为短语文法。1型文法也称为上下文有关文法。2型文法也称为上下文无关文法。3型文法也称为正规文法。与程序语言语法有关的文法是上下文无关文法。 第三章 词法分析 1.状态转换图:使用状态转换图是设计词法分析程序的一种好途径,状态转换图是一张有限方向图。在状态转换图中,结点代表状态,用圆圈表示。一个状态转换图可用于识别(或接受)一定的字符串。 2.确定的有限自动机(DFA )、非确定有限自动机(NFA )。五元式:有限状 态集合、有穷字母表、转换函数、唯一的初始状态、终止状态集合。一个确定有限自动机(DFA ) M 是一个五元式:M = (S,∑,δ,s0 ,F) ,其中S 是一个有限集,它的每个元素称为一个状态,∑是一个有穷字母表,它的每个元素称为一个输入字符,δ是一个从S ×∑至S 的单值部分映射。 δ(s,a)=s ′意味着:当现行状态为、输入字符为a 时,将转换到下一状态s ′。我们称s ′为s 的一个后继状s0∈S 是唯一的初态F 是一个终态集(可空)。一个非确定有限自动机(NFA ) M 是一个五元式:M = (S,∑,δ,S0 ,F) ,其中S 是一个有限集,它的每个元素称为一个状态,∑是一个有穷字母表,它的每个元素称为一个输入字符,δ是一个从S ×∑*至S 的子集的映射,即δ: S ×∑* → 2s ,S0∈S 是唯一的初态,F 是一个终态集(可空)。 3.设有确定的有限自动机DFA M = ({0,1,2,3},{a,b},δ,0,{3}),其中δ为:δ(0,a)=1 δ(0,b)=2 δ(1,a)=3 δ(1,b)=2 δ(2,a)=1 δ(2,b)=3 δ(3,a)=3 δ(3,b)=3 请画出状态转换矩阵和状态转化图。相应的状态转换矩阵如下表: 对应的状态转换图 4.设计一个DFA,要求能够识别∑={0,1}上能被5整除的二 进制数。 5.词法分析的流 程 第四章 语法分析——自上而下分析 1.语法分析器的功能:识别语法成分,并作语法检查. 2.自上而下语法分析方法遇到的主要问题是回溯和左递归。 3.把一个文法改造成任何非终结符的所有候选式首符集两两不相交的方法是提取公共左因子。 4.LL (1)分析法中,第一个L 表示从左到右扫描输入串,第二个L 表示最左推导。1表示分析时每步只需向前看一个符号。 5.LL (1)文法的条件:1文法不含左递归2)FIRST(α)∩ FIRST(β) = φ3) 算符 左操作数 右操作数 结果 状态 a b 0 1 2 1 3 2 2 1 3 3 3 3

相关文档
最新文档