ImageVerifierCode 换一换
格式:DOCX , 页数:45 ,大小:229.34KB ,
资源ID:3083822      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3083822.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北方工业大学编译原理习题集.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北方工业大学编译原理习题集.docx

1、北方工业大学编译原理习题集编译原理课后习题(修订版)第二章 高级语言及其语法描述3、何谓“标识符”,何谓“名字”,两者的区别是什么? 解:标识符是高级语言中定义的字符串,一般是以英文字母(包括大小写字母)或下划线开头的,由数字、字母和下划线组成的一定长度的字符串,它只是一个标志,没有其他含义。名字是用标识符表示的,但名字不仅仅是一个字符串,它还具有属性和值。4、令 、* 和代表加、乘和乘幂,按如下的非标准优先级和结合性质的约定,计算11*2*12的值: (1)、优先顺序(从高至低)为、* 和,同级优先采用左结合。 (2)、优先顺序为、*,同级优先采用右结合。 解: (1)、11*2*12 =

2、2*2*12 = 4*12 = 42 = (2)、11*2*12 = 6、令文法G6为NDND,D0123456789 (1)、G6的语言L(G6)是什么? (2)、给出句子0127、34和568的最左推导和最右推导。 分析:根据产生式NDND可以看出,N最终可推导出1个或多个(可以是无穷多个)D,根据产生式D0123456789可以看出,每个D可以推导出0至9中的某一个数字。因此,N最终推导出的是由0到9这10个数字组成的字符串。 解: (1)、L(G6)是由0到9这10个数字组成的字符串。 (2)、句子0127、34和568的最左推导: N=ND=NDD=NDDD=DDDD=0DDD=01

3、DD=012D=0127 N=ND=DD=3D=34 N=ND=NDD=DDD=5DD=56D=568 句子0127、34和568的最右推导: N=ND=N7=ND7=N27=ND27=N127=D127=0127 N=ND=N4=D4=34 N=ND=N8=ND8=N68=D68=5687、写一个文法,使其语言是奇数集,且每个奇数不以0开头。 分析:本题要构造一个文法,由它产生的句子是奇数,且不以0开头。也就是说它的每个句子都以1、3、5、7、9中某数结尾。如果数字只有一位,则满足要求;如果有多位,则要求第一位不能是0;而中间有多少位,每位是什么数字则没有要求。因此我们可以把这个文法分3部分

4、完成,分别用3个非终结符来产生句子的第一位、中间部分和最后一位。引入几个非终结符,其中,一个用作产生句子的开头,可以是1到9中的数,不包括0;一个用来产生句子的结尾,为奇数;另一个则用来产生以非0整数开头后面跟任意多个数字的数字串,进行分解之后,这个文法就很好写了。 解: G(S):A2468D BA0 CCBA D13579 SCDD8、令文法为ETE+ TE-T TFT*FT/F F(E)i(1) 给出i+i*i、i*(i+i)的最左推导和最右推导;(2) 给出i+i+i、i+i*i和i-i-i的语法树。解:(1) 最左推导为: E = E+T = T+T = F+T = i+T = i+

5、T*F = i+F*F = i+i*F = i+i*i E = T = T*F = F*F = i*F = i*(E) = i*(E+ T) = i*(T+ T) = i*(F+ T) = i*(i+ T) = i*(i+ F) = i*(i+ i) 最右推导为: E =E+T =E+T*F =E+T*i =E+F*i =E+i*i = T+i*i = F+i*i = i+i*i E = T = T*F = F*F = F*(E) = F*(E+T) = F*(E+ F) = F*(E+ i) = F*(T+i) = F*(F+i) = F*(i+i) = i*(i+ i)(2) 语法树:9、

6、证明下面的文法是二义的:SiSeSiSi 分析:根据文法二义性定义,如果要证明该文法是二义的,必须找到一个句子,使该句子具有两个不同的最右推导或两个不同的语法树。我们首先分析这个文法,根据我们对程序语言的了解,不难发现这个文法应该是用来表示ifelse结构的(用“i”表示“if”或语句集,用e代表else)。因此我们就要到ifelse结构中去找二义性。我们知道,程序语言一般都规定else部分是和它前面离它最近的没有被匹配的if语句进行匹配。而上面的这个文法体现不出这种限制,因此我们可以找这样一个句子,在else前面有两个if(如句子iiiei),else和不同的if进行匹配时就会产生不同的语义

7、。 解:考虑句子iiiei,存在如下两个最右推导: S=iSeS=iSei=iiSei=iiiei S=iS=iiSeS=iiSei=iiiei 由此该文法是二义的。10、把下面文法改为无二义的:SSS(S)( ) 分析:本题给出的文法是二义的,关键在于SSS是产生二义性的根源。我们将该产生式改造成等价的递归结构,消除二义性。 解:STST,T(S)( )11、给出下面语言的相应文法: L1=anbncin1,i0, L2=aibncnn1,i0 L3=anbnambmn,m0 L4=1n0m1m0nn,m0 分析:语言L1要求a和b的个数一样多,且至少为一个;c的个数为0个以上。因此我们可用

8、一个非终结符去生成anbn串,用另外一个非终结符去生成ci。 语言L2要求b和c的个数一样多,因此可用一个非终结符去生成bncn,而使用另外一个非终结符去生成ai。因此可以模仿L1生成L2。 对于L3,可将anbnambm分两段考虑,即anbn和ambm,然后用两个非终结符分别去产生他们。 L4不能采用分段处理的方式,它要求中间的0和1的个数相同,而且一前一后的0和1的个数相同。对于这种题型我们可以采用从里向外扩展的方式进行,即先用一个非终结符生成处于中间的m个0和m个1,然后,使用另外一个非终结符在该串的基础上扩充前后的n个0和n个1。 解: L1的文法:SAC;AaAbab;CcC L2的

9、文法:SAB;AaA;BbBcbc L3的文法:SAB;AaAb;BaBb L4的文法: S1S0A; A0A1;第三章 词法分析1、 编写一个对于Pascal源程序的预处理程序。该程序的作用是,每次被调用时都将下一个完整的语句送进扫描缓冲区,去掉注释行,同时要对源程序列表打印。2、 请给出以下C+程序段中的单词符号及其属性值。 int CInt:nMulDiv(int n1,int n2) if (n3= =0)return 0; else return(n1*n2)/n3; 3、 用类似C或Pascal的语言编写过程GetChar,GetBC和Concat。4、 用某种高级语言编写并调试一

10、个完整的词法分析器。5、 证明3.3.1中关于正规式的交换律、结合律等五个关系。6、 令A、B和C是任意正规式,证明以下关系成立: AA=A (A*)*= A* A*=A A* (AB)*A=A(BA)* (AB)*=(A*B*)*=(A*B*)* A=baA当且仅当A=a*b证明: (1)、AA=A L(AA)=L(A)L(A)=L(A),所以有AA=A。 (2)、(A*)*= A* (3)、A*=A A* 通过证明两个正规式所表示的语言相同来证明两个正规式相等。 L(A A*)=L()L(A)L(A*)= L()L(A)(L(A) )* =L()L(A)(L(A)0(L(A)1(L(A)2

11、(L(A)3) =L()(L(A)1(L(A)2(L(A)3(L(A)4 =(L(A)*=L(A*) 即:L(A A*)=L(A*),所以有:A*=A A* (4)、(AB)*A=A(BA)* 利用正规式的分配率和结合律直接推导。 (AB)*A=(AB)0(AB)1(AB)2(AB)3)A =A(AB)1A(AB)2A(AB)3A =AA (BA)1A (BA)2A (BA)3 =A(BA)1(BA)2(BA)3) =A(BA)* 即:(AB)*A=A(BA)* (5)、(AB)*=(A*B*)*=(A*B*)*证明:先证(AB)*=(A*B*)*因为L(A) L(A) *L(B) *,L(B

12、) L(A) *L(B) *故:L(A) L(B) L(A) *L(B) *于是由本题第二小题结论可知(L(A)L(B) * (L(A) *L(B)*)* 又L(A) L(A)L(B), L(B) L(A)L(B)故:L(A)* (L(A)L(B)* L(B)* (L(A)L(B)*因此有:L(A)*L(B)* (L(A)L(B)* (L(A)L(B)*=( (L(A)L(B)*) 2故(L(A)*L(B)*)* (L(A)L(B)*)*由本题第二小题得: (L(A)L(B)*)*= (L(A)L(B) * 故得: (L(A)*L(B)*)* (L(A)L(B) * 则由得: (L(A)L(B

13、) *=(L(A)*L(B)*)*由于L(A*B*)*=(L(A*B*)*=(L(A*)L(B*)*=(L(A)*L(B)*)*即有(L(A)L(B)*=L(A*B*)* 而(A|B)*对应的语言为(L(A)L(B)*,且(A*B*)*对应的语言为L(A*B*)*则根据得(A|B)*=(A*B*)*再证:(A*|B*)*=(A*B*)*因为:A,B是任意正规式,由以上结论得: (A*|B*)*=(A*)*(B*)*)*又由本题第二小题目的结论可得:(A*)*=A*,(B*)*=B*因此,(A*|B*)*=(A*B*)*综合上述两种结论,最后得:(AB)*=(A*B*)*=(A*B*)*(6)、

14、A=baA当且仅当A=a*b 7、 构造下列正规式相应的DFA 1(01)*101 1(1010*1(010)*1)*0 0*10*10*10* (0011)*(0110)(0011)*(0110)(0011)*)* 解: (1)、1(01)*101 第一步:根据正规式构造NFA,先引入初始状态X和终止状态Y: 再对该转换图进行分解,得到分解后的NFA如下图: 第二步:对NFA进行确定化,获得状态转换矩阵:状态01X1,2,31,2,32,32,3,42,32,32,3,42,3,42,3,52,3,42,3,52,32,3,4,Y2,3,4,Y2,3,52,3,4 根据转换矩阵获得相应的DFA:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1