2022年编译原理复习题集 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年编译原理复习题集 .pdf》由会员分享,可在线阅读,更多相关《2022年编译原理复习题集 .pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编译原理复习题集1名词解释短语: 令 G 是一个文法。 S划文法的开始符号,假定是文法 G 的一个句型,如果有 SA 且 AB,则称 是句型 相对非终结符 A 的短语。句柄: 句型中和某个产生式右部匹配的字串,并且把它归约成该产生式左部的非终结符代表了最右推导过程的逆过程中的一部。句柄右边的字符仅含终结符。文法: 文法就是语言结构的定义和描述,是有穷非空的产生式集合。?上下文无关文法:四元组G = (Vt,Vn,S,P),其中Vt 是非空 有限集合,其元素成为终结符; Vn 是一个非空有限集合,其元素成为非终结符,并有Vt 交 Vn= 空集; S 是一个非终结符,称为开始符号;P是产生式的有限
2、集合,产生式形式: A ,其中A属于 Vn ,属于Yt 和 Vn 交集的闭包LL(1)文法:任何两个产生式A | 都满足下列条件: FIRST() FIRST( ) = 若* ,那么 FIRST( ) FOLLOW( A) = LR(1)文法: 一个文法,如果能为它构造出所有条目都唯一的LR 分析表,就说它是 LR 文法语法分析: 简称为分析,它按编程语言的语法规则检查词法分析输出的记号流是否符合这些规则,并依据这些规则所体现出的该语言的各种语言构造的层次性,用各记号的第一元建成一种树形的中间表示,这个中间表示用抽象语法的方式描绘了改记号流的语法情况。无环路有向图 (DAG):如果有向图中任一
3、通路都不是环路,则称庐有向图为无环路有向图,简称DAG 。后缀式: 一种把运算量写在前面,把算符写在后面的表示表达式的方法。语法制导翻译:基于属性文法的处理过程,对单词符号串进行语法分析,构造语法分析 树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点处按语义规则进行计算。遍:对源 程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。局部优化:词法分析: 词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则。从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,并转换成统一的内部表示(token),送给语法分析程序。语法分析: 按
4、文法的产生式识别输入的符号串是否为一个句子的分析过程。语义分析:使用语法树和符号表中的信息,依据语言定义来检查源程序的语义一致性,以保证程序各部分能有意义地结合在一起。源语言:可以 引导 出 另一 种语言 的语言 。在 最初编 写计算 机程 序时所 使用的 语言 ,就是源 语言。源语言一般指的是,编 写 源程序 所用 的语言 ,它必须 翻译成机器语言 * 才能在 计算机 中 使用源程序:是一种 计算机 的代码 。它会符合一定的语法 ,经过 编译器 编译或解释后生成具 有一定功能的可执行文件或 组件,也可以是某种 接口 。是用 程序设 计语言 编写的程序 。目标语言:用另 一种计算机语言(源语言
5、)写成的文件将被翻译成的计算机语言,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 20 页 - - - - - - - - - 常为一种机器语言也作object language中间语言(中间表示) :中间代码一直是指一种位于源代码和目标代码(例如三元式代码或类似的线性表示)之间的代码表示形式2叙述下面的正规式描述的语言,并画出接受该语言的最简DFA 的状态转换图。( 1 | 01 )* 0* 答:该正规式描述的语言是,所有不含子串001 的 0 和 1 的串。3Pas
6、cal 语言无符号数的正规定义如下:numdigit+ (. digit+)? ( E(+|-)? digit+)? 其中 digit表示数字,用状态转换图表示接受无符号数的确定有限自动机。4画出 Pascal 中实数 (不带正负号,可带指数部分) 的状态转换图。5用状态转换图表示接收 (a|b)aa 的确定的有限自动机。答:状态转换图见图1.8。分析和上一题不同的是,现在是直接构造DFA。我们仍然坚持这一点,大家既要会按教材上的算法从 NFA 的确定化得到DFA,也要会手工直接构造DFA。我们通过本题和下一题来说明,手工直接构造 DFA 也并不困难。a 1 0 2 start a a b b
7、 b 图 1.8 接收(a | b) aa 的 DFA start . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 20 页 - - - - - - - - - 该正规式表示的语言是,字母表= a, b 上最后两个字符都是a 的串的集合。抓住这个特点,我们首先画出构造过程中的第一步,见图1.9。它表明最简单的句子是aa。然后,因为在第一个a 前可以有若干个b,因此状态0 有到自身的b 转换。在最后两个字符都是 a 的串的末尾添加若干个a,能够保持串的这个性质,因此状态
8、2 有到自身的a 转换。这样我们有图 1.10。最后,在状态1 和状态 2 碰到 b 时,前面刚读过的a,不管连续有多少个,都不可能作为句子结尾的那两个字符a,因此状态1 和状态 2 的 b 转换回到状态0。所有状态的a 转换和 b 转换都已给出,这就得到最后结果。6处于/* 和 */ 之间的串构成注解,注解中间没有*/ 。画出接受这种注解的DFA的状态转换图。答 见图 1.3 。标记为others的边是指字符集中未被别的边指定的任意其它字符。分析 这个 DFA的状态数及含义并不难确定,见下面的五个状态说明。状态 1:注释开始状态。状态 2:进入注释体前的中间状态。状态 3:表明目前正在注释体
9、中的状态。状态 4:离开注释前的中间状态。状态 5:注释结束状态,即接受状态。在这个 DFA 中,最容易忽略的是状态4 到本身的 ?* ? 转换。这个边的含义是:在离开注释前的中间状态, 若下一个字符是?*?,那么把刚才读过的? * ?看成是注释中的一个字符,而把这下一个字符看成可能是结束注释的第一个字符。若没有这个边,那么象/* This is a comment * / 这样的注释就被拒绝。另外,上面的状态转换图并不完整。例如,对于状态1,没有指明遇到其它字符怎么办。要把状态转换图画完整,还需引入一个死状态6,进入这个状态就再也出不去了。因为它不是接受状态,因此进入这个状态的串肯定不被接受
10、。完整的状态转换图见下面图1.4,其中 all 表示任意字符。在能够说清问题时,通常我们省略死状态和所有到它的边。1 2 4 start 5 2 others others / * * * / 图 1.3 接受注释的DFA 1 0 2 stars a a 图 1.9 构造过程中的第一步1 0 2 start a a a b 图 1.10 构造过程中的第二步名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 20 页 - - - - - - - - - 7某操作系统下合法的文件
11、名为device:name.extension 其中第一部分(device: )和第三部分(.extension)可缺省, device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。答:见图 1.5,图中的标记d 表示任意字母。分析这个 DFA 和一些教材上接受无符号数的DFA 有类似的地方。 我们首先考虑device:和.extension全都出现的情况。这时的DFA 比较容易构造,见图1.6。然后考虑缺省情况。因为.extension 可缺省, 因此把状态4 也作为接受状态。 因为 name和 device一样,都是字母序列,因此在d
12、evice:缺省时,把到状态2 为止得到的字母序列看成是name,所以从状态 2 画一条转换边到状态5,标记为 ?.? 。 (如果构成name 和 device 的字符完全不一样,那么可以从状态 1 到状态 4 画一条边,其标记同状态3 到状态 4 的标记一样。 )由于 device:和.extension 都可缺省,因此把状态2 也作为接受状态。8构造一个 DFA,它接受0, 1 上 0 和 1 的个数都是偶数的字符串。答:见图 1.1。分析对于这样的问题,不要急于去尝试画DFA,先把问题分析一下,这里要接受的是偶数个 0 和偶数个 1 的串, 和偶数相对的是奇数,因此,对于任意一个0 和
13、1 的串,不论其0 和1 的个数有多少, 总归不是偶数个就是奇数个。因此任意一个串属于下面四种情况之一。0:偶数个0 和偶数个1;1:偶数个0 和奇数个1;2:奇数个0 和偶数个1;3:奇数个0 和奇数个1。并且不管一个串是处于上面哪一种情况,该串再添加一个0 或 1 后,总是处于上面另一种情况。由此分析可以知道,DFA 只需四个状态就够了,1 2 4 start 5 2 others others / * * * / 6 others others all all 图 1.4 接受注释的完整DFA d d 1 2 3 4 5 6d : d d . d start 图 1.6 文件名的三部分都
14、出现的DFA 3 1 2 0 1 1 1 1 0 0 0 0 start 图 1.1 接受偶数个0 和偶数个 1 的的 DFA 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 20 页 - - - - - - - - - 并且状态转换也很容易画出来。答案中的四个状态对应到这儿的四种情况。空串是属于偶数个0 和偶数个 1 的情况,因此0 状态是开始状态。因为我们接受偶数个0 和偶数个1 的串,因此它也是接受状态。9给出与下图的NFA 等价的正规式。10把下面的 NFA 确定
15、化。11下面两个文法中哪一个不是LR(1)文法?对非 LR (1)的那个文法。给出那个有移进归约冲突的规范的LR (1)项目集。S aAc S aAc A bbA | b A bAb | b 解:S-aAc A-bAb|b 不是 LR(1) 文法。因为I(0): S?-.S $ S-.a A c $ I(1): S?-S. $ I(2): S-a.Ac $ 12 3 4 5 61 0 1 1 1 0 1 S0 S1 S3 S2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,
16、共 20 页 - - - - - - - - - A-.bAb c A-.b cI (3):S-Aa.c $ I(4):A-b.Ab c A-b. c A-.bAb b A-.b b I(5):S-aAc. $ I(6) :A-b.Ab b A-b. b A-.bAb b A-.b b 所以在项目集I(6) 会出现移近和规约的冲突。所以不是LR(1) 文法。12将下面的 DFA化成最简形式。13为语言L w | w (a | b)*并且在 w 的任何前缀中, a 的个数不少于 b 的个数写一个 LR (1)文法,不准超过6 个产生式。类似题目:为语言L ambn | 0 m 2n (即 a 的
17、个数不超过b 的个数的两倍)写一个LR(1)文法,不准超过6 个产生式。0 1 2 3a a b a b b a,b 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 20 页 - - - - - - - - - LR(1)文法LR(1)文法二义文法S AB | aABb S AB S AASb | A aaAb | A aaAb | ab | A a | B Bb | B Bb | 14写一个文法,使其语言是奇数集,且每个奇数不以0 开头。解:文法 G(N): N AB|
18、B A AC|D B 1|3|5|7|9 D B|2|4|6|8 C 0|D 15考查文法 G(s): S( T ) | a + S | a TT, S | S 消除文法的左递归;提取公共左因子;对每个非终结符,写出不带回朔的递归子程序。解:(1) S (L)|aS S S| L SL L SL| (2) FIRST)S) ( ,a FOLLOW(S) # , , ,) FIRST(S),a, FOLLOW(S)# , , ,) FIRST(L) ( ,a FOLLOW(L) ) FIRST(L), , FOLLOW(L ) 16设文法 G(S): S(L)|a S|a L L,S|S (1)
19、 消除左递归和回溯; (2) 计算每个非终结符的FIRST和 FOLLOW;(3)构造预测分析表。解: (1)S(L)|aS?S?S|LSL?L?SL?|(2)FIRST)S) ( ,aFOLLOW(S) # , , ,) FIRST(S?),a, FOLLOW(S?) #, , ,) FIRST(L) ( ,aFOLLOW(L) ) FIRST(L?) , ,FOLLOW(L? ) (3) a,()名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 20 页 - - - -
20、 - - - - - S S?L L?SaS?S(L)S?SS?S?SS?S?LSL?LSL?L?L?17程序的文法如下:P D D D ; D | id : T | proc id ; D ; S(1)写一个语法制导定义,打印该程序一共声明了多少个id。(2)写一个翻译方案,打印该程序每个变量id 的嵌套深度。18构造下面文法的LL(1)分析表。D TL T int | real L id R R , id R | 构造下面文法的LL(1) 分析表D - TL T - int|real L - idR R - ,idR|先计算 FIRST 和 FOLLOW FIRST(D) = FIRST(
21、T) = int,real FIRST(L) = id FIRST(R) = , FOLLOW(D) = FOLLOW(L) = $ FOLLOW(T) = id FOLLOW(R) = $ int real id , $ D D - TL D - TL T T - int T - real L L - idR R R - ,idR R -19已知文法 G(S) Sa| |(T) TT,S|S 写出句子 (a ,a) ,a)的规范归约过程及每一步的句柄。答:句型归约规则句柄(a,a),a)Saa 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
22、- - - - 名师精心整理 - - - - - - - 第 8 页,共 20 页 - - - - - - - - - (S,a),a)TSS (T ,a),a)Saa (T ,S),a)TT ,ST, S (S) ,a)TSS (T) ,a)SS(T)(T) (S,a)TSS (T,a)Saa (T,S)TT ,ST,S (T)S(T)(T) S(4 分) 20已知文法 G(E) ET|ET TF|T *F F(E)|i (1) 给出句型 (T *F i) 的最右推导及画出语法树; (2) 给出句型 (T *F i) 的短语。解:(1) 最右推导:ETF(E) (E+T) (E+F) (E+
23、i) (T+i) (T*F+i) (2)短语: (T*F+i), T*F+i, T*F, i 直接短语: T*F, I 句柄: T*F 素短语: T*F, i 21在 PASCAL 语言中,简单类型的变量的声明例举如下:m, n : integer p, q, r : real 为这样的声明写一个LR(1)文法(为简单起见,变量标识符都用id 表示) ,并根据你的文法写一个语法制导定义(或叫做为你的文法加上语义动作),它将变量的类型填入符号表。22一个非 LR(1)的文法如下:LMLb | a M 请给出所有有移进归约冲突的LR(1)项目集,以说明该文法确实不是LR(1)的。?拓广文法: L
24、- L L - MLb | a M - I0 L - ? L, $ L - ? MLb, $ L - ? a, $ M - ? , $/ E T F ( E ) E + T F i T T * F 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 20 页 - - - - - - - - - I0,I2,I5面临 a 时存在移进 - 规约冲突23现有句型 b l和产生式 Ab ,分别指出 LL(1)方法和 LR(1)方法在扫描到此句型的什么位置决定用此产生式?24(a) 为
25、下面的算术表达式文法写一个语法制导的翻译方案,它将每个子表达式E 的符号 (即值大于零还是小于零) 记录在属性 E.sign中 (属性值分别用 POS 或 NEG 表示) 。你可以假定所有的整数都不为零,这样就不用担心零的符号。EE *E | +E | E | unsigned _integer(b) 为上面的表达式产生栈机器代码。代码执行后,表达式的值留在栈上。你自己设计所需的栈机器指令,并写清楚指令的含义。答:(a) EE1*E2if E1.sign= E2.signthenE.sign := POS else E.sign := NEG E +E1 E.sign := E1.sign E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年编译原理复习题集 2022 编译 原理 复习题
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内