编译原理期末试题8套含答案大题集.doc

上传人:s****u 文档编号:12815233 上传时间:2020-05-26 格式:DOC 页数:24 大小:1.07MB
返回 下载 相关 举报
编译原理期末试题8套含答案大题集.doc_第1页
第1页 / 共24页
编译原理期末试题8套含答案大题集.doc_第2页
第2页 / 共24页
编译原理期末试题8套含答案大题集.doc_第3页
第3页 / 共24页
点击查看更多>>
资源描述
编译原理期末试题(五)一、单项选择题(共10小题,每小题2分,共20分)1语言是A句子的集合 B产生式的集合 C符号串的集合 D句型的集合2编译程序前三个阶段完成的工作是A词法分析、语法分析和代码优化 B代码生成、代码优化和词法分析C词法分析、语法分析、语义分析和中间代码生成 D词法分析、语法分析和代码优化3一个句型中称为句柄的是该句型的最左 A非终结符号 B短语 C句子 D直接短语4下推自动机识别的语言是A0型语言 B1型语言 C2型语言 D3型语言5扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即 A 字符 B单词 C句子 D句型6对应Chomsky四种文法的四种语言之间的关系是 AL0L1L2L3 BL3L2L1L0 CL3=L2L1L0 DL0L1L2=L37词法分析的任务是 A识别单词 B分析句子的含义 C识别句子 D生成目标代码8常用的中间代码形式不含 A三元式 B四元式 C逆波兰式 D语法树9 代码优化的目的是 A节省时间 B节省空间 C节省时间和空间 D把编译程序进行等价交换10代码生成阶段的主要任务是 A把高级语言翻译成汇编语言 B把高级语言翻译成机器语言 C把中间代码变换成依赖具体机器的目标代码 D把汇编语言翻译成机器语言二、填空题(本大题共5小题,每小题2分,共10分)1编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。 2编译器常用的语法分析方法有(自底向上)和(自顶向下)两种。3通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。4程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即(静态存储分配)方案和(动态存储分配)方案。5对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。三、名词解释题(共5小题,每小题4分,共20分)1词法分析词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位,并转换成统一的内部表示(token),送给语法分析程序。2LL(1)文法 若文法的任何两个产生式A a | b都满足下面两个条件:(1)FIRST(a ) FIRST(b ) = f;(2)若b * e ,那么FIRST(a ) FOLLOW( A ) = f。 我们把满足这两个条件的文法叫做LL(1)文法,其中的第一个L代表从左向右扫描输入,第二个L表示产生最左推导,1代表在决定分析器的每步动作时向前看一个输入符号。除了没有公共左因子外,LL(1)文法还有一些明显的性质,它不是二义的,也不含左递归。3语法树 句子的树结构表示法称为语法树(语法分析树或语法推导树)。给定文法G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树。这棵树具有下列特征:(1)根节点的标记是开始符号S。(2)每个节点的标记都是V中的一个符号。(3)若一棵子树的根节点为A,且其所有直接子孙的标记从左向右的排列次序为A1A2AR,那么AA1A2AR一定是P中的一条产生式。(4)若一标记为A的节点至少有一个除它以外的子孙,则AVN。(5)若树的所有叶节点上的标记从左到右排列为字符串w,则w是文法G的句型;若w中仅含终结符号,则w为文法G所产生的句子。4LR(0)分析器 所谓LR(0)分析,是指从左至右扫描和自底向上的语法分析,且在分析的每一步,只须根据分析栈当前已移进和归约出的全部文法符号,并至多再向前查看0个输入符号,就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成,从而也就可以确定当前所应采取的分析动作 (是移进还是按某一产生式进行归约等)。5语言和文法文法就是语言结构的定义和描述,是有穷非空的产生式集合。文法G定义为四元组的形式:G=(VN,VT,P,S)其中:VN 是非空有穷集合,称为非终结符号集合;VT 是非空有穷集合,称为终结符号集合;P是产生式的集合(非空);S是开始符号(或识别符号)。这里,VNVT=,SVN。V=VNVT,称为文法G的字母表,它是出现文法产生式中的一切符号的集合。文法G所描述的语言用L(G)表示,它由文法G所产生的全部句子组成,即L(G)=x| S*x,其中S为文法开始符号,且 简单的说,文法描述的语言是该文法一切句子的集合。四、简答题(共4小题,每小题5分,共20分)1编译程序和高级语言有什么区别? 用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器语言表示的目标程序(这个过程即编译),才能由计算机执行。执行转换过程的程序叫编译程序。汇编程序是指没有编译过的汇编语言源文件。编译程序转换过的叫目标程序,也就是机器语言。 编译程序的工作情况有三种:汇编型、解释型和编译型。汇编型编译程序用来将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。解释型编译程序将高级语言程序的一个语句,先解释成为一组机器语言的指令,然后立即执行,执行完了,取下一组语句解释和执行,如此继续到完成一个程序止。用解释型编译程序,执行速度很慢,但可以进行人和计算机的对话,随时可以修改高级语言的程序。BASIC语言就是解释型高级语言。编译型编译程序将级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快,在过程中,不能进行人机对话修改。FORTRAN语言就是编译型高级语言。2编译程序的工作分为那几个阶段? 词法分析、语法分析和语义分析是对源程序进行的分析(称为编译程序的前端),而中间代码生成、代码优化和代码生成三个阶段合称为对源程序进行综合(称为编译程序的后端),它们从源程序的中间表示建立起和源程序等价的目标程序。3简述自下而上的分析方法。 所谓自下而上分析法就是从输入串开始,逐步进行“归约”,直至归约到文法的开始符号;或者说从语法树的末端开始,步步向上“归约”,直到根节点。4简述代码优化的目的和意义。 代码优化是尽量生成“好”的代码的编译阶段。也就是要对程序代码进行一种等价变换,在保证变换前后代码执行结果相同的前提下,尽量使目标程序运行时所需要的时间短,同时所占用的存储空间少。五、综合应用题(共3小题,每小题10分,共30分)1证明下述文法G:SaSbS|aS|d是二义性文法。解:一个文法,如果存在某个句子有不只一棵语法分析树与之对应,那么称这个文法是二义性文法。句子aadbd有两棵语法树。如下图:SaSSabSdddSSabSSad(1) (2)由此可知,SaSbS|aS|d定义的文法是二义性文法。ASBbBSab2对于文法GS:SAB,AAa|bB,Ba|Sb求句型baSb的全部短语、直接短语和句柄?句型baSb的语法树如图五(2)所示。解:baSb为句型baSb的相对于S的短语,ba为句型baSb的相对于A的短语,Sb为句型baSb的相对于B的短语,且为直接短语,a为句型baSb的相对于B的短语,且为直接短语和句柄。3设有非确定的有自限动机NFA M=(A,B,C,0,1,d,A,C),其中:d (A,0)=C d (A,1)=A,B d (B,1)=C d (C,1)=C。请画出状态转换距阵和状态转换图。解:状态转换距阵为:d01ACA,BBCCC状态转换图为11011编译原理期末试题(六)编译原理 样题【 】1_型文法也称为正规文法。A 0 B 1 C 2 D 3【 】2_文法不是LL(1)的。 A 递归 B 右递归 C 2型 D 含有公共左因子的【 】3 文法EE+E|E*E|i的句子i*i+i*i的不同语法分析树的总数为_。A1 B3 C5 D7【 】4四元式之间的联系是通过 实现。 A临时变量 B指示器 C符号表 D程序变量【 】5同心集合并可能会产生的新冲突为 。 A二义 B移进/移进 C移进/归约 D归约/归约【 】6代码优化时所依据的是 。A语法规则 B词法规则 C等价变换规则 D语义规则【 】7表达式a-(-b)*c的逆波兰表示为 。Aa-bc* Babc*- Cab- Dabc-* (注:为单目减运算符)【 】8过程的DISPLAY表记录了 。A过程的连接数据 B过程的嵌套层次C过程的返回地址 D过程的入口地址二 填空题3对于文法G1和G2,若有L(G1)=L(G2) (或 G1和G2的语言相同),则称文法G1和G2是等价的。4对于文法GE:ET|E+T TF|T*F FPF|P P(E)|i,句型T+T*F+i的句柄是T ,最左素短语是 T*F。 5最右推导的逆过程称为规范归约 ,也称为 最左归约。6规范规约中的可规约串是句柄 ,算符优先分析中的可规约串是 最左素短语7(A B)(C D E) 的逆波兰式是。8在属性文法中文法符号的两种属性分别称为继承属性 和综合属性(次序可换)。9符号表的每一项是由名字栏和 地址分配 两个栏目组成。在目标代码生成阶段,符号表是 地址分配 的依据。 10一个过程的DISPLAY表的内容是它的直接外层 的DISPLAY表的内容加上本过程的SP的地址三 有穷自动机M接受字母表S0,1上所有满足下述条件的串:每个1都有0直接跟在右边。构造一个最小的DFA M及和M等价的正规式。【】【】四 证明正规式(ab)*a 与正规式a(ba)*等价 (用构造他们的最小的DFA方法)。【答案:】 五 写一个文法,使其语言是:L 1n0m1m0n | m,n0 【】【】五 文法G:S 1S0 | AA 0A1 | 六 对文法GS S aSb | PP bPc | bQcQ Qa | a(1) 它是否是算符优先文法?请构造算符优先关系表(2) 文法GS消除左递归、提取左公因子后是否是LL(1)文法?请证实。【】【】1.求出GS的FIRSTVT集和LASTVT集:FIERSTVT(S)=a,b LASTBVT(S)=b,c FIERSTVT(P)=b LASTBVT(P)=c FIERSTVT(Q)=a LASTBVT(Q)=a构造优先关系表为: a b c a b c 由于在优先关系中同时出现了aa以及bb,所以该文法不是算符优先文法。2. 消除左递归和提取左公因子后的文法为:S aSb | PP bPP Pc |QcQ aQQ aQ|求具有相同左部的两个产生式的Select集的交集:Select(SaSb)Select(SP) = aFirst(P) = ab = Select(PPc)Select(PQc) = First(P)First(Q)=ba= Select(QaQ)Select(Q) = aFollow(Q) = ac = 所以修改后的文法是LL(1)文法。七 已知文法G为:(0) S S(1) S aAd(2) S bAc(3) S aec(4) S bed(5) A e 试构造它的LR(1)项目集、可归前缀图和LR(1)分析表。【】【答案:】ecAdI0:S S , # S aAd , # S bAc , # S aec , #S bed , #I2: Sa Ad , #Sa ec , # A e , d aI1:SS , #SI3: Sb Ac , # Sb ed , # A e , cbI6: SbAc,# AI7:Sbe d , #Ae , cI11:Sbed , #dI10:SbAc , # I4:SaA d , #I5:Sae c , # Ae , deI8:SaAd , #I9:Saec , #c构造LR(1)分析表 如下: r4 11S10 6r2 10 r3 9 r1 8S11r5 7r5S9 5S8 4 6S7 3 4S5 2acc 1A#S3bedc1S gotoaS2 action 0状态八 已知源程序如下: prod:=0; i:=1; while i20 do beginprod:=prod+ai*bi;i:=i+1 end;试按语法制导翻译法将源程序翻译成四元式序列(设A是数组a的起始地址,B是数组b的起始地址;机器按字节编址,每个数组元素占四个字节)。【答案:】九 设有以下程序段 procedure P(x,y,z) begin Y:=y*3; Z:=X+z; end; begin a:=5; b:=2; p(a*b,a,a); print(a); end若参数传递的方法分别为(1)传值、(2)传地址、(3)传名,试问结果分别什么?【】【】十 (1)传值 5; (2)传地址 25; (3)传名 45十 对以下文法,请写出关于括号嵌套层数的属性文法。(为S,L引入属性h,用来记录输出配对的括号个数)文法规则语 义 规 则S(T)SiTT,STS答案: 十一 对PL/0语言的while语句 while 条件B DO 语句S 的编译程序,请在空缺处填空,完成该语句的编译算法:switch (SYM) case WHILESYM: CX1=CX ;GetSym(); CONDITION(SymSetAdd(DOSYM,FSYS),LEV,TX); CX2=CX ;GEN(JPC,0,0);if (SYM=DOSYM) GetSym() ;else Error(18);STATEMENT(FSYS,LEV,TX);GEN(JMP,0,CX1); CODECX2.A=CX ;break;编译原理期末试题(七)一、 回答下列问题:(30分)1什么是S-属性文法?什么是L-属性文法?它们之间有什么关系?解答:S-属性文法是只含有综合属性的属性文法。 (2分)L-属性文法要求对于每个产生式AX1X2Xn,其每个语义规则中的每个属性或者是综合属性,或者是Xj的一个继承属性,且该属性仅依赖于:(1) 产生式Xj的左边符号X1,X2Xj-1的属性;(2) A的继承属性。 (2分)S-属性文法是L-属性文法的特例。 (2分)2什么是句柄?什么是素短语?一个句型的最左直接短语称为该句型的句柄。(3分)素短语是这样的一个短语,它至少包含一个终结符并且不包含更小的素短语。(3分)3划分程序的基本块时,确定基本块的入口语句的条件是什么?解答:(1)程序第一个语句,或(2)能由条件转移语句或无条件转移语句转移到的语句,或(3)紧跟在条件转移语句后面的语句。4(6分)运行时的DISPLAY表的内容是什么?它的作用是什么?答:DISPLAY表是嵌套层次显示表。每当进入一个过程后,在建立它的活动记录区的同时建立一张嵌套层次显示表diaplay.假定现在进入的过程层次为i,则它的diaplay表含有i+1个单元,自顶向下每个单元依次存放着现行层、直接外层、直至最外层(主程序,0层)等每层过程的最新活动记录的起始地址。通过DISPLAY表可以访问其外层过程的变量。5(6分)对下列四元式序列生成目标代码: A:=B*CD:=E+FG:=A+DH:=G*2其中,H是基本块出口的活跃变量, R0和R1是可用寄存器答:LD R0, BMUL R0, CLD R1, EADD R1, FADD R0, R1MUL R0, 2ST R0, H二、设S=0,1上的正规集S由倒数第二个字符为1的所有字符串组成,请给出该字集对应的正规式,并构造一个识别该正规集的DFA。(8分)答:构造相应的正规式:(0|1)*1(0|1) (3分)NFA: (2分) 1 110432 e e e e 1 0 0确定化:(3分)I0,1,21,21,2,31,21,21,2,31,2,31,2,41,2,3,41,2,41,21,2,31,2,3,41,2,41,2,3,4 0 143210 0 1 0 0 0 1 1 1三、写一个文法使其语言为L(G)= anbmambn | m,n1。(6分)答:文法G(S):S aSb | BB bBa | ba四、对于文法G(E): (8分)ET|E+TTF|T*FF(E)|iETF(E)E+TFiTT*F1. 写出句型(T*F+i)的最右推导并画出语法树。2. 写出上述句型的短语,直接短语、句柄和素短语。答:1. (4分)ETF(E) (E+T) (E+F) (E+i) (T+i) (T*F+i) 2. (4分)短语:(T*F+i), T*F+i, T*F, i直接短语:T*F, i句柄:T*F素短语:T*F, i五、设文法G(S):(12分)1 构造各非终结符的FIRSTVT和LASTVT集合;2 构造优先关系表和优先函数。(12分)答:(6分)FIRSTVT(S)= i,+,),( FIRSTVT(A)= +,),( FIRSTVT(B)= ),( LASTVT(S)= i,+,*,( LASTVT(A)= +,*,( LASTVT(B)= *,( 优先关系表: (3分)i+()*i()优先函数: (3分)i+()*f26616g14661六、设某语言的do-while语句的语法形式为 (9分) S do S(1) While E其语义解释为:真假S(1)的代码E的代码针对自下而上的语法分析器,按如下要求构造该语句的翻译模式:(1) 写出适合语法制导翻译的产生式;(2) 写出每个产生式对应的语义动作。答:(1). 适合语法制导翻译的文法(3分) G(S): R do UR S(1) While SU E (2). (6分) R do R.QUAD:=NXQ UR S(1) While U.QUAD:=R.QUAD; BACKPATCH(S.CHAIN, NXQ) SU E BACKPATCH(E.TC, U.QUAD); S.CHAIN:=E.FC 答案二:(1) S do M1 S(1) While M2 E M (3分)(2) M M.QUAD := NXQ (6分)S do M1 S(1) While M2 EBACKPATCH(S(1).CHAIN, M2.QUAD);BACKPATCH(E.TC, M1.QUAD); S.CHAIN:=E. FC七、(8分)将语句if (A0) then while C0 do C:=C+D翻译成四元式。(8分)答:100 (j, B, 0, 104)103 (j, -, -, 109)104 (j, C, 0, 106)105 (j, -, -, 109)106 (+, C, D, T1)107 (:=, T1, -, C)108 (j, -, -, 104)109 (控制结构3分,其他5分)八、(10分) 设有基本块如下:T1:=S+RT2:= 3T3:= 12/T2T4:=S/RA:=T1-T4T5:=S+RB:=T5T6:=T5*T3B:=T6(1)画出DAG图;(2)设A,B是出基本块后的活跃变量,请给出优化后的四元式序列。T1,T5, B3T24SR+/*_T3T4AT6,Bn4n5n1n2n3n6n8n7答:(1) DAG如右图:(6分)(2) 四元式序列:(4分)T1:=S+RT4:=S/RA:=T1-T4B:=T1*4九、(9分) 设已构造出文法G(S):(1) S BB(2) B aB(3) B b的LR分析表如下ACTIONGOTO状态ab#SB0s3s4121acc2s6s753s3s484r3r35r16s6s797r38r2r29r2假定输入串为abab,请给出LR分析过程(即按照步骤给出状态,符号,输入串的变化过程)。答:步骤状态符号输入串00#abab#103#abab#2034#abab#3038#aBab#402#Bab#5026#Bab#60267#Bab#70269#BaB#8025#BB#901#S#acc编译原理期末试题(八)1(10分)处于/* 和 */之间的串构成注解,注解中间没有*/。画出接受这种注解的DFA的状态转换图。2为语言L ambn | 0 m 2n(即a的个数不超过b的个数的两倍)写一个LR(1)文法,不准超过6个产生式。(若超过6个产生式,不给分。若所写文法不是LR(1)文法,最多给5分。)3(10分)构造下面文法的LL(1)分析表。D TLT int | realL id RR , id R | e4(15分)就下面文法S ( L) | aL L , S | S 给出一个语法制导定义,它输出配对括号的个数。 给出一个翻译方案,它输出每个a的嵌套深度。如句子(a, (a, a) ),第一小题的输出是2,第二小题的输出是1 2 2。5(10分)Pascal语言for语句的含义见教材第222页习题7.13。请为该语句设计一种合理的中间代码结构。你可以按第215页图7.17的方式或者第219页图7.19的方式写出你的设计,不需要写产生中间代码的语法制导定义。6(5分)一个C语言程序如下:func(i1,i2,i3)long i1,i2,i3;long j1,j2,j3; printf(Addresses of i1,i2,i3 = %o,%o,%on,&i1,&i2,&i3);printf(Addresses of j1,j2,j3 = %o,%o,%on,&j1,&j2,&j3);main()long i1,i2,i3;func(i1,i2,i3);该程序在某种机器的Linux上的运行结果如下:Addresses of i1,i2,i3 = 27777775460,27777775464,27777775470Addresses of j1,j2,j3 = 27777775444,27777775440,27777775434从上面的结果可以看出,func 函数的3个形式参数的地址依次升高,而3个局部变量的地址依次降低。试说明为什么会有这个区别。7(15分)一个C语言程序及其在某种机器linux操作系统上的编译结果如下。根据所生成的汇编程序来解释程序中四个变量的作用域、生存期和置初值方式等方面的区别。static long aa = 10;short bb = 20;func() static long cc = 30; short dd = 40;.filestatic.c.version01.01gcc2_compiled.:.data.align 4.type aa,object.size aa,4aa:.long 10.globl bb.align 2.type bb,object.size bb,2bb:.value 20.align 4.type cc.2,object.size cc.2,4cc.2:.long 30.text.align 4.globl func.type func,functionfunc:pushl %ebpmovl %esp,%ebpsubl $4,%espmovw $40,-2(%ebp).L1:leaveret.Lfe1:.size func,.Lfe1-func.identGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)8(10分)C语言是一种类型语言,但它不是强类型语言,因为编译时的类型检查不能保证所接受的程序没有运行时的类型错误。例如,编译时的类型检查一般不能保证运行时没有数组越界。请你再举一个这样的例子说明C语言不是强类型语言。9(10分)如果在A机器上我们有C语言编译器CCA,也有它的源码SA(用C语言写成)。如何利用它通过尽量少的工作来得到B机器的C语言编译器CCB。10(5分)表达式(lx.(lyz.(x + y) + z) 3) 4 5和(lx.(lyz.(x + y) + z) 3 5) 4有同样的结果。在抽象机FAM上,哪一个表达式对应的目标代码的执行效率高?为什么?参考答案1124start52othersothers/*/2LR(1)文法LR(1)文法二义文法S AB | aABbS ABS AASb | eA aaAb | eA aaAb | ab | eA a | eB Bb | eB Bb | e3int realid,$DDTLDTLTTintTrealLLid RRR , id RR e4S S print(S.num)S (L)S.num := L.num +1S aS.num := 0L L1,SL.num := L1.num + S.num L SL.num := S.numS S.depth := 0 SS L.depth := S.depth +1 (L)S a print(S.depth)L L1.depth := L.depth L1, S.depth := L.depth SL S.depth := L.depth S5t1 := initialt2 := finalif t1 t2 goto L1v := t1 L2:stmtif v = t2 goto L1v := v + 1goto L2 L1: 6由于实参表达式是反序进入活动记录,而局部变量是顺序在活动记录中分配。7aa是静态外部变量,而bb是外部变量,它们都分配在静态数据区(由.data伪指令开始),但是bb由伪指令.globl指明为全局的,用来解决其它文件中对bb的外部引用,而aa只能由本文件引用。cc是静态局部变量,同aa和bb一样,它的生存期是整个程序并分配在静态数据区。由于cc在源程序中的作用域是函数func的体,而在目标文件中,它的作用域至少已是整个文件了,为避免同源文件中外部变量和其它函数的静态局部变量的名字冲突,所以要对它进行改名,成了cc.2。由于cc不是全局的,因此cc.2前面没有伪指令.globl。dd是自动变量,其作用域是函数func的体,其生存期是该函数激活期间,因此它分配在栈区,并且置初值是用运行时的赋值来实现。8例如联合体的类型检查一般也不可能在编译时完成,虽然下面例子是可静态判断类型错误的。union U int u1; int *u2; u;int *p;u.u1 = 10;p = u.u2;*p = 0;9 修改源码SA 的代码生成部分,让它产生B机器的代码,称结果程序为SB。 将SB提交给CCA进行编译,得到一个可执行程序。 将SB提交给上述可执行程序进行编译,得到所需的编译器CCB。10第一个表达式在执行lyz.(x + y) + z) 3时出现参数个数不足的情况,因此有FUNVAL的值进入栈顶,然后发现参数个数不足,又把它做成FANVAL的情况。而第二个表达式执行的是(lyz.(x + y) + z) 3 5,不会出现参数个数不足的情况。因此第二个表达式的执行效率比第一个表达式的高。编译原理期末大题1. 设有如下文法G(S),试消除其左递归。G(S):SAc|c ABb|b BSa|a解:SabcS|bcS|cS, SabcS|2. 试构造与下面G(S)等价的无左递归的文法。G(S):SSa|Nb|c NSd|Ne|f解:SfNbS|cS, SaS|dNbS|, NeN|3. 设有文法G(S):SaBc|bABAaAb|bBb| 求各产生式的FIRST集,FOLLOW(A)和FOLLOW(B),以及各产生式的SELECT集。 构造LL(1)分析表,并分析符号串baabbb是否是。解:(1)FIRST(aBc)=a, FIRST(bAB)=b FIRST(aAb)=a, Ab: FIRST(Ab)=b, Bb: FIRST(b) = b, FIRST()= FOLLOW(A)=b, #, FOOLOW(B)=c, #SELECT(SaBc)=a, SELECT(SbAB) =b, SELECT(AaAb)=a, SELECT(Ab)=b, SELECT(Bb)=b, SELECT(B)=c, #因此,所得的LL(1)分析表如表A-4所示。表A-4 LL(1)分析表输入VN输入符号abc#SSaBcSbABAAaAbAbBBbBB(2)分析符号串baabbb成功,baabbb是该文法的句子,如图A-16所示。图A-16 识别串baabbb的过程4. 对下列文法G(S):SD(R) RR;P|PPS|I Di计算文法G中每个非终结符的FIRSTVT集和LASTVT集。构造文法G的算符优先关系矩阵。解:(1)FIRSTVT(S)=(, i,FIRSTVT(D) =i,FIRSTVT(R)=;, (, i,FIRSTVT(P)=i, (,LASTVT(S)=),LASTVT(D)=i,LASTVT(R) = ;, ), i,LASTVT(P)=i, )(2)算符优先矩阵,如表A-5所示。表A-5 优先矩阵();i#();i#5. 已知文法G(S):Sa|(T)TT,S|S给出句子(a,a),a)的最左推导并画出语法树;给出句型(T,a,(T)所有的短语、直接短语、素短语、最左素短语、句柄和活前缀。解:(1)最左推导:S(T)(T,S)(S,S) (a,S)(a,(T)(a,(T,S)(a,(S,S)(a,(a, S)(a,(a,a)语法树:如图A-16所示。图A-16 (a,(a,a)的语法树(2)句型(T, a, (T)的短语、直接短语、素短语、最左素短语、句柄、活前缀及语法树(图A-17)。短语:a | T,a | (T) | T , a , (T) | (T , a , (T)直接短语:a | (T)素短语:a | (T)最左素短语:a句柄:a活前缀: | ( | (T | (T , | (T , a 图A-17 (T,a,(T)的语法树6. 设文法()为:求()项目集族;构造识别文法()的;构造文法()的SLR()的分析表;分析句子的识别过程。解:(1)、(2)LR(0)项目集族和识别活前缀的DFA,如图A-19所示。图A-19 LR(0) 项目集族和DFA(3)、(4)略。第24页共6页
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!