大二下期末复习包编译原理.pdfVIP

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

2004

编译原理部分

1.(10分)下面的文法是LR(1)文法。请合并该文法LR(1)项目集规范族中的同心集,以说

明该文法不是LALR(1)文法。

S→aAd|bBd|aBe|bAe

A→c

B→c

2.(10分)为下面文法写一个语法制导的定义,用S的综合属性val给出下面文法中S产

生的二进制数的值。例如,输入101.101时,S.val:=5.625。(不得修改文法。)

S→L.R|L

L→LB|B

R→BR|B

B→0|1

3.(5分)在X86/Linux机器上,编译器报告第15行有错误:

incompatibletypesinreturn

在C语言中,数组和结构都是构造类型,为什么下面第2个函数有类型错误,而第1个

函数没有?

typedefintA1[10];

typedefintA2[10];

A1a;

typedefstruct{inti;}S1;

typedefstruct{inti;}S2;

S1s;

A2*fun1()

{

return(a);

}

S2fun2()

{

return(s);

}

4.(5分)在C语言中,若a和b是相同的结构类型,那么赋值a=b是可以的。但是编译器

对这种赋值的实现方式可能和它们的字节数(size)有关。下面是两个C语言程序及在

X86/Linux机器上生成的目标代码(略去了和本题目无关的部分)。扼要叙述这些目标代码中

体现出的实现方式上的区别。(在下面汇编程序中给出的注释参考。)

struct{longi,j;doublem;}a,b;

main()

{

a=b;

}

main:

pushl%ebp

movl%esp,%ebp

movl$b,%eax

movl$a,%edx

movl(%eax),%ecx

movl%ecx,(%edx)

movl4(%eax),%ecx

movl%ecx,4(%edx)

movl8(%eax),%ecx

movl%ecx,8(%edx)

movl12(%eax),%eax

movl%eax,12(%edx)

.L1:

leave

ret

struct{longi,j;doublem,n;}a,b;

main()

{

a=b;

}

main:

pushl%ebp

movl%esp,%ebp

pushl%edi

pushl%esi

movl$a,%edi

movl$b,%esi

cld——设定方向标志,使地址指针自动增量

movl$6,%ecx——设定重复次数

文档评论(0)

lflebooks + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档