1997年编译原理试题.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1997年编译原理试题 (10分)某操作系统下合法的文件名为 device:n ame.exte nsion 其中第一部分(device:)和第三部分(.extension)可缺省,若device, name和 exte nsio n都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限 自动机。 ( 20分) 下面的二义文法描述命题演算公式,为它写一个等价的非二义文法。 S— > S and S | S or S | not S | p | q | (S) 下面文法是否为LL(1)文法?说明理由。 S — > A B | P Q x A — > x y B—> b c P — > d P | £ Q — > a Q | £ ( 10分)某些语言允许给出名字表的一个属性表,也允许声明嵌在另一个声 明里面,下面文法抽象这个问题。 D — > attrlist namelist | attrlist (D) n amelist — > id, n amelist | id attrlist — > A attrlist | A A — > decimal | fixed | float | real D — > attrlist namelist的含义是:在namelist中的任何名字有attrlist中给出的 所有属性。D—> attrlist (D)的含义是:在括号中的声明提到的所有名字有 attrlist 中给出的所有属性,而不管声明嵌套多少层。 写一个翻译方案,它将每个名字 的属性个数填入符号表。为简单起见,若属性重复出现,则重复计数。 ( 10分)把表达式 -(a+b)*(c+d)+(a+b+c) 翻译成四元式。 ( 10分)由于文法二义引起的LR (1)分析动作冲突,可以依据消除二义的 规则而得到LR (1)分析表,根据此表可以正确识别输入串是否为相应语言的句 子。对于非二义非LR (1)文法引起的LR (1)分析动作的冲突,是否也可以依 据什么规则来消除LR (1)分析动作的冲突而得到LR (1)分析表,并且根据此 表识别相应语言的句子?若可以,你是否可以给出这样的规则? ( 5分)UNIX下的C编译命令cc的选择项g和0的解释如下,其中dbx 的解释是“ dbx is an utility for source-level debugging and execution of programs written in C”。试说明为什么用了选择项g后,选择项0便被忽略。 -g Produce additional symbol table information for dbx(1) and dbxtool(1) and pass -lg opti on to ld(1) (so as to include the g library, that is: /usr/lib/libg.a). When this opti on is give n, the -O and -R opti ons are suppressed. -O[level] Optimize the object code. Ignored when either -g, -go, or -a is used. ... ( 15分)下面程序在SUN工作站上运行时陷入死循环,试说明原因。如果 将第8行的long *p改成short *p,并且将第23行long k改成short k后,loop 中的循环体执行一次便停止了。试说明原因。 mai n() { addr(); loop(); } long *p; loop() { long i,j; j=0; for(i=O;i<1O;i++){ (*p)--; j++; } } addr() { long k; k=0; p=&k; } ( 15分)下面程序的结果是120。但是如果把第10行的abs(1)改成1的话, 则程序结果是1。试分析为什么会有这不同的结果。 int fact() static int i=5; if(i==O) { return(1); } else { i=i-1; return((i+abs(1))*fact()); } } mai n() { prin tf("factor of 5 = %d\n", fact()); } ( 5分)在文件stdlib.h中,关于qsort的外部声明如下: exter n void qsort(void *, size_t, size_t, int (*)(c onst void *, const void *)); 下面C程序所在的文件名是type.c,用Solaris C编译器编译时,错误信息如下: "type.c", li n

文档评论(0)

497721292 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档