哈工大编译原理习题及答案_第1页
哈工大编译原理习题及答案_第2页
哈工大编译原理习题及答案_第3页
哈工大编译原理习题及答案_第4页
哈工大编译原理习题及答案_第5页
已阅读5页,还剩140页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上 1.1何谓源程序、目标程序、翻译程序、编译程序和解释程序?它们之间可能有何种关系?   1.2一个典型的编译系统通常由哪些部分组成?各部分的主要功能是什么?   1.3选择一种你所熟悉的程序设计语言,试列出此语言中的全部关键字,并通过上机使用该语言以判明这些关键字是否为保留字。   1.4选取一种你所熟悉的语言,试对它进行分析,以找出此语言中的括号、关键字END以及逗号有多少种不同的用途。   1.5试用你常用的一种高级语言编写一短小的程序,上机进行编译和运行,记录下操作步骤和

2、输出信息,如果可能,请卸出中间代码和目标代码。第一章 习题解答1. 解:源程序是指以某种程序设计语言所编写的程序。目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。翻译程序是将某种语言翻译成另一种语言的程序的统称。编译程序与解释程序均为翻译程序,但二者工作方法不同。解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。即边解释边执行,翻译所得的指令序列并不保存。编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间

3、中,在用户需要时再执行之。即先翻译、后执行。 2. 解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。 3. 解:C语言的关键字有:auto  break  case char const   continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch t

4、ypedef union unsigned void volatile while。上述关键字在C语言中均为保留字。 4. 解:C语言中括号有三种:,()。其中,用于语句括号;用于数组;()用于函数(定义与调用)及表达式运算(改变运算顺序)。C语言中无END关键字。逗号在C语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:(a,b,c,d)的值为d)。 5. 略 第二章 前后文无关文法和语言 21设有字母表A1=a,b,z,A2=0,1,9,试回答下列问题: (1) 字母表A1上长度为2的符号串有多少个? (2) 集合A1A2含有多少个元

5、素? (3) 列出集合A1 (A1A2)*中的全部长度不大于3的符号串。 22试分别构造产生下列语言的文法。 (1) anbn|n0; (2) anbmcp|n,m,p0; (3) an#bn|n0cn#dn|n0; (4) w#wr#|w0,1*,wr是将w中的符号按逆序排列所得的符号串; (5) 任何不是以0开始的所有奇整数所组成的集合; (6) 所有由偶数个0和偶数个1所组成的符号串的集合。 23试描述由下列文法所产生的语言的特点 (文法的开始符号均为S)。 (1) S10S0SaAAbAAa (2) SSSS1A0A1A0A (3) S1ASB0A1AAC BB0BCC1C0C (4)

6、 SbAdcAAGSGAa (5) SaSSSa 24设已给文法G=(VN,VT,P,S),其中: VN=S VT=a1,a2,an, , , P=Sai|i=1,2,nSS,SSS,SSS, 试指出此文法所产生的语言。 25考察文法G=(VN,VT,P,S),其中: VN=S,A,B,C,D,E,F,G VT=a, P=SABC,CBC,CA,BAGE,BGGBF,AGAD, DBBD,DEAE,FBBF,FEEa,AA (1) 指出此文法的类型; (2) 证明此文法所产生的语言为 L(G)=at(n)|n1 t(n)=ni=1i 26设已给文法G程序: 程序分程序|复合语句 分程序无标号分

7、程序|标号:分程序 复合语句无标号复合语句|标号:复合语句 无标号分程序分程序首部;复合尾部 无标号复合语句begin复合尾部 分程序首部begin说明|分程序首部;说明 复合尾部语句end|语句;复合尾部 说明d 语句s 标号L (1) 给出句子 L: L: begin d; d; s; s end 的最左推导和最右推导。 (2) 画出上述句子的语法树。 27设已给文法GS: SaAcBSBdSBaScABcAB ABaBAaBcAaBb 试检验下列符号串中哪些是GS中的句子,给出这些句子的最左推导、最右推导和相应的语法树。 (1) aacb (2) aabacbadcd (3) aacbc

8、cb (4) aacabcbcccaacdca (5) aacabcbcccaacbca 28设G=(VN,VT,P,S)为CFG,1,2,n为V上的符号串,试证明: 若 12n* 则存在V上的符号串1,2,,n,使=12n,且有 ai*i(i=1,2,n) 29设G=(VN,VT,P,S)为CFG,和都是V上的符号串,且*,试证明:当的首符号为终结符号时,的首符号也必为终结符号;当的首符号为非终结符号时,则的首符号也必为非终结符号。 210试证明: 文法 SABSDCAaAAa BbBcBbcCcCCc DaDbDab 为二义性文法。 211对于下列的文法和相应的句子,试指出这些句子的全部短

9、语;分别给出句子的最右推导,并指出各步直接推导所得句型的句柄。 (1) SABScAbAAaBaSbBc bbaacb (2) S(AS)S(b)A(SaA)A(a) (b) a (a) (b) (3) EET+ETTTF*TFFFPFPPEPi iii*i+ 212在自底向上的分析中,用来归约句型句柄的产生式称为句柄产生式。试证明: 一个文法是无二义性的,当且仅当此文法的每一句型至多只有一个句柄和一个句柄产生式。 213化简下列各个文法。 (1) SaABSSbCACdAbABAcSA AcCCBbABBcSBCcS Cc (2) SaABSEAdDAAe BbEBfCcABCdSD CaD

10、eAEfAEg (3) SacSbAAcBCBSA CbCCd 214消去下列文法中的产生式。 (1) SaASSbAcSA (2) SaAAAbAcAdAeA 215消去下列文法中的无用产生式和单产生式。 (1) SaBSBCAaAAc AaDbBDBBCDB Cb (2) SSASSBABBS A(S)SAB A( ) (3) EE+TETTT*FTF FPFFPP(E)Pi第二章 习题解答 1.(1)答:26*26=676 (2)答:26*10=260 (3)答:a,b,c,.,z,a0,a1,.,a9,aa,.,az,.,zz,a00,a01,.,zzz,

11、共26+26*36+26*36*36=34658个2.构造产生下列语言的文法 (1)anbn|n0  解:对应文法为G(S) = (S,a,b, S| aSb ,S)  (2)anbmcp|n,m,p0  解:对应文法为G(S) = (S,X,Y,a,b,c,SaS|X,XbX|Y,YcY|,S) (3)an # bn|n0cn # dn|n0  解:对应文法为G(S) = (S,X,Y,a,b,c,d,#, SX, SY,XaXb|#,YcYd|# ,S) (4)w#wr# | w?0,1*,

12、wr是w的逆序排列  解:G(S) = (S,W,R,0,1,#, SW#, W0W0|1W1|# ,S) (5)任何不是以0打头的所有奇整数所组成的集合  解:G(S) = (S,A,B,I,J,-,0,1,2,3,4,5,6,7,8,9,SJ|IBJ,B0B|IB|e, IJ|2|4|6|8, Jà1|3|5|7|9,S) (6)所有偶数个0和偶数个1所组成的符号串集合  解:对应文法为 S0A|1B|e,A0S|1C B0C|1S C1A|0B3.描述语言特点 (1)S10S0SaAAbA

13、Aa  解:本文法构成的语言集为:L(G)=(10)nabma0n|n, m0。 (2)SSS S1A0A1A0A  解:L(G)=1n10n11n20n2 1nm0nm |n1,n2,nm0;且n1,n2,nm不全为零该语言特点是:产生的句子中,0、1个数相同,并且若干相接的1后必然紧接数量相同连续的0。 (3)S1ASB0A1AACBB0BCC1C0C  解:本文法构成的语言集为:L(G)=1p1n0n|p1,n01n0n0q|q1,n0,特点是具有1p1n0n 或1n0n0q形式,进一步,可知其具有形式1n0

14、mn,m0,且n+m>0。 (4)SbAdcAAGSGAa  解:可知,S=>=>baSndc n0  该语言特点是:产生的句子中,是以ba开头dc结尾的串,且ba、dc个数相同。 (5)SaSSSa  解:L(G)=a(2n-1)|n1可知:奇数个a4.解:此文法产生的语言是:以终结符a1 、a2 an 为运算对象,以、为运算符,以、为分隔符的布尔表达式串5.   5.1解:由于此文法包含以下规则:AAe,所以此文法是0型文法。    

15、 5.2证明:略6.解:(1)最左推导:<程序>T<分程序>T<标号>:<分程序>TL:<分程序>TL:<标号>:<分程序>T L:L:<分程序>T L:L:<无标号分程序>T L:L:<分程序首部>;<复合尾部>T L:L:<分程序首部>;<说明>;<复合尾部>T L:L:begin<说明>;<说明>;<复合尾部>T L:L:begin d;<说明>;<复合尾部&

16、gt;T L:L:begin d;d;<复合尾部>T L:L:begin d;d;<语句>;<复合尾部>T L:L:begin d;d;s;<复合尾部.T L:L:begin d;d;s;<语句> endT L:L:begin d;d;s;s end最右推导:<程序>T<分程序>T<标号>:<分程序>T<标号>:<标号>:<分程序>T<标号>:<标号>:<无标号分程序>T<标号>:<标号>:<

17、分程序首部>;<复合尾部>T<标号>:<标号>:<分程序首部>;<语句>;<复合尾部>T<标号>:<标号>:<分程序首部>;<语句>;<语句>;endT<标号>:<标号>:<分程序首部>;<语句>;s;endT<标号>:<标号>:<分程序首部>;s;s;endT<标号>:<标号>:<分程序首部>;说明;s;s;endT<标号>:

18、<标号>:<分程序首部>;d;s;s;endT<标号>:<标号>:begin 说明;d;s;s;endT<标号>:<标号>:begin d;d;s;s;endT<标号>: L:begin d;d;s;s;endTL:L:begin d;d;s;s;end(2)句子L:L:begin d;d;s;s end的相应语法树是:7.解:aacb是文法GS中的句子,相应语法树是:最右推导:S=>aAcB=>aAcb=>aacb最左推导:S=>aAcB=>aacB=>aacb(2)aab

19、acbadcd不是文法GS中的句子因为文法中的句子不可能以非终结符d结尾(3)aacbccb不是文法GS中的句子可知,aacbccb仅是文法GS的一个句型的一部分,而不是一个句子。(4)aacabcbcccaacdca不是文法GS中的句子因为终结符d后必然要跟终结符a,所以不可能出现dc这样的句子。(5)aacabcbcccaacbca不是文法GS中的句子由(1)可知:aacb可归约为S,由文法的产生式规则可知,终结符c后不可能跟非终结符S,所以不可能出现caacb这样的句子。8.证明:用归纳法于n,n=1时,结论显然成立。设n=k时,对于12.kT*b,存在i:i=1,2,.,k,iT*bi

20、成立,现在设12. kk+1T*b,因文法是前后文无关的,所以12. k可推导出b的一个前缀b',k+1可推导出b的一个后缀=b"(不妨称为b k+1)。由归纳假设,对于b',存在i :i=1,2,.,k,b'=12.k,使得iT*bi成立,另外,我们有k+1T*b"(=b k+1)。即n=k+1时亦成立。证毕。9.证明:(1)用反证法。假设首符号为终结符时,的首符号为非终结符。即设:=a;=A且 =>*。由题意可知:=aT T A=,由于文法是CFG,终结符a不可能被替换空串或非终结符,因此假设有误。得证;(2)同(1),假设:的首符号为非终

21、结符时,首符号为终结符。即设:=a;=A且=aT T A=,与(1)同理,得证。10.证明:因为存在句子:abc,它对应有两个语法树(或最右推导):STABTAbcTabcSTDCTDcTabc所以,本文法具有二义性。11.解:(1) STABTAaSbTAacbTbAacbTbbAacbTbbaacb上面推导中,下划线部分为当前句型的句柄。对应的语法树为:全部的短语:第一个a (a1)是句子bbaacb相对于非终结符A (A1) (产生式A?a)的短语(直接短语);b1a1是句子bbaacb相对于非终结符A2的短语;b2b1a1是句子bbaacb相对于非终结符A3的短语;c是句子bbaacb

22、相对于非终结符S1(产生式S?c)的短语(直接短语);a2cb3是句子bbaacb相对于非终结符B的短语;b2b1a1a2cb3是句子bbaacb相对于非终结符S2的短语;注:符号的下标是为了描述方便加上去的。(2)句子(b)a(a)(b)的最右推导:ST(AS)T(A(b)T(SaA)(b)T(Sa(a)(b)T(b)a(a)(b)相应的语法树是:(3)解:iii*i+对应的语法树略。最右推导:E TT=>F=>FPT FET FET+T FEF+T FEP+T FEi+TFTi+T FTF*i+TFTP*i+T FTi*i+TFFi*i+T FPi*i+TFii*i+T Pii

23、*i+Tiii*i+12.证明:充分性:当前文法下的每一符号串仅有一个句柄和一个句柄产生式T对当前符号串有唯一的最左归约T对每一步推导都有唯一的最右推导T有唯一的语法树。必要性:有唯一的语法树T对每一步推导都有唯一的最右推导T对当前符号串有唯一的最左归约T当前文法下的每一符号串仅有一个句柄和一个句柄产生式13.化简下列各个文法(1)解:SbCACdAcSA| cCCCcS | c(2)解:SaAB | fA | gAe | dDADeABf(3)解:Sac14.消除下列文法中的产生式(1)解:SaAS | aS | bAcS(2)解:SaAA | aA | aAbAc| bc | dAe| d

24、e15.消除下列文法中的无用产生式和单产生式(1)消除后的产生式如下:SaB | BCBDB | bCbDb | DB(2)消除后的产生式如下:SSA | SB |()|(S)| |SA() |(S)|SBà |S(3)消除后的产生式如下:EE+T | T*F | (E) | PF | iTT*F | (E) | PF | i FPF | (E) | i P(E) | i 第三章 词法分析及词法分析程序  3.1试用某种高级语言编写一个FORTRAN源程序的预处理子程序,其功能是: 每调用它一次,即把源程序中的一个完整语句送入扫描缓冲区。要求删去语句中的

25、注释行;删去续行标记字符,把语句中的各行连接起来,并在语句的末端加上语句结束符。此外,还要求此程序具有组织源程序列表输出的功能。    3.2画出用来识别如下三个关键字的状态转移图。 STEP STRING SWITCH    3.3假定有一个猎人带着一只狼、一头山羊和一棵白菜来到一条河的左岸,拟摆渡过河,而岸边只有一条小船,其 大小仅能装载人和其余三件东西中的一件,也就是说,每一次猎人只能将随行者中的一件带到彼岸。若猎人将狼和山羊留在同一岸上而无人照管,那么,狼就会将羊吃掉;如果猎人把山羊和白菜留在同一岸,山羊也

26、会把白菜吃掉。现在,请你用状态转换图作为工具,描述猎人可能采取的种种摆渡方案,并从中找出可将上述三件东西安全地带到右岸的方案来。    3.4设已给文法G=(VN,VT,P,S),其中,P仅含形如 ABAV*T,BVN 的产生式,试证明: 由此种文法所产生的语言是一正规语言。     3.5试证明: 任何有限个符号串所组成的集合 L=x1,x3,xnxi+ 都是3型语言。    3.6试构造一右线性文法,使得它与如下的文法等价 SABAUTUa|aU Tb|bTBc|cB 并

27、根据所得的右线性文法,构造出相应的状态转换图。     3.7对于如题图37所示的状态转换图 (1) 写出相应的右线性文法; (2) 指出它接受的最短输入串; (3) 任意列出它接受的另外四个输入串; (4) 任意列出它拒绝接受的四个输入串。 题图37    3.8对于有限自动机 M=(K,f,S0,Z) 其中,K=S0,S1,S2,S3,S4,S5,=a,b,Z=S1,S4,S5。 f由如下的状态转移矩阵给出: abS0S2S1S1S3S1S2S0S4S3S0S0S4S5S4S5S4S0 试找出一个长度最小的输入

28、串,使得: (1) 在识别此输入串的过程中,每一状态至少经历一次; (2) 每一状态转换至少经历一次。     3.9对于下列的状态转换矩阵: abSASAABBBB(i) 初态:S 终态:BabSABABABBB(ii) 初态:S 终态:AabSABACABBCCCC(iii) 初态:S 终态:A,CabSASACBBBCCCC(iv) 初态:S 终态:C (1) 分别画出相应的状态转换图; (2) 写出相应的3型文法; (3) 用自然语言分别描述它们所识别的输入串的特征。     3.10对于下面所给的文法:

29、G1=(S,A,B,C,D, a,b,c,d,P1,S) P1由如下产生式组成: SaASBAabS AbBBbBcC CDDdDbB 以及G2=(S,A,B,C,D,a,b,c,d,P2,S) P2由如下产生式组成: SAaSBACc ABbBBbBa CDCBabDd (1) 试分别对G1和G2构造相应的状态转换图 (提示:对于右线性文法,可将形如CD的产生式视为CD;而对左线性文法,则可将它视为CD)。 (2) 对于G1,构造一等价的左线性文法G1;对于G2构造一等价的右线性文法G2。 (3) 对于G1和G1,分别给出如下符号串的推导序列: abbaababbbcdcbb 对于G2和G2

30、分别给出如下符号串的推导序列: aabaaabcadca (4) 试给出若干个不能由G1或G2产生的符号串,并验证它们同样不能用G1和G2产生。     3.11分别构造将左线性文法转换为右线性文法以及将右线性文法转换为左线性文法的算法。     3.12将如题图312所示的NFA确定化和最小化。 题图312     3.13将如题图313所示的具有动作的NFA确定化。 题图313     3.14将如题图314所示的有限自动机最小化。

31、     3.15试用一种高级语言分别写出将NFA确定化以及将DFA最小化的算法。     3.16构造一产生FORTRAN语言COMMON语句的3型文法 (假定分别用和代表标识符和整常数,它们都是终结符号,且假定数组的维数不加限定),构造相应的DFA,并写出描述COMMON语句的正规式。     3.17设r,s等为任意的正规式,试证明下列的关系式成立: (1) r*=(|r)*=|rr*=(r*)* (2) (rs)*r=r(sr)* (3) (r|s)*=(r*s*)*

32、=(r*|s*)*     3.18对于解习题36所得的文法,试用正规式描述它所产生的语言。 abS0S1S5S1S2S7S2S3S5S3S5S7S4S5S5S5S3S1S6S3S0S7S0S1S8S3S8(1) 初态:S0 终态:S1,S2,S6,S7abS0S5S2S1S6S2S2S0S4S3S3S5S4S6S2S5S3S0S6S3S1(2) 初态:S0 终态:S4,S5,S6题图314     3.19对于习题310所给的文法G1和G2,试分别用正规式描述它们所产生的语言。    

33、; 3.20设有如下的文法G标号说明: 标号说明LABEL标号表 标号表d标号段 标号段d标号段|,标号|; 标号d标号段 其中LABEL,d,;等为终结符号。 (1) 试求出描述此文法所产生语言的正规式; (2) 构造识别此语言的具有最少状态的DFA。     3.21求出描述习题37所给有限自动机所识别语言的正规式。     3.22分别构造识别如下正规语言的DFA: (1) (0*|1)(1*0)* (2) (b|a(aa*b)*b)* (3) a(abab*|a(bab)*a)*b (4) (b|

34、aa|ac|aaa|aac)* (5) a(a|b)*b(a|b)*a(a|b)*b(a|b)*     3.23试设计一个识别器,它识别由下列英语单词: ONE, TWO, THREE, , NINE, TEN, ELEVEN, TWELVE, THIRTEEN, , NINETEEN, TWENTY, THIRTY, FORTY, , NINETY, HUNDRED 所表示的从1到999间的任何整数 (各单词间用空格分隔,如THREE HUNDRED FIFTY SIX),并将它们翻译为相应的阿拉伯数字 (如356)作为输出。   

35、;  3.24设有辅助定义式 D0=a|b D1=D0D0 D2=D1D1 Dn=Dn-1Dn-1 试回答如下问题: (1) 由Dn所表述的正规集是什么? (2) 如果将Dn中所出现的Dn-1用前面已定义的辅助定义式反复进行替换,则可最终将Dn化为=a,b上的正规式,此正规式有多长? (3) 用来识别Dn的DFA至多需要几个状态?     3.25试将LEX中的“动作子程序”Ai的功能加以扩充,使之可用来生成文本编辑程序。     3.26指出下列LEX正规式所匹配的字符串: (1) "

36、;" *"" (2) a-zA-Z0-9$ (3) 0-9|rn (4) (n|)+ (5) "("n|"n)*"     3.27写出一个LEX正规式,它能匹配C语言的所有无符号整数 (例如:OX89ab,0123,45,Z,t,xab,012,等等)。     3.28写出一个LEX正规式,它能匹配C语言的标识符。     3.29编写一个LEX源程序,它将一个正文文件中的全部小写字母均换为大写字母,并

37、将其中的制表字符、空白字符序列均用单个空格字符进行替换 (提示: 在语义动作中使用全程变量yytext)。     3.30编写一个LEX源程序,它能统计一个PASCAL程序中所含用户定义之标识符个数,并能找出最长标识符中的字符个数 (提示: 使用全程变量yytext及yyleng)。 上 机 实 习 题 对于如下文法所定义的PASCAL语言子集,试编写并上机调试一个词法分析程序: 程序变量说明BEGIN语句表END. 变量说明VAR变量表:类型;|空 变量表变量表,变量|变量 类型INTEGER 语句表语句表;语句|语句 语句赋值语句|条件语句|WHI

38、LE语句|复合语句|过程定义 赋值语句变量=算术表达式 条件语句IF关系表达式THEN语句ELSE语句 WHILE语句WHILE关系表达式DO语句 复合语句BEGIN语句表END 过程定义PROCEDURE标识符参数表; BEGIN语句表END 参数表(标识符表)|空 标识符表标识符表,标识符|标识符 算术表达式算术表达式+项|项 项项*初等量|初等量 初等量(算术表达式)|变量|无符号数 关系表达式算术表达式关系符算术表达式 变量标识符 标识符标识符字母|标识符数学|字母 无符号数无符号数数字|数字 关系符=|=|=| 字母A|B|C|X|Y|Z 数字0|1|2|8|9 空 要求和提示: (

39、1) 单词的分类。 可将所有标识符归为一类;将常数归为另一类;保留字和分隔符则可采取一词一类。 (2) 符号表的建立。 可事先建立一保留字表,以备在识别保留字时进行查询。变量名表及常数表则在词法分析过程中建立。 (3) 单词串的输出形式。 所输出的每一单词,均按形如 (CLASS,VALUE) 的二元式编码。对于变量标识符和常数,CLASS字段为相应的类别码,VALUE字段则是该标识符、常数在其符号表中登记项的序号 (要求在变量名表登记项中存放该标识符的字符串,其最大长度为四个字符;常数表登记项中则存放该整数的二进制形式)。对于保留字和分隔号,由于采用一词一类的编码方式,所以仅需在二元式的CL

40、ASS字段上放置相应的单词的类别码,VALUE字段则为“空”。不过,为便于查看由词法分析程序所输出的单词串,也可以在CLASS字段上直接放置单词符号串本身。 (4) 可以仿照程序34的结构来编写上述词法分析程序,但其中的若干语义过程有待于具体编写。 (5) 写出它的LEX源程序,并上机进行处理。第三章 习题解答 1从略23 假设W:表示载狐狸过河,G:表示载山羊过河,C:表示载白菜过河用到的状态1:狐狸和山羊在左岸2:狐狸和白菜载左岸3:羊和白菜在左岸 4:狐狸和山羊在右岸5:狐狸和白菜在右岸 6:山羊和白菜在右岸F:全在右岸4 证明:只须证明文法G:AB 或A (A,BVN, VT

41、+)等价于G1:AaB 或Aa (aVT+)· G1的产生式中 AaB, 则B也有BbC ,CcD . 所以有 A abcB,a,b,cVT,BVN所以与G等价。2)G的产生式AB,VT+,因为是字符串,所以肯定存在着一个终结符a, 使AaB可见两者等价,所以由此文法产生的语言是正规语言。5 6 根据文法知其产生的语言是L=ambnci| m,n,i1可以构造如下的文法VN=S,A,B,C, VT=a,b,cP= S aA, AaA, AbB, BbB, BcC, CcC, Cc其状态转换图如下:7 (1) 其对应的右线性文法是:A 0D, B0A,B1C,C1|1F,C1|0A,F

42、0|0E|1A,D0B|1C,E1C|0B(2) 最短输入串011(3) 任意接受的四个串011,0110,0011,(4) 任意以1打头的串.8 从略。9(2)相应的3型文法(i) S aASbS AaA AbB Ba|aB Bb|bB(ii) SaA|a SbB BaB | bB AaB Ab|bA(iii) SaA SbB AbA AaC BaB BbC Ca|aC Cb|bC(iv) SbS SaA AaC AbB BaB BbC Ca|aC Cb|bC(3)用自然语言描述输入串的特征(i) 以任意个(包括0)b开头,中间有任意个(大于1)a,跟一个b,还可以有一个由a,b组成的任意字

43、符串(ii) 以a打头,后跟任意个(包括0)b(iii)以a打头,中间有任意个(包括0)b,再跟a,最后由一个a,b所组成的任意串结尾或者以b打头,中间有任意个(包括0)a,再跟b,最后由一个a,b所组成的任意串结尾(iv)以任意个(包括0)b开头,中间跟aa最后由一个a,b所组成的任意串结尾或者以任意个(包括0)b开头,中间跟ab后再接任意(包括0)a再接b,最后由一个a,b所组成的任意串结尾10 (1)G1的状态转换图:G2的状态转换图:(2) G1等价的左线性文法:SBb,SDd,DC,BDb,CBc,BAb,B,AaG2等价的右线性文法:SdD,SaB,DC,BabC,BbB,BbA,

44、B,CcA,Aa(3)对G1文法,abb的推导序列是:S=>aA=>abB=>abb对G1文法,abb的推导序列是:S=>Bb=>Abb=>abb对G2文法,aabca的推导序列是:S=>Aa=>Cca=>Babca=>aabca对G2文法,aabca的推导序列是:S=>aB=>aabC=>aabcA=>aabca(4)对串acbd来说,G1,G1文法都不能产生。11将右线性文法化为左线性文法的算法:o (1)对于G中每一个形如AaB的产生式且A是开始符,将其变为Ba,否则若A不是开始符,BAa; o (2)对

45、于G中每一个形如Aa的产生式,将其变为SAa 12 (1)状态矩阵是:记S=q0 B=q1 A B=q2 S A=q3 ,最小化和确定化后如图(2)记 S=q0, A=q1,B S=q2 最小化和确定化后的状态转换图如下13 (1)将具有动作的NFA确定化后,其状态转换图如图:记 S0,S1,S3=q0 S1=q1 S2 S3=q2 S3=q3 (2) 记S=q0 Z=q1 U R=q2 S X=q3 Y U R=q4 X S U=q5 Y U R Z=q6 Z S=q714(1)从略(2)化简后S0和S1作为一个状态,S5和S6作为一个状态。状态转换图如图15从略。16从略。· (

46、1) r*表示的正规式集是,r,rr,rrr, (|r)*表示的正规式集是, ,r,rr,rrr,=,r,rr,rrr,|rr*表示的正规式集是,r,rr,rrr,(r*)*=r*=,r,rr,rrr,所以四者是等价的。(2)(rs)*r表示的正规式集是,rs,rsrs,rsrsrs,r =r,rsr,rsrsr,rsrsrsr,r(sr)* 表示的正规式集是r,sr,srsr,srsrsr, = r,rsr,rsrsr,rsrsrsr,所以两者等价。18 写成方程组S=aT+aS(1)B=cB+c(2)T=bT+bB(3)所以B=c*cT=b*bc*cS=a*ab*bc*c· G1

47、: S=aA+B(1) B=cC+b(2)A=abS+bB (3)C=D(4)D=bB+d(5)把(4)(5)代入(2),得Bc(bB+d)+b=cbB+cd+b 得B=(cb)*(cd|b),代入(3)得A=abS+b(cb)*(cd|b)把它打入(1)得S=a(abS+b(cb)*(cd|b)+ (cb)*(cd|b)=aabS+ab(cb)*(cd|b) + (cb)*(cd|b)=(aab)*( ab(cb)*(cd|b)| (cb)*(cd|b)G2:S=Aa+B (1)A=Cc+Bb (2)B=Bb+a(3)C=D+Bab(4)D=d(5)可得 D=dB=ab*C=ab*ab|bA

48、=(ab*ab|b)c + ab*bS=(ab*ab|b)ca+ab*ba +ab*=(ab*ab|b)ca| ab*ba| ab*20· 识别此语言的正规式是S=LABELd(d|,d)*; · 从略。 21 从略。22 构造NFA其余从略。 23 下面举一个能够识别1,2,3,10,20,100的例子,读者可以推而广之。%#include <stdio.h>#include <string.h>#include <ctype.h>#define ON1#define TW 2#define THRE 3#define TE 10#de

49、fine TWENT 20#define HUNDRE 100#define WHITE9999%upperA-Z%ONEreturn ON;TWOreturn TW;THREEreturn THRE;TENreturn TE;TWENTYreturn TWENT;HUNDREDreturn HUNDRE;" "+|treturn WHITE;nreturn0;%main(int argc,char *argv)int c,i=0;char tmp30;if (argc=2)if (yyin=fopen(argv1,"r")=NULL)printf(&q

50、uot;can't open %sn",argv1);exit(0);while (c=yylex()!=0)switch(c)case ON:c=yylex();if (c=0) goto i+=1;label;c=yylex();if (c=HUNDRE)i+=100;else i+=1;break;case TW:c=yylex();c=yylex();if (c=HUNDRE)i+=200;else i+=2;break;case TWENT: i+=20;break;case TE:i+=10;break;default:break;/*while*/label:

51、printf("%dn",i);return;24 (1)Dn表示的正规集是长度为2n任意a和b组成的字符串。· 此正规式的长度是2n · 用来识别Dn的DFA至多需要2n1个状态。 25 从略。26(1)由括住的,中间由任意个非组成的字符串, 如,a,defg等等。(2)匹配一行仅由一个大写字母和一个数字组成的串,如A1,F8,Z2等。(3)识别rn和除数字字符外的任何字符。· 由和括住的,中间由两个或者非和n组成的任意次的字符串。如, a,bb,def,等等 27OXx0-9*a-fA-F*|0-9+|(a-zA-Z|Xx0-70-7a-f

52、A-F|0010-70-7|a-z)28a-zA-Z_+0-9*a-zA-Z_*29 参考程序如下:%#include <stdio.h>#include <string.h>#include <ctype.h>#define UPPER2#define WHITE3%upperA-Z%upper+returnUPPER;t|" "+returnWHITE;%main(int argc,char *argv)int c,i;if (argc=2)if (yyin=fopen(argv1,"r")=NULL)printf

53、("can't open %sn",argv1);exit(0); while (c=yylex()!=EOF)if (c=2)for (i=0;yytexti;i+)printf("%c",tolower(yytexti);yytext0='000'if (c=3)printf(" ");else printf("%s",yytext);return;yywrap()return ;30 从略。4.1消除下列文法的左递归性。 (1) SSASA ASBAB A(S)A( ) BSB (2)

54、 SASSb ASAAa (3) S(T)Sa STS TT,S 4.2设已给文法: SAbBSd ACAbABf BCSdBd CedCa 试写出对符号串eddfbbd进行带回溯的自顶向下语法分析的过程。 4.3对于如下的文法,用某种高级语言写出递归下降分析程序。 (1) Pbegin d; X end Xd;X XsY Y;sY Y (2) 程序begin语句end 语句赋值语句|条件语句 赋值语句变量=表达式 条件语句if表达式then语句 表达式变量 表达式表达式+变量 变量i 4.4对于如下的文法,求出各个FIRST集和FOLLOW集。 SaABSbA SAaAb ABbB B 4.

55、5试证明: 任何具有左递归性的前后文无关文法均非LL(1)文法。 4.6试证明: 任何LL(1)文法均为无二义性文法。 4.7验证下列文法是否为LL(1)文法。 (1)SABSCDa AabAc BdECeC CDfD DfEdE E (2) SaABbCDS AASdA BSAcBeC BCSf CCgC DaBDD 4.8对于如下的文法GS: SSbSAb SbAAa Aa (1) 构造一个与G等价的LL(1)文法G; (2) 对于G,构造相应的LL(1)分析表。 49设已给文法 SSaBSbB ASAa BAc (1) 求出各个FIRST集和FOLLOW集; (2) 将它改写为LL(1)文法。 410将下面的文法改写为LL(1)文法。 (1) 布尔表达式布尔表达式布尔因子 布尔表达式布尔因子 布尔因子布尔因子布尔二次量 布尔因子布尔二次量 布尔二次量布尔初等量 布尔二次量布尔初等量 布尔初等量(布尔表达式) 布尔初等量true | false (2) 习题26中所给的文法。 411设GS为LL(1)文法,A为G的非终

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论