编译原理复习资料
- 格式:docx
- 大小:1.42 MB
- 文档页数:15
(1) 简述规范归约的基本思想。
(第五章课件第5张)用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。
(2) 阐述编译程序各个组成部分主要完成的工作。
(课本P2~P4)词法分析的任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。
语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位。
语义分析与中间代码产生:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译。
优化:在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效的目标代码。
目标代码生成:把中间代码变换成特定机器上的低级语言代码。
(3) 什么是编译器的前端和后端,这样划分有何意义?(课本P7)编译器粗略分为词法分析,语法分析,类型检查,中间代码生成,代码优化,目标代码生成,目标代码优化。
把中间代码生成及之前阶段划分问编译器的前端,那么后端与前端是独立的。
后端只需要一种中间代码表示,可以是三地址代码或四元式等,而这些都与前端生成的方式无关。
也就是不论你前端是用fortran 还是c/c++,只要生成了中间代码表示就可以了,后端是不管你是用哪种语言生成的。
(4) 乔姆斯基把文法分为哪几种类型?对这几种类型文法作简要说明。
(课本P34)把文法分成四种类型:0,1,2,3型。
与上下文无关文法一样,它们都由四部分组成,但对产生式的限制有所不同。
0型(短语文法,图灵机):产生式形如:α→β其中:∈α (VT ⋃ VN)*且至少含有一个非终结符;∈β (VT ⋃ VN)*1型(上下文有关文法,线性界限自动机):产生式形如:α→β其中:|α| ≤ |β|。
仅Sε→例外,但此时S不得出现在任何产生式的右部。
2型(上下文无关文法,非确定下推自动机):产生式形如: A →β其中:A∈ VN;∈β (VT ⋃ VN)*。
1.简要说明语义分析的基本功能。
答:语义分析的基本功能包括: 确定类型、类型检查、语义处理和某些静态语义检查。
2.考虑文法G[S]: S → (T) | a+S | a T → T,S | S 消除文法的左递归及提取公共左因子。
解:消除文法G[S]的左递归:S→(T) | a+S | a T→ST′ T′→,ST′| ε 提取公共左因子:S→(T) | aS′ S′→+S | ε T→ST′T′→,ST′| ε3.按照三种基本控制结构文法将下面的语句翻译成四元式序列:while (A<C ∧B<D) { if(A ≥ 1) C=C+1;else while (A ≤ D)A=A+2;}。
解:该语句的四元式序列如下(其中E1、E2和E3分别对应A<C∧B<D、A≥1和A≤D,并且关系运算符优先级高):100 (j<,A,C,102) 101 (j,_,_,113)102(j<,B,D,104) 103 (j,_,_,113) 104 (j=,A,1,106) 105 (j,_,_,108) 106 (+, C, 1, C) 107 (j,_,_,112) 108 (j≤,A,D,110) 109 (j,_,_,112) 110 (+, A, 2, A) 111 (j,_,_,108) 112 (j,_,_,100) 11310.短语------令G是一个文法,S划文法的开始符号,假定αβδ是文法G的一个句型,如果有SαAδ且Aβ,则称β是句型αβδ相对非终结符A的短语。
15.句柄------一个句型的最左直接短语。
18.素短语------素短语是指这样一个短语,至少含有一个终结符,并且,除它自身外不再含任何更小的素短语。
3.语法树句子的树结构表示法称为语法树(语法分析树或语法推导树)。
给定文法G=(V N,V T,P,S),对于G的任何句型都能构造与之关联的语法树。
这棵树具有下列特征:(1)根节点的标记是开始符号S。
编译原理复习编译原理复习⼀、基本概念(填空15分,选择10分,简答:15分)1、编译程序按扫描源程序的遍数分类可以分为哪两类?⼀遍扫描、多遍扫描2、⾼级语⾔的单词分类有哪些?基本字、运算符、标识符、常数、界符3、⼆义性⽂法,⼆义性语⾔的定义?⼆义性⽂法:⽂法G对某句型存在⾄少两种不同的语法树。
⼆义性语⾔:某语⾔对应的任意⼀种⽂法都是⼆义性⽂法4、DFA的定义及组成:确定的有穷⾃动机; M=(K,∑,f, S,Z)K是⼀个有穷集,它的每个元素称为⼀个状态;∑是⼀个有穷字母表,它的每个元素称为⼀个输⼊符号,所以也称∑为输⼊符号表; F是转换函数,是K×∑→K上的映像S∈K,是唯⼀的⼀个初态Z K,是⼀个终极态,终态也称为接收状态或结束状态5、最左推导、规范推导的定义:最左推导:若x和y是符号串α中有两个以上的⾮终结符号时,对推导的每⼀步坚持把α中的最左⾮终结符号进⾏替换,称为最左推导。
规范推导:通常,我们把能由最左(右)推导推出的句型称为左(右)句型。
另外,也常把最右推导称为规范推导,⽽把右句型称为规范句型。
6、确定的⾃顶向下分析⽅法通常有哪两种?采⽤确定的⾃顶向下分析的前提条件是什么?递归⼦程序法、预测分析法对每⼀个⾮终结符A的两个不同产⽣式,A→α,B→β,满⾜SELECT(A→α)∩SELECT(B→β)=?,其中αβ不同时能→ε7、词法分析的常⽤⽅法有哪两种?⾃顶向下;⾃底向上。
8、简单优先分析法、算符优先分析法属于、LR(0)分析法分别属于何种归约?规范规约、⾮规范规约、规范规约9、⾼级程序设计语⾔的翻译⽅式主要有哪两种,⼆者的根本区别在于哪⾥?⽅式:编译程序、解释程序区别:⽣不⽣成⽬标代码10、词法分析程序和语法分析程序的任务分别是什么?词法分析是编译的第⼀阶段,它的主要任务是按语⾔的词法规则,从左⾄右逐个字符地对源程序进⾏扫描,从源程序中识别出每个单词,并把每个单词转换成它们的内部表⽰,即所谓的token,同时进⾏词法检查。
第1部分一简答题1.编译程序按功能分为哪几个阶段?各个阶段的主要功能?2.实现高级语言程序的途径有哪几种?它们之间的区别?3.给出描述非0数字作为开始符的奇数字符串的正则表达式或正则式。
4.判断字符串a n b n(n >0)是否可用确定自动机识别?如果能,则画出自动机,否则说明原因5.对如下文法:G[S]:S → a b S | a a B | a dB → b b B | b分别给出句子abaabbb和ad的句柄6.有如下文法,给出每个产生式的Predict集。
P → begin S endS → id := E ; S |E → n | id7.什么是可规约活前缀?举一例说明。
8.通过合并LR(1)文法中的同心状态得到的LALR(1)文法可能会产生哪些冲突?一定不会产生哪些冲突?9.设对偶表(L,N)分别表示程序在当前位置的层数和偏移量,确定下面程序段中括号部分的内容。
假设系统规定整型(int)变量占1个单元,实型(real)变量占2个单元。
(L, N) Type at = array of [1..10] of int;(①) var x :real;(②) function f ( ( ?,M) var a: at,(③) b: at,(④) var x: real ) : int10.给出活动记录空间结构?并给出各部分的存储对象?11.有如下文法:G[S]:S → ( L ) | aL → S PP → , S P |给出该文法的动作文法打印每个a的嵌套深度。
例如(a,(a),(a))打印1,2,2。
12.文法可分为几类;各举一例。
13.Display表的作用?14.如下是当前执行某个过程时的活动记录,设变量x的层数和偏移量分别为L和Off,说明如何访问变量x。
15.当实参为变量,形参分别为变参和值参时,传参的区别。
二、说明如下文法是否是LL(1)文法,若不是,将其转换为LL(1)文法。
1》编译程序的框架图与功能块:(1)画出编译程序的总体结构,并简述各部分的主要功能:七个部分(2)编译程序的结构分为几个阶段,各阶段的任务是什么?答编译程序总框架(1)词法分析器,又称扫描器,输入源程序,进行词法分析,输出单词符号。
(2)语法分析器,简称分析器,对单词符号串进行语法分析(根据语法规则进行推导或规约),识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”。
(3)语义分析与中间代码产生器,按照语义规则对语法分析器归约出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间代码。
(4)优化器,对中间代码进行优化处理。
(5)目标代码生成器,把中间代码翻译成目标程序。
(6)表格管理,登记源程序的各类信息,编译各阶段的进展状况。
(7)出错管理,把错误信息报告给用户。
编译程序的结构分为五个阶段:(1)词法分析.任务是:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),如基本字,标识符,常熟,算符和界符。
(2)。
语法分析,任务是:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位(语法范畴)。
(3)语义分析与中间代码产生。
任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。
(4)优化。
任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效(省时间和空间)的目标代码。
(5)目标代码生成。
任务是:把中间代码(或优化出理之后)变换成特定机械上的低级语言代码。
2》.重要概念:a. 编译程序:是指能够把源语言程序转换成逻辑上等价的目标语言程序的一个程序。
b. 单词符号:是语言的基本组成成分,是人们理解和编写程序的基本要素,是语言中具有独立意义的最基本结构,它一般包括:基本字、标识符、常数、运算符和界符等c. 中间代码:是一种含义明确,便于处理的记号系统,它通常独立于具体的硬件。
1.编译程序的工作过程一般可包括词法分析、语法分析、语义分析、中间代码产生与优化和目标代码生成等几个阶段,同时还有表格管理和出错处理。
2.LEX是用于词法分析的工具,Y ACC是用于语法分析的工具。
3.解释程序和编译程序的区别在于是否生成目标代码。
4.任一文法终结符集合和非终结符集合的交集是空集。
5.描述程序设计语言语法的BNF方法中,“::=”表示定义为,“|”表示或,[W]表示W可出现0或1次,{W}表示W可出现n(n≥0)次。
6.已知文法G[G]: S→aSb|ab|ε,该文法描述的语言L(G)={a n b n|n≥0}。
7.单词的描述工具有正规文法、正规式和有穷自动机,他们之间存在等价性。
8.高级程序设计语言的单词通常分为五类,它们是关键字、标识符、常数、运算符和界符。
9.正则式中的“|“表示或,“*”表示闭包。
10.自顶向下语法分析方法会遇到的主要问题有回溯,以及左递归带来的无限循环。
11.算符优先分析法每次归约当前句型的最左素短语,规范归约中每次归约的是当前句型的句柄。
12.对文法G[G]: S→a|b|cTc,T→S|TdS而言,FIRSTVT(T)={a,b,c,d}。
13.活前缀是指规范句型的一个前缀,这种前缀不含句柄之后的任何符号。
14.对文法G[G]: E→E*T|T, T→T+i|i的句子1+2*8+6进行归约后的结果为42(23,42)。
15.在LR(0),SLR(1),LR(1),LALR(1),四种文法中,描述能力最强的是LR(1)。
1.0型文法中每条规则左部至少包含一非终结符(√)。
2.3型文法一定是2型、1型、0型文法(√)。
3.对无二义性文法而言,无论最左推导还是最右推导,同一个句子的语法树是一样的。
4.若一个文法是递归的,则其语言中句子的个数必定是无穷个。
(√)5.文法规则右部的符号一定是终结符。
(×)6.语法树描述的是一个文法。
(×)7.若G是正则文法,则G一定是上下文无关文法。
复习汇总一、第一章概述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章1、编译程序是一种翻译程序,它将高级语言所写的源程序翻译成等价的机器语言或者汇编语言的目标程序。
2、编译程序是计算机系统中重要的系统软件!3、解释程序与编译程序的主要区别是解释程序在执行过程中不产生目标程序。
4、编译的各个阶段。
答:整个编译过程可以分为5个阶段:词法分析,语法分析,语义分析及中间代码生成,代码优化和目标代码生成。
5、编译程序的结构框图或步骤。
6、遍(趟):是对源程序或源程序的中间结果从头到尾扫描一遍,并作有关加工处理,生成新的中间结果或目标程序的过程。
■第2章1、符号串的基本运算。
2、简单的说文法由产生式组成;产生式中的符号分为两类:终结符号和非终结符号。
3、推导(最左、最右)、句型、句子、短语、句柄4、乔姆斯基层次中:L3 ⊂ L2 ⊂ L1 ⊂ L0■第2章例题已知文法G[E]:E→T|E+T|E-TT→F|T*F|T/FF→(E)|i(1)该文法的开始符号是什么?(2)请给出该文法的终结符号集合VT和非终结符号集合VN。
(3)找出句型T+T*F+i的所有短语、直接(简单)短语、句柄。
■第3章1、词法分析程序的输出是单词符号序列。
2、DFA的三种表示形式——状态转移图、状态转换表和五元组表示(Q, ∑, f, S, Z );3、正规式向DFA的转换:(1)正规式——NFA;(转换原则见下页)(2)NFA——DFA;(3)DFA的最小化。
4、DFA向正规式的转换。
正则式向NFA转换的原则:例:构造与正则表达式R=ba(a|b)*等价的状态最少的DFA,并写出该DFA的五元组形式或状态转换表。
■第4章1、语法分析方法的各种分类;2、LL(1)分析方法。
提示:在此算法中注意First集和Follow集的求法。
并且一定要注意分析过程中步骤要完整。
(分析步骤见下页总结)例:文法:S◊a|^|(T) T◊T,S|S试判断该文法是否是LL(1)文法。
习题4:P100 4.3 4.7 4.9■LL(1)分析方法相关知识总结1、消除文法中的左递归或提取左因子;(1)简单直接左递归的消除A →βA’A →Aα| β→A’ →αA’| ε(2)将文法G:A→αβ|αγ提取左因子。
编译原理复习《编译原理》第⼀章:绪论1.翻译器:把⼀种语⾔变换到另外⼀种语⾔的软件。
这两种语⾔分别称为源语⾔和⽬标语⾔。
2.编译器:⼀种翻译器,它的⽬标语⾔⽐源语⾔低级。
3.典型的编译器可以划分成6个逻辑阶段:词法分析,语法分析,语义分析,中间代码⽣成,代码优化,代码⽣成。
4.按照对⽬标机器的依赖性,把编译过程分成前端(依赖于源语⾔,独⽴于⽬标机器)和后端(依赖于⽬标机器,独⽴于源语⾔,只与中间语⾔有关(从中间代码⽣成⽬标代码))。
5.前端包括:词法分析,语法分析,语义分析,中间代码⽣成。
6.后端包括:代码优化,代码⽣成。
7.解释器:不同于编译器的另⼀类语⾔处理器,直接执⾏源程序所指定的运算。
解释器的执⾏效率⽐编译器低,因为解释器⽆法解开循环。
8.遍:编译的⼏个阶段常⽤⼀遍(pass)扫描实现,⼀遍扫描包括读⼀个输⼊⽂件和写⼀个输出⽂件。
《编译原理》第⼆章:词法分析⼀些概念:1.词法单元:⼜称单词,是编程语⾔中合法的字符串。
2.词法记号:满⾜某种规则的词法单元,采⽤同⼀种记法——词法记号。
该规则称为模式。
3.模式:描述词法单元与词法记号对应关系的规则。
是描述源程序中某个记号的词法单元集合的规则。
4.字母表:符号的有限集合,例:∑={0,1}串:符号的有穷序列,例:0110,ε语⾔:字母表上的⼀个串集{ε,0,00,000,…},{ε},?正规式(运算符的优先级:*>连接运算>|)N F A是这样⼀个数学模型,包括1)状态集合S2)输⼊字母表∑3)转换函数m o v e:S?(∑?{ε})→P(S)4)唯⼀的初态s∈S5)终态集合F?SD F A是这样⼀个数学模型,包括1)状态集合S2)输⼊字母表∑3)转换函数m o v e:S?∑→S4)唯⼀的初态s∈S5)终态集合F?S第三章语法分析3.1 上下⽂⽆关⽂法上下⽂⽆关⽂法是四元组(V T , V N, S , P )1) V T: 终结符集合(⾮空有限集合,记号名是其同义词)2) V N: ⾮终结符集合(⾮空有限集合)3) S : 开始符号4) P : 产⽣式集合,产⽣式形式 : A →α上下⽂⽆关⽂法没有强制的顺序关系。
编译原理复习《编译原理》复习README来源⽹络&书本&PPT整理截取了⽼师课上讲解or布置的题⽬⼀些题⽬懒得贴答案了,写了些注意事项第1 章引论运⾏编译程序的计算机:宿主机运⾏编译程序所产⽣的⽬标代码的计算机:⽬标机第1 题解释下列术语:(1)编译程序:如果源语⾔为⾼级语⾔,⽬标语⾔为某台计算机上的汇编语⾔或机器语⾔,则此翻译程序称为编译程序。
(2)源程序:源语⾔编写的程序称为源程序。
(3)⽬标程序:⽬标语⾔书写的程序称为⽬标程序。
(4)编译程序的前端:它由这样⼀些阶段组成:这些阶段的⼯作主要依赖于源语⾔⽽与⽬标机⽆关。
通常前端包括词法分析、语法分析、语义分析和中间代码⽣成这些阶段,某些优化⼯作也可在前端做,也包括与前端每个阶段相关的出错处理⼯作和符号表管理等⼯作。
(5)后端:指那些依赖于⽬标机⽽⼀般不依赖源语⾔,只与中间代码有关的那些阶段,即⽬标代码⽣成,以及相关出错处理和符号表操作。
(6)遍:是对源程序或其等价的中间语⾔程序从头到尾扫视并完成规定任务的过程。
第2 题⼀个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。
(区别编译程序的六个阶段)答案:⼀个典型的编译程序通常包含8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码⽣成程序、中间代码优化程序、⽬标代码⽣成程序、表格管理程序和错误处理程序。
其各部分的主要功能简述如下。
词法分析程序:输⼈源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。
语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。
语义分析程序:进⾏语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。
中间代码⽣成程序:按照语义规则,将语法分析程序分析出的语法单位转换成⼀定形式的中间语⾔代码,如三元式或四元式。
中间代码优化程序:为了产⽣⾼质量的⽬标代码,对中间代码进⾏等价变换处理。
教材资料授课顺序:1教学目的:正确理解什么是编译程序;了解编译程序工作的基本过程及其各阶段的基本任务;熟悉编译程序总框;了解编译程序的生成过程和构造工具。
教学重点与难点:编译程序工作的基本过程及其各阶段的基本任务,编译程序总框。
授课学时:2学时教学方式:多媒体讲授教学内容:第一章引论1.1什么是编译程序一、基本概念1、翻译程序:是指这样的一种程序,它能够把一种语言程序(源语言程序)转换成另一种功能等价的语言程序(目标语言程序)。
2、编译程序是一种翻译程序,其源程序是高级语言,目标语言程序是低级语言。
通常是一次性翻译方式。
如TC等高级语言编译程序。
3、解释程序也是一种翻译程序,它与编译程序的区别:立即执行源程序,通常是逐句翻译执行。
如BASIC、SQL、JA V A的BYTECODE解释程序等。
二、高级语言程序的处理过程高级程序设计语言程序的典型处理过程如下图所示:1.2编译过程和编译程序结构一、编译过程的阶段划分一般编译程序的工作过程按阶段进行,每个阶段将源程序从一种表示形式转换成另一种表示形式。
典型的阶段划分方法是将整个编译过程分为如下六个阶段:1、词法分析:任务:对构成源程序的字符串进行扫描和分解,识别出单词(如标识符等)符号。
输入:源程序输出:单词符号序列例子:有待分析源程序:main(){int x=10,y;}词法分析后的输出:1)保留字:main2)界符:左圆括号(3)界符:右圆括号)4)界符:左大括号{5)保留字:int6)标识符:x7)运算符:=8)常数:10 ,界符:,9)标识符:y10)界符:;11)界符:右大括号}2、语法分析任务:根据语言的语法规则对单词符号串(符号序列)进行语法分析,识别出各类语法短语(可表示成语法树的语法单位),判断输入串在语法上是否正确。
输入:单词序列输出:语法分析后的单词序列3、语义分析任务:按语义规则对语法分析器归约出的语法单位进行语义分析,审查有无语义错误,为代码生成阶段收集类型信息,并进行类型审查和违背语言规范的报错处理。
一、问答题(共25分)1.什么是翻译程序?什么是编译程序?(4分)2.简述编译过程各阶段的主要任务。
(5分)3.什么是上下文无关文法?(3分)4.什么是语法制导翻译法? (3分)5.写出下列状态转换图对应的词法分析程序。
(5分)字母或数字6.写出下面表达式的逆波兰表示和四元式序列(5分)–(A-B)/D*(C/D+E)二、构造正规式1(0|1)*101相应的DFA.(共15分)三、语法分析题(50分)1.简述确定的和不确定的自顶向下语法分析的基本思想。
(10分)2.已知文法G(P):(10分)P→begin d;X endX→d;X|sYY→;sY|ε(1)画出句型begin d;s;s Y end的语法树(2)写出该句型的短语、直接短语、句柄。
3.设文法G(S):(30分)S→SaB | bBA→SaB→Ac(1)将此文法改造为LL(1)文法。
(2)构造各非终结符的First集和Follow集。
(3)为改造后的文法构造递归下降分析程序。
四、语义分析(10分)已知下列文法及其对应的语义动作,采用自下而上的翻译过程,分析当输入串是aacbb时,其输出是什么,写出分析过程。
1. A→aB { print “1”}2. A→c { print “10” }3. B→Ab { print “100”}一、问答题:1. 将一种语言翻译成另外一种语言的程序成为翻译程序。
将高级语言翻译成低级语言的程序称为编译程序。
2. 分为词法分析、语法分析、中间代码生成、代码优化、目标代码生成几个阶段(任务略) 3. 由一组终结符号,一组非终结符号、一个开始符号、一组产生式构成。
其中每个产生式形如:A →β,A 是非终结符,β是由终结符和非终结符构成的符号串。
4. 根据每个产生式所对应的语义子程序进行翻译的办法。
5.If (IsLetter ()) BeginWhile (IsLetter() or IsDigit())Begin Concat();GetChar();EndRetract();Code:=Reserve(); If (code=0)Begin Value:=InsertId(strToken);return ($ID,value);End Else return (code,-); end6.答:–(A-B)/D*(C/D+E) 逆波兰式:AB-@D/CD/E+*四元式序列: (-,A,B,T1) (-,T1,_,T2) (/,T2,D,T3) (/,C,D,T4) (+,T4,E,T5) (*,T3,T5,T6)二、解:确定化重新命名,令AB 为B 、AC 为C 、ABY 为DDFA : 1三、1.(1)确定的自顶向下语法分析的基本思想:从文法的开始符号出发,根据当前的输入符号和其它信息,唯一地确定选用哪个产生式替换相应的非终结符往下推导,构造分析树。
编译原理复习资料一、填空题.1.编译程序是一种程序,能够将某一种高级语言编写的源程序改造成另一种低级语言编写的目标程序,它们在逻辑上等价,完成相同的工作。
2.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是_二义性的__。
3.词法分析程序的功能是从左到右扫描源程序字符串,根据语言的词法规则识别出各类单词符号,并以__单词符号或单词符号表示的源程序_的形式输出。
4.编译程序一般划分为词法分析、语法分析、语义分析、中间代码生成、和代码优化目标代码生成六个阶段;除此以外,还有两个重要的基本工作,它们是表格管理和出错处理。
5.目前,语法分析方法有两大类,分别为自上向下的分析方法和__自下而上_分析方法。
自上而下的分析方法是从___文法的开始符号__出发,根据文法规则正向推导出给定句子的方法。
6.属性文法是编译技术中用来说明程序设计语言的___语义__的工具。
7.若源程序是用高级语言编写的,___目标程序__是机器语言程序或汇编程序,则其翻译程序称为 ____编译程序___。
8.扫描器(程序)的任务是从_字符串__中识别出一个个_单词符号_。
9.一个LR分析器包括三部分:总控程序、_分析表_和分析栈。
10.自顶向下的语法分析方法的基本思想是:从文法的_开始符号_出发,根据给定的输入串并按照文法的产生式一步一步的向下进行__正向推导_,试图推导出文法的给力句子__,使之与给定的输入串匹配。
11.按Chomsky分类法,文法被分成___4(0~3型文法)__类。
12.局部优化是在__基本块___范围内进行的一种优化。
13.编译程序是一种_翻译_程序,它将某一种高级语言编写的源程序改造成另一种低级语言编写的目标程序,源程序和目标程序在逻辑上等价,完成相同的工作。
14.编译程序与解释程序的根本区别为__解释程序在执行中不产生目标程序_。
15.语法分析的任务是识别给定的终结符号串是否为给定文法的___句子__。
编译原理总复习总复习⼀、基本概念:1、请简单解释编译程序的概念。
答:编译程序是现代计算机系统的基本组成部分之⼀。
简⽽⾔之, 编译程序就是⼀种语⾔翻译程序。
所谓翻译程序,是指这样⼀个程序,它能将⾼级程序设计语⾔程序翻译成逻辑上等价的低级语⾔(汇编语⾔,机器语⾔) 程序。
编译程序⼀般由词法分析程序、语法分析程序、语义分析程序、中间代码⽣成程序、⽬标代码⽣成程序、代码优化程序、表格管理程序和出错处理程序等成分构成。
2、请解释编译程序的前端和后端的概念,试问前端通常包括那些阶段,后端包括那些阶段?(10分)答:编译程序的前端只依赖于源语⾔,由⼏乎独⽴于⽬标机器的阶段或阶段的⼀部分组成。
编译程序的前端通常包括词法分析程序、语法分析程序、语义分析程序、中间代码⽣成程序及相关的表格管理程序和出错处理程序。
编译程序的后端是指编译器中依赖于⽬标机器的部分,它们⼀般独⽴于源语⾔,⽽与中间代码有关。
通常包括⽬标代码⽣成程序、代码优化程序以及相关的表格管理程序和出错处理程序。
3、语⾔的语法描述⽅法有其三,请列举出来。
答:⽤⾃然语⾔描述语⾔的语法,⽤语法图描述语⾔的语法和⽤巴科斯-瑙尔范式及扩充的巴科斯-瑙尔范式(EBNF)两种形式给出语⾔的语法描述。
答:根据Chomcky⽂法的定义,该⽂法是2类⽂法,即上下⽂⽆关⽂法。
4、请写出Chomcky关于⽂法的定义。
答:Chomcky⽂法的定义:⽂法G定义为四元组,记为:G=(V N,V T,P,S)其中:V N—⾮空有限的⾮终结符号集V T—⾮空有限的终结符号集P —产⽣式集S —开始符号/识别符号5、已知⽂法:(20分)E→X|E+XX→Y|X*YY→(E)|i请判定该⽂法是那类⽂法?5、简单说明词法分析程序的主要任务。
答:词法分析程序是编译程序的⼀个构成成分,它的主要任务是扫描源程序,按构词规则识别单词,并报告发现的词法错误。
6、请简单介绍确定的有穷⾃动机。
答:确定的有穷⾃动机也称有限⾃动机,它是作为⼀种识别装置,它能准确地识别正规集,即识别正规⽂法所定义的语⾔和正规式所表⽰的集合。
第3章文法和语言
第1题
文法G=({A,B,S},{a,b,c},P,S)其中P为:
S→Ac|aB
A→ab
B→bc
写出L(G[S])的全部元素。
答案:
L(G[S])={abc}
第 11题
令文法 G[E]为:
E→T|E+T|E-T
T→F|T*F|T/F
F→(E)|i
证明 E+T*F是它的一个句型,指出这个句型的所有短语、直接短语和句柄。
答案:
此句型对应语法树如右,故为此文法一个句型。
或者:因为存在推导序列: E=>E+T=>E+T*F,所
以E+T*F句型
此句型相对于E的短语有:E+T*F;相对于 T的短语
有 T*F
直接短语为:T*F
句柄为:T*F
第 13题
一个上下文无关文法生成句子abbaa的推导树如下:
(1)给出串abbaa最左推导、最右推导。
(2)该文法的产生式集合 P可能有哪些元素?
(3)找出该句子的所有短语、直接短语、句柄。
A
S
a S
B
B B A
S
a
《编译原理》课后习题答案第三章
答案:
(1)串abbaa最左推导:
S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa
最右推导:
S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Abbaa=>abbaa (2)产生式有:S→ABS |Aa|ε A→a B→SBB|b
abbaa aaabbaa ⋯
可能元素有:ε aa ab
(3)该句子的短语有:
a是相对 A的短语
ε是相对 S的短语
b是相对 B的短语
εbb是相对 B的短语
aa是相对 S的短语
aεbbaa是相对 S的短语
直接短语有:a ε b
句柄是:a
第 14题
给出生成下述语言的上下文无关文法:
(1){ a n b n a m b m| n,m>=0}
(2){ 1n0m 1m0n| n,m>=0}
(3){WaWr|W属于{0|a}*,Wr表示W的逆}
答案:
(1)
S→AA
A→aAb|ε
(2)
S→1S0|A
A→0A1|ε
(3)
S→0S0|1S1|ε
第 16题
给出生成下述语言的三型文法:
(1){an|n >=0 }
(2) { a n b m|n,m>=1 }
(3){a n b m c k|n,m,k>=0 }
答案:
(1) S→aS|ε
(2)
S→aA
A→aA|B
B→bB|b
(3)
A→aA|B
B→bB|C
问题 6:
已知文法G[E]:
E→ET+|T
T→TF* | F
F→F^ | a
试证:FF^^*是文法的句型,指出该句型的短语、简单短语和句柄. 答案:
该句型对应的语法树如下:
该句型相对于E的短语有FF^^*
相对于T的短语有FF^^*,F
相对于F的短语有F^;F^^
简单短语有F;F^
句柄为 F.
C→cC|ε
第4章词法分析
第1题
(3)a((a|b)*|ab*a)*b
(4)b((ab)*|bb)*ab 答案:
(1)先构造NFA:
用子集法将 NFA确定化
. X A AB AC ABY
.
A
AC
A
AC
1
A
AB
AB
ABY
AB
除X,A外,重新命名其他状态,令AB为B、AC为C、ABY为D,因为D含有Y(NFA 的终态),所以 D为终态。
.01
X.
AA A
BB C
BC A
DD C
B
DFA的状态图::
盛威网()专业的计算机学习网站 1
(2)先构造 NFA:
0 ε
X 1 A ε
ε
B 1
C 0
ε
D 1
E ε
ε
L 0 Y F
用子集法将 NFA确定化1 G 0 H 1 I 0
ε
J 1 K ε
X
T0=X
A
T1= ABFL
Y
CG
T2= Y
T3= CGJ
DH
K
T4= DH
EI
T5= ABFKL
T6= ABEFIL EJY
T7= ABEFGJLY EHY
CGK
T8= ABEFHLY EY
CGI
T9= ABCFGJKL DHY
T10= ABEFLY T11= CGJI
DHJ
T12= DHY
T13= DHJ
EIK
T14= ABEFIKL ε
X
ABFL
Y
CGJ
DH
ABFKL
ABEFIL
ABEFGJLY
ABEFHLY
ABCFGJKL
ABEFLY
CGJI
DHY
DHJ
ABEFIKL
Y
DH
Y
EJY
EHY
EY
DHY
EY
DHJ
EJY
1
A
CG
K
EI
CG
CG
CGK
CGI
CGK
CG
K
EI
EIK
CG
将T0、T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14重新命名,分别用0、1、2、3、4、5、6、7、8、9、10、11、12、13、14表示。
因为2、7、8、10、12中含有Y,所以它们都为终态。
0 1 2 3 4 5 6 7 8 9
10
11
12
13
14
2
4
2
7
8
10
12
10
13
7
1
13
5
633
9
11
9356
14
3
1
1
1
1
3
4
1
1
1
1
1
2
5
6
1
1
10
7
8
1
1
9
11
1
12
13
1
14
《编译原理》课后习题答案第四章
(3)先构造NFA:
先构造 NFA:
a,b
X a ε
A
ε
ε
B
D a E
b
a
ε
F
ε
C
ε
b
Y
用子集法将 NFA确定化
X
T0=X
A
T1=ABCD BE
BY
T2=ABCDE BEF
BEY
T3=ABCDY T4=ABCDEF T5=ABCDEY ε
X
ABCD
ABCDE
ABCDY
ABCDEF
ABCDEY
a
A
BE
BEF
BE
BEF
BEF
b
BY
BEY
BY
BEY
BEY
将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5表示。
因为3、5中含有Y,所以它们都为终态。
1
2
3
4
5
0 a a
1
2
4
2
4
4
1 b 3
b
b
3
535
5 2
a a
a 4
a
bb
a
b
5
《编译原理》课后习题答案第四章(4)先构造NFA:
X b
ε
A
ε
ε
ε
B
a
C
b
ε
D ε
E a I b Y
F b
G b
Hεε
用子集法将 NFA确定化:
εa b
X
T0=X
A
T1=ABDEF CI
G
T2=CI
DY
T3=G
H
T4=ABDEFY T5=ABEFH X
ABDEF
CI
G
ABDEFY
ABEFH
CI
CI
CI
A
G
DY
H
G
G
将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5表示。
因为4中含有Y,
所以它为终态。
a b
0112
3243
542
3523
DFA的状态图:
5
《编译原理》课后习题答案第四章
b
1
2
a
b
b
3
b
b
b
5
用子集法将 NFA确定化:。