2006编译原理试题.doc

上传人:scccc 文档编号:13462591 上传时间:2021-12-26 格式:DOC 页数:5 大小:56KB
返回 下载 相关 举报
2006编译原理试题.doc_第1页
第1页 / 共5页
2006编译原理试题.doc_第2页
第2页 / 共5页
2006编译原理试题.doc_第3页
第3页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《2006编译原理试题.doc》由会员分享,可在线阅读,更多相关《2006编译原理试题.doc(5页珍藏版)》请在三一文库上搜索。

1、中国科学技术大学2005 2006学年第二学期考试试卷考试科目:编译原理和技术得分: 学生所在系:姓名:学号:1、( 15 分)(a) 用正规式表示字母表a, b上,a不会相邻的所有串。(b) 画出一个最简的确定有限自动机,它接受所有大于101的二进制整数。2、( 10分)构造下面文法的 LL(1)分析表。S > a B S | b A S | ;A > b A A | aB ; a B B | b 3、( 10分)下面的文法是二义文法S 、EE 一; while E do E | id := E | E + E | id | (E)请你为该语言重写一个规范的LR(1)文法,它为该

2、语言中的各种运算体现通常的优先级和结合规则。不需要证明你的文法是规范LR(1)的。4、( 10分)为下面文法写一个语法制导的定义,它完成一个句子的while-do最大嵌套层次的计算并输出这个计算结果。S > EE ; while E do E | id := E | E + E | id | (E)5、( 15分)考虑一个类似 Pascal的语言,其中所有的变量都是整型(不需要显式声明),并且仅包含赋值语句、读语句、写语句、条件语句和循环语句。下面的产生式定义了该语言的 语法(其中lit表示整型常量;0P的产生式没有给出,因为它和下面讨论的问题无关)。定义Stmt的两个属性:Def表示在

3、Stmt中一定会定值且在该定值前没有引用的变量集 合,MayUse表示在Stmt中有引用且在该引用前可能没有定值的变量集合。(a) 写一个语法制导定义或翻译方案,它计算 Stmt的Def和MayUse属性。(b) 基于上面的计算,程序可能未赋初值的变量集合从哪儿可以得到?可能未赋初值的变量是这样定义的:若存在从程序开始点到达变量a某引用点的一条路径,在这条路径上没有对变量a赋值,则变量a属于程序可能未赋初值的变量集合。Program Stmt Stmt > id := Exp Stmt > read (id )Stmt > write ( Exp )Stmt 、 Stmt ;

4、 StmtStmt > if ( Exp ) then begin Stmt end elsebegin Stmt endStmt > while ( Exp ) do begin Stmt endExp.idExp=litExp=Exp OP Exp6、( 15分)赋值语句 Ax, y:= z (其中A是105的数组)的注释分析树如下图。请根据教材上734节的翻译方案,把图中的属性值都补上(像图 7.9那样),并且把每步归约产生 的中间代码写在相应产生式的旁边。E.place :=L.place :=Elist .place :=Elist. ndim :=L.place :=L

5、.offset :=L.offset :=Elist.place :=Elist. ndim :=E.place :=Elist .array :=Elist.array :=L.place :=L.offset :=E.place :=L.place := L .offset :=7、( 15分)通常,函数调用的返回值是简单类型时,用寄存器传递函数值。当返回值是结构类型时需要采用别的方式。下面是一个C语言文件和它在 x86/Linux上经某版本GCC编译器编译生成的汇编代码。(备注,该汇编码略经修改,以便于阅读。该修改没有影响结果。)(a) 请你分析这些代码,总结出函数返回值是结构类型时,返

6、回值的传递方式。(b) 若m函数的语句 s = f(10)改成s.i = f(10).i + f(20).i + f(30).i,你认为 m函数的局部存储分配应该怎样修改,以适用该语句的计算。源文件return.c的内容如下:fypedef sfrusong is 八sr(k)-Ong k八宀S s八s.i *recrn s 八30宀S s八s.i H 20八sufuun>H辛 recrn.ss><n-H_fi-e =recrn.c=CDxfg-ob- ffypefy functionf-push- %ebp3O<- %esp%ebp sub- S4esp3O<-

7、 8(ebp)y %eax mov- 12(ebp)y %edx mov- %edx4(ebp) 3O<- 4(ebp)y %edx mov- %ed><(eax) -eaverefsize h Ifg-ob- 3fype m- function3.push- %ebp mov- %esp%ebp sub- esp mov- S2Q 4(ebp) -ea- 4(ebp)y %eaxpushl $10pushl %eaxcall faddl $8, %espleaveret.size m, .-m.section .note.GNU-stack,"",pro

8、gbits.ident "GCC: (GNU) (Debian 8(、5分)把下面左边的文件 file1.c 提交给编译器,编译器没有报告任何错误。 而把文件 file2.c 提交给编译器,错误报告如下:file2.c: 2: error: conflicting types for func 'file2.c: 1: error: previous declaration of func '试分析原因。(在这两个文件中, 第1行都是函数 func 的原型,第2行都是函数 func 的定义, 函数体为空。 )file1.c file2.cint func(double); int func(double);int func(f) float f; int func(float f) 9、( 5分)教材上第342页倒数第7行说“将C+语言中一个类的所有非静态属性构成一个C 语言的结构类型,取类的名字作为结构类型的名字” 。在这一章都学过后,你认为这句话 需要修改吗?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1