中国科学技术大学编译原理和操作系统1996考研真题

合集下载

中国科学技术大学陈意云编译原理全套参考资料chapter4

中国科学技术大学陈意云编译原理全套参考资料chapter4

中国科学技术大学陈意云编译原理全套参考资料chapter4 第四章语法制导的翻译在3.7节用Yacc写的例子中,我们看到一种有用的描述形式:语言结构的属性附加在代表语言结构的文法符号上,这些属性值由附加在文法产生式的语义动作来计算,这些语义动作在归约对应的产生式时进行计算,由此得到结果。

这种描述形式可用来描述编译器的语义分析,因此本章系统地研究这种称之为“语法制导下的语言翻译”的描述方法及其实现。

它的语义动作(有时称为语义规则)的计算可以产生代码、把信息存入符号表、显示出错信息、或完成其它工作。

语义规则的计算结果就是我们所要的记号流的翻译。

本章讨论语义规则和产生式相联系的两种方式:语法制导的定义和翻译方案。

语法制导定义是较抽象的翻译说明,它隐蔽了一些实现细节;而翻译方案陈述了一些实现细节,主要是指明了语义规则的计算次序。

在第五章说明语义检查和第七章描述中间代码生成时,大量使用这两种方法。

本章还讨论语法制导定义和翻译方案的实现方法。

概念上的方法是,首先分析输入的记号串,建立分析树,然后从分析树得到描述结点属性间依赖关系的有向图,从这个依赖图得到语义规则的计算次序,然后进行计算,最终得到翻译的结果。

实际的实现并不需要按上面步骤逐步进行,本章将讨论几种不同限制下的实现方法。

4.1 语法制导的定义语法制导的定义是上下文无关文法的推广,其中每个文法符号都有一个属性集合,它分成两个子集,分别叫做该文法符号的综合属性集合和继承属性集合。

如果我们把分析树上的结点看成是保存对应文法符号的属性的记录,那么属性对应记录的域。

属性可以表示任何东西:串、数、类型、内存单元,或其它想表示的东西。

分析树结点的属性值由该结点所用产生式的语义规则定义。

在语法制导定义中,我们把其中的文法称为基础文法。

本节介绍语法制导定义的形式及其概念上的实现模型。

4.1.1 语法制导定义的形式在语法制导定义中,每个文法符号有一组属性,每个文法产生式A , ,有一组形式为b := f (c, c, …, c )的语义规则,其中f 是函数,b和c, c, …, c 是该产生式的文法符号的12k12k属性,并且:(1) 如果b是A的属性,c , c , …, c 是产生式右部文法符号的属性或A的其它属12k性,那么b叫做文法符号A的综合属性。

03-第3章-语法分析-编译原理-中国科技大学(共13讲)

03-第3章-语法分析-编译原理-中国科技大学(共13讲)
VT : VN : S: P : 终结符集合 非终结符集合 开始符号,非终结符中的一个 产生式集合, 产生式形式 : A expr (expr) expr id op
• 例 ( {id, +, , , (, )}, {expr, op}, expr, P )
expr expr op expr expr expr op +
3.2 语言和文法
• 无二义的文法 stmt matched _stmt | unmatched_stmt matched_stmt if expr then matched_stmt else matched_stmt | other unmatched_stmt if expr then stmt | if expr then matched_stmt else unmatched_stmt
3.2 语言和文法
expr expr + term | term term term factor | factor factor id | (expr)
expr term
term expr factor id term factor id expr + term * factor id id + id id 分析树
3.2 语言和文法
3.2.3 验证文法产生的语言 G : S (S) S | L(G) = 配对的括号串的集合 • 按串长进行归纳:配对括号串可由S推出
–归纳基础: S – 归纳假设:长度小于2n的都可以从S推导出来 – 归纳步骤:考虑长度为2n(n 1)的w = (x) y S (S)S * (x) S * (x) y
编译原理和技术
中国科学技术大学 计算机科学与技术学院 陈意云

03-编译原理课程测试第三套卷(附解析)-编译原理试题-中国科技大学

03-编译原理课程测试第三套卷(附解析)-编译原理试题-中国科技大学
(a)为什么会出现一条指令前有多个标号的情况,如.L2和.L4,还有.L5、.L3和.L1?从控制流语句的中间代码结构加以解释。
(b)每个函数都有这样的标号.L1,它的作用是什么,为什么本函数没有引用该标号的地方?
main()
{
long i,j;
if ( j )
i++;
else
while (i) j++;
(b) .L1标号定义的入口是返回调用者时该执行的指令,在函数内部有return语句时就会跳转到.L1。
8.这是基于下面几点原因。
1.两个函数库libuser1.a和libuser2.a都定义了某个函数或某个置初值的外部变量,把它简称为a。
2.test.c引用a。
3.test.c还引用libuser2.a的其它某个函数或外部变量,把它简称为b。在libuser2.a中,a和b在同一个目标文件中。
9.(5分)根据教材上所介绍的方法,C++中的对象声明语句应如何翻译成C语句?如教材图11.11(旧教材的图10.11)程序中的
Point _center;
应怎样翻译?
编译原理课程测试第三套卷参考答案
1.(a)语言{ ( ), (( )( )), ((( ))), ( )( )( )( )( )}是正规语言,因为该语言只包括有限个句子,它可以用正规式定义如下:
SDCif D.lengthC.length then print (“error”)
Da bD.length := 1
Da D1bD.length := D1.length + 1
CcC.length := 1
CC1cC.length := C1.length + 1

编译原理考研题库及答案

编译原理考研题库及答案

编译原理考研题库及答案编译原理考研题库及答案编译原理是计算机科学与技术领域中的一门重要课程,也是计算机专业研究生考试中的一项必考科目。

为了更好地备战考研,我们需要充分了解编译原理考研题库及答案。

本文将对编译原理考研题库及答案进行介绍和分析,帮助考生更好地掌握这门课程。

一、词法分析题词法分析是编译原理中的重要内容,也是考研题库中常见的题型之一。

下面是一道典型的词法分析题:题目:对于以下C语言代码片段,请给出相应的词法单元序列。

```cint a = 10;float b = 3.14;char c = 'A';```答案:词法单元序列为:int、a、=、10、;、float、b、=、3.14、;、char、c、=、'A'、;。

二、语法分析题语法分析是编译原理中另一个重要的内容,也是考研题库中常见的题型之一。

下面是一道典型的语法分析题:题目:给定以下文法G:```S -> aABA -> b | εB -> c | ε```请问对于输入串"abc",是否属于文法G的语言?答案:对于输入串"abc",可以通过以下推导过程验证是否属于文法G的语言:```S -> aAB -> aAcB -> abcB -> abc```由于推导过程可以得到输入串"abc",因此"abc"属于文法G的语言。

三、语义分析题语义分析是编译原理中的另一个重要内容,也是考研题库中常见的题型之一。

下面是一道典型的语义分析题:题目:给定以下C语言代码片段,请写出相应的语义动作。

```cint a = 10;float b = 3.14;float c = a + b;```答案:相应的语义动作为:```1. 将10存入变量a中。

2. 将3.14存入变量b中。

3. 将变量a和变量b相加的结果存入变量c中。

中科大计算机考研真题

中科大计算机考研真题

中科大计算机考研真题中科大计算机考研是众多计算机科学与技术专业学生追求的目标之一。

在这道真题中,我们将回顾一些历年的考题,并提供一些解析和思路,以帮助考生更好地准备考试。

本文共分为三个主题部分:操作系统、数据库和算法与数据结构。

一、操作系统1. 多道批处理系统是怎样实现作业调度的?请简要描述操作系统的作业调度过程。

解析:多道批处理系统是指一台计算机同时处理多个作业,而不需要人工干预。

作业调度是指操作系统根据一定的算法,决定当前执行哪个作业。

作业调度过程一般包括以下几个步骤:首先,操作系统根据作业的优先级和提交时间等信息,为每个作业分配一个初始的调度优先级。

其次,对于多个处于就绪状态的作业,操作系统根据调度算法,选择一个作业进行执行。

常见的调度算法有先来先服务(FCFS)、短作业优先(SJF)、最高响应比优先(HRRN)等。

最后,当一个作业执行完成或者处于阻塞状态时,操作系统会根据调度算法重新选择一个作业进行执行,直到所有作业完成。

2. 请解释死锁的概念,并说明死锁的产生条件和解决方法。

解析:死锁是指多个进程在竞争有限资源时,由于彼此之间的互斥和请求资源的非预期顺序等原因,导致都在等待对方释放资源,从而导致系统无法继续执行。

死锁的产生条件主要包括:互斥条件:进程对所请求的资源进行排他性控制,即一次只能有一个进程使用该资源。

持有和等待条件:进程已经持有了一个资源,但又请求额外的资源,而这些资源又被其他进程所占有。

不剥夺条件:其他进程不能强行剥夺一个进程已经持有的资源,只能由进程自己释放。

环路等待条件:多个进程之间形成了一个循环等待资源的关系。

死锁的解决方法主要有以下几种:鸵鸟算法:忽略死锁的存在,不进行处理。

适用于死锁发生概率极低的系统。

死锁检测与恢复:通过系统资源分配图等方法,检测死锁的发生,并进行资源回收和进程终止等操作,使系统恢复正常状态。

死锁预防:通过破坏死锁产生的四个条件之一,预防死锁的发生。

中国科学院软件基础1996真题(2)

中国科学院软件基础1996真题(2)

中国科学院软件基础1996真题(2)中国科学院计算技术研究所⼀九九六年招收硕⼠学位研究⽣⼊学考试试题试题名称:软件基础⼀.(10分)已知序列17,31,13,11,20,35,25,8,4,11,24,40,27。

请画出该序列的⼆叉排序树,并分别给出下列操作后的⼆叉树;①插⼊数据9;②删除结点17;③再删除结点13。

⼆.(15分)请编写⼀个程序,⽣成如下序列的前n项。

1,2,1,2,3,2,1,2,3,4,3,2,1,2,3,4,5,4,3,2,1,2,……三.(15分)已知平⾯上(直⾓坐标系)的n个点,请编⼀个函数,求同⼀条直线所能通过的最多点数。

四.(10分)下⾯的⽂法产⽣a的个数和b的个数相同的⾮空a,b串。

S a B | b AB b S | a BB | bA a S | b AA | a其中⾮终结符B推出b⽐a的个数多1个的串,A则反之。

(1)说明该⽂法是⼆义的。

(2)对上述⽂法略作修改,使之⾮⼆义,并产⽣同样的语⾔。

略作修改的含义是:不增加⾮终结符。

五.(10分)某些语⾔允许给出名字表的⼀个属性表,也允许声明嵌在另⼀个声明⾥⾯,下⾯⽂法抽象这个问题。

D attrlist namelist | attrlist(D)namelist id,namelist | idattrlist ,attrlist | AA decimal | fixed | float | realD attrlist(D)的含义是:在括号中的声明提到的所有名字有attrlist中给出的属性,⽽不管声明嵌套多少层。

写⼀个翻译⽅案,它将每个名字的属性个数填⼊符号表。

六.(10分)下⾯是⼀个C语⾔程序及其运⾏结果。

从运⾏结果看函数func中四个局部变量i1,j1,f1,e1的地址间隔和它们类型的⼤⼩不⼀致,试分析不⼀致的原因。

#include。

中国科学技术大学1998年研究生入学考试操作系统试题(共50分)

中国科学技术大学1998年研究生入学考试操作系统试题(共50分)

中国科学技术大学1998年研究生入学考试操作系统试题(共50分)1填空(每空1分,共20分)①用户与操作系统之间的接口主要分为()和()两类。

②在操作系统中,不确定性主要是指()和()。

③在UNIX系统V中,一个新建的子进程从其父进程那里继承了(),()和()等多种资源。

④在可变分区存储管理中,分区的保护通常采用()和()两种方式。

⑤逻辑设备表(LUT)的主要功能是()和()。

⑥在采用请求分页式存储管理的系统中,地址变换过程可能会因为(),()和()等原因而产生中断。

⑦在UNIX系统V中,如果一个盘块的大小为1KB,每个盘号占4个字节,那么,一个进程要访问偏移量为263168字节处的数据时,需要经过()次间址。

⑧设备驱动程序是一种低级的系统例程,它通常分为()和()两个部分。

⑨ UNIX系统V在打开(open)一个文件时,需要为其分配(),()和()等多种资源。

2(10分)简述LRU,NRU和LFU三种页面置换算法的思想,并各给出一种可能的实现方案。

3(10分)何谓临界区?下面给出的实现两个进程互斥的算法是安全的吗?为什么?#define TRUE;#define FALSE;int flag[2];flag[0] = flag[1] = FALSE;enter-crtsec(i)int i;{while(flag[1-i]);flag[i] = TRUE;}leave-crtsec(i)int i;{flag[i] = FALSE;}process i:/* i = 0 or i = 1 */...enter-crtsec(i);/* 进入临界区 */IN CRTICAL SECTIONleave-crtsec(i);/* 离开临界区 */...4(10分)要使一个系统不发生死锁,一般可采用哪些方法?简述它们的实现原理。

04-编译原理课程测试第四套卷(附解析)-编译原理试题-中国科技大学

04-编译原理课程测试第四套卷(附解析)-编译原理试题-中国科技大学

Elist.place := t1 Elist.ndim := 2 Elist.array := A ,
Elist.place := x Elist.ndim := 1 Elist.array := A A [
E.place := x L.place := x L.offset := null x
7、 (a) 调用函数 m 把实在参数压栈后,将存放返回值的地址压栈,然后调用 f。f 在返回前,将结果送 到 m 提供的存放返回值的地址。 (b) m 要为 3 次 f 调用分配存放结果值的空间,并且这 3 次存放结果值的空间不重叠。在每次调用 f 时,将相应的存放返回值的地址压栈。 8、文件 file1.c 中,函数 func 的定义采用传统的方式,形式参数 f 的类型被提升到 double。函数原型中 该参数也声明成 double 类型,两者类型相同,因此没有错误。 而在文件 file2.c 中, 函数 func 的定义采用现在提倡的形式, 形式参数的类型就是 float, 不会提升。 它的类型和函数原型中声明的类型不相同,所以编译器会报告错误。 9、需要修改,增加虚方法表指针作为第一个域。.type f:f, @function
pushl %ebp movl%esp, %ebp subl $4, %esp movl8(%ebp), %eax movl12(%ebp), %edx movl%edx, -4(%ebp) movl-4(%ebp), %edx movl%edx, (%eax) leave ret .size f, .-f .globl m .type m, @function m: pushl %ebp movl%esp, %ebp subl $4, %esp movl$20, -4(%ebp) leal -4(%ebp), %eax pushl $10 pushl %eax callf addl $8, %esp leave ret .size m, .-m .section.note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.3.5 (Debian 1:3.3.5-13)" 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.c int func(double); int func(double); int func(f) float f; {} int func(float f) {} 9、 (5 分)教材上第 342 页倒数第 7 行说“将 C++语言中一个类的所有非静态属性构成一个 C 语言的结构 类型,取类的名字作为结构类型的名字” 。在这一章都学过后,你认为这句话需要修改吗?

精编中科大编译原理和操作系统研究生考试试卷

精编中科大编译原理和操作系统研究生考试试卷

中国科学技术大学一九九一年招收硕士学位研究生入学考试试题试题名称:编译原理和操作系统编译原理部分(50分)一.填空(10分)1.Chomsky定义的四种形式语言文法是(1)______文法(又称_____文法)(2)______文法(又称_____文法)(3)______文法(又称_____文法)(4)______文法(又称_____文法)2.程序设计语言的语法分析方法可分为两大类,____________和_____________;其中,前者采用__________分析方法;后者采用_______或_______分析方法;3.逻辑表达式的计算有_________和_________两种方式,选择哪种计算方式取决于_________________.4.在一遍扫描的编译程序中,我们必须采取________手段来解决转移目标不明确的困难.5.Lex是用于___________的工具;Yacc是用于___________的工具.6.根据连接在文法符号上的属性间的依赖关系,属性被分为____________ ,_____________互不相交的二大类.7.参数传递方式有________ , __________ , ___________等几种.二.简答题(4分)1.整数和实数的算术运算是可兼容的,为什么编译器要区分它们?2.什么是代码优化?举出至少三种用于代码优化的手段.三.下列文法是否属于LR(1),若是,则给出分析表;若不是,指出原因(分析过程中可能遇到的麻烦),并考虑能否使其成为LR(1)文法,如何做?为什么? (10分)S ? ASES | AS | fE ? Ea | EbA ? c | d四.说明Pascal语言和C语言的变量定义对编译程序实现的影响.(8分)a, b, c : integer ;AR V : 的变量说明Pascal : 例C的变量说明: int a, b, c;五.Pascal程序设计语言不允许越过父过程或函数调用其中的子过程或函数,例如:procedure Aprocedure B┇procedure Cprocedure D┇在过程D中不允许调用过程B,试解释其原因(8分).六.给出将二进制数直接翻译成十六进制数的翻译方案.假定属性hex用于存放十六进制位串,串并置采用算符‘||'.二进制数文法如下:S ? BS | BB ? 0 | 1操作系统部分(50分)一.填空(每空1分,共15分)1.操作系统的基本特征是_________和__________.2.______________是用户和外设、外存之间的接口.3.产生死锁的原因是___________和____________.4.有一个530字的程序.考虑如下访问内存的逻辑地址序列:10,11,104,107,73,526,185,245,246,309,458,364,442,247,248,434.假定页面大小为100字,则其对应的页面走向序列为:_______________________________________________________.如每个进程最多可分给300字内存空间,且采用LRU算法,则其缺页次数为________次,其缺页率为_________.5.段表中设“改变位”的目的是____________________________________.6.为了_________________________而引入多道程序设计.7.逻辑设备是___________________________________._____________________________,和___________________的作用是JCB8.它由_____________________建立.9.临界资源是__________________________________________.二.选择(四择一,每题1分,共5分)1.软件共享的必要性是为了( ).A. 节约内存空间B. 缩短运行时间C. A和CC. 减少内外存对换信息量2.请求页面存储管理采用( ).A.动态定位,静态分配,静态链接B.动态定位,动态分配,动态链接C.动态定位,动态分配,静态链接D.静态定位,静态分配,静态链接3.用户的虚拟CPU功能( ).A.和物理CPU完全一样B.可以执行所有机器指令以及软件“指令”C.不能执行特权指令D.可以执行除特权以外的机器指令以及软件“指令”4.虚拟存储管理中,段(或页)表需要( ),而快表中可以没有它.A.中断位B.引用位D.B 和 CC.改变位5.OPEN操作的目的是为了( ).A.将制定的文件记录复制到内存中B.将制定的文件复制到内存中C.将制定的文件说明复制到内存中D.将制定的共享文件复制到内存中三.判断并改正(前4题各1分,第5题6分,共10分)1.( ) 虚拟存储器空间的大小由外存容量决定.2.( ) 在生产速度和消费速度完全相同时,只要用单缓冲就可以完全并行工作.3.( ) 进程间的同步与互斥工具也是一种通讯工具.4.( ) 虚拟设备和物理设备一一对应.?a,…和一个无穷序列,n…,,甲进程序…个环形缓冲区设有5.n1,2,3,n1列顺序逐个的把信息写入环形缓冲区中,而乙进程则逐个的把缓冲区信息读出.请叙述甲、乙二进程的相互制约关系(1).(2)下列用P、V操作表示的同步算法有何错误.初值 := 0 ; := n;SS21甲进程乙进程)P( V() 11读出┇┇写入P() V()S2.、PV操作写出正确的同步算法(3)用四.(10分)1.叙述请求页面存储管理所需要的数据结构、软件支持和硬件支持.2.叙述(或加说明画出)执行一条访内指令的过程.五.(10分)P、,有二组缓冲区: 设有四个进程、、PPP3421 : 由7个缓冲区组成;: 由100个缓冲区组成.QP中送初始信息;的功能: 不断的往、12PQQ的空缓冲区中;满缓冲区的信息加工后存入的功能: 不断的取321Q满缓冲区的信息并打印不断的取. 的功能: 2请:(1)列出过程间的相互制约关系;(2)设置必要的信号量;(3)用P、V操作设计这四个进程的同步算法.)试题完(。

06-编译原理课程测试第六套卷(附解析)-编译原理试题-中国科技大学

06-编译原理课程测试第六套卷(附解析)-编译原理试题-中国科技大学

编译原理课程测试第六套卷(附解析)1、(10分)用正规式表示字母表{a, b}上a不会相邻的所有句子的集合,并给出接受该语言的最简DFA。

2、(15分)(1)为下面文法构造规范LR(1)分析表,画出像教材上图3.19这样的状态转换图就可以了。

S →V = E | EV →*E | idE →V(2)上述状态转换图有同心项目集吗?若有,合并同心项目集后是否会出现动作冲突?3、(10分)为字母表{0, 1}上的回文数集合写一个LR文法;若你认为该语言不存在LR文法,则说明理由。

(注:一个数字串,从左向右读和从右向左读都一样时,称它为回文数。

)4、(10分)下面的翻译方案计算0和1的串的值(解释为二进制的正整数)。

B →B1 0 { B.val = B1.val ⨯ 2 }B →B1 1 { B.val = B1.val⨯ 2 + 1 }B → 1 { B.val = 1 }重写该翻译方案,使得它基础文法没有左递归,并且为整个输入串计算的B.val和原来的一样。

5、(10分)若布尔表达式有异或xor(exclusive-or)运算(异或运算的结果为真,当且仅当它的一个运算对象为真),请按照教材上表7.4的风格给出异或运算的语义规则。

(备注:该题目设计得不好。

)6、(5分)在面向对象语言中,编译器给每个类建立虚方法表,如教材上图11.3和图11.4那样。

请简要说明,为什么编译器给每个类仅建立虚方法表,而不是建立所有方法的方法表。

7、(15分)C语言和Java语言的数组声明和数组元素引用的语法形式同教材上7.3.3节和7.3.4节讨论的不一样,例如float A[10][20]和A[i+1][j-1],并且每一维的下界都是0。

若适应这种情况的赋值语句的文法如下:S →L := EE →E + E | (E ) | LL →L [E ] | id(1)重新设计教材上7.3.3节数组元素的地址计算公式,以方便编译器产生数组元素地址计算的中间代码。

05-编译原理课程测试第五套卷(附解析)-编译原理试题-中国科技大学

05-编译原理课程测试第五套卷(附解析)-编译原理试题-中国科技大学

编译原理课程测试第五套卷(附解析)1、(10分)用子集构造法给出由下面的NFA 得到的DFA 的转换表2、(20分)(1)通过构造识别活前缀的DFA 和构造分析表,来证明文法E → E + id | id 是SLR(1)文法。

(2)下面左右两个文法都和(1)的文法等价 E → E + M id | id E → M E + id | id M → ε M → ε请指出其中有几个文法不是LR(1)文法,并给出它们不是LR(1)文法的理由。

3、(10分)下面是C 语言两个函数f 和g 的概略(它们不再有其它的局部变量): int f (int x) { int i; …return i +1; … } int g (int y) {int j; … f (j +1); … }请按照教材上例6.5中图6.13的形式,画出函数g 调用f ,f 的函数体正在执行时,活动记录栈的内容及相关信息,并按图6.12左侧箭头方式画出控制链。

假定函数返回值是通过寄存器传递的。

4、(10分)C 语言函数f 的定义如下: int f (int x, int *py, int **ppz){**ppz +=1; *py +=2; x +=3; return x + *py + **ppz; }变量a 是指向b 的指针,变量b 是指向c 的指针,c 是整型变量并且当前值是4。

那么执行f (c, b, a)的返回值是多少? 5、(10分)Java 语言的实现通常把对象和数组都分配在堆上,把指向它们的指针分配在栈上,依靠运行时的垃圾收集器来回收堆上那些从栈不可达的空间(垃圾)。

这种方式提高了语言的安全性,但是增加了运行开销。

编译时能否采用一些技术,以降低垃圾收集所占运行开销?概述你的方案。

6、(5分)在面向对象语言中,编译器给每个对象分配空间的第1个域存放虚方法表的指针。

是否可以把虚方法表指针作为最后1个域而不是第1个域?请简要说明理由。

中科院计算机技术研究所1999年硕士生入学试题编译原理与操作系统

中科院计算机技术研究所1999年硕士生入学试题编译原理与操作系统

中科院计算机技术研究所1999年硕士生入学试题编译原理与操作系统一.(15分)有表达式如下:A+B*(C-D)**N (**为幂乘)(1)给出该表达式的逆波兰式表示(后缀式);(2)给出上述表达式的四元式和三元式序列.二.(15分)有C程序如下:main(){printf("%d,%d,%d\n",10);}(1)试着写出上述printf语句输出的结果;(2)从运行环境和printf的实现分析为什么会有这样的输出结果.三.(5分)构造一个DFA(确定的有限自动机),使之接受含偶数个"1"的0,1串集.四.(5分)有文法G,其产生式如下:S->S(S),S->ε/*空产生式*/试写出一个语法制导定义,它输出配对的括号个数.五.(10分)已知某语言L={a^(m)b^(n)|n>m>=0}.试写出产生该语言的两个文法G1和G2,其中G1是LR(1)文法,G2是非LR(1)和非二义性文法.六.填空(每空一分,共20分)1.现代操作系统的两个最基本的特征是___和___.2.进程控制块的初始化工作包括___,___和___.3.在操作系统中引入线程概念的主要目的是___.4.unix系统v中,系统向用户提供的用于创建新进程的系统调用是___;用于建立无名管道的系统调用是___;用于创建有名管道的系统调用是___.5.unix系统v中,引起进程调度的原因有___,___,___和___等.6.在分区分配算法中,首次适应算法倾向于优先利用内存中___部分的空闲分区,从而保留了___部分的大空闲区.7.进行设备分配时所需的数据表格主要有___,___,___和___等.8.利用符号链实现文件共享时,对文件主删除了共享文件后造成的指针悬空问题,解决的方法是___.七.(8分)在消息传递通信方式下,A.发送进程和接收进程在通信过程中可以采用那三种同步方式?B.试以下面给出的发送进程和接收进程(将接收到的数据存入S)为例,说明当接收进程执行到标号为L2的语句时,采用这三种同步方式,X的值可能各是多少?发送进程P: 接收进程Q:M=10;L1: send M to Q; L1: receive S from P;L2: M=20; L2: X:=S+1;goto L1;八.(8分)一系统具有150个存储单元,在T0时刻按下表所示分配给3个进程:进程Maximum demand Current allocationP1 70 25P2 6040P3 6045对下列请求应用银行家算法分析判定是否是安全的:A.第4个进程P4到达,最大需求60个存储单元,当前请求分配25个单元.B.第4个进程P4到达,最大需求50个存储单元,当前请求分配35个单元.如果是安全的请给出一个可能的进程安全执行序列.如果是不安全的,请说明原因.九、(14分)设正在处理器上执行的一个进程的页表如下.页表的虚页号和物理块号是十进制数,起始页号(块号)均为0.所有的地址均是存储器字节地址,页的大小为1024字节.A.详述在设有快表的请求分页存储管理系统中,一个虚地址转换成物理内存地址的过程.B.下列虚地址对应与什么物理地址: (1)5499; (2) 2221;虚页号状态位访问位修改位物理块号0 1 10 4111 1 72000---3 1 00 24 0 00---5 1 0 1 0注释:访问位---当某页被访问时,其访问位被置为1.中科院计算机技术研究所1999年硕士生入学试题编译原理与操作系统参考答案一.(1)后缀式:ABCD-*+ECD-N**/+(2)四元式三元式(1)( - , C , D , t1) (1)( - , C , D )(2)( * , B , t1, t2) (2)( * , B ,(1))(3)( +, A , t2, t3) (3)( +, A ,(2))(4)( - , C , D, t4) (4)( - , C , D )(5)(**, t4, N , t5) (5)(**, (4), N)(6)( / , E , t5, t6) (6)( / ,E ,(5))(7)( +, t3, t6, t7) (7)( +,(3),(6))二.(1)(5分)输出结果: 10,X,Y 其中X,Y是随机整数值(2)(10分)从活动记录内容安排看,在运行栈中,调用者的活动记录在被调用者的下面,如图:其中参数域和可能有的返回值放在紧靠调用者活动记录的地方.这样的好处是,对调用者来说无须了解被调用者的局部数据或临时量,做到信息隐藏.另一好处是,可以处理变元个数可变的过程,如printf.从printf实现看,C语言中的printf函数,他的第一个变元指出了其余参数的性质,所以一旦printf能够确定第一个变元位置,他就能找到其余变元.C的参数是逆序计算和进栈的,这样就保证了被调用者能知道第一个变元的位置.在所给例子中,main函数调用printf时仅压入两个参数到栈中,而第一个参数中指示要显示三个整数值,但仅给出(压入栈(一个有效值).所以出现上述结果.三.(5分)四.(5分)为符号S引入综合属性h,语法制导定义如下:产生式语义规则S->S1(S2) S.h:=S1.h+S2.h+1S->εS.h:=0S'->S print(S.h)/*输出其配对括号数*/五.(10分)G1:LR(1)文法G2:非LR(1),非二义性文法S->A,B S->aSb|BA->aAb|εB->Bb|bB->Bb|b六.填空1.并发,共享2.初始化标识符信息,初始化处理机状态信息,初始化处理机控制信息;3.为了减少程序并发执行时所需付出的时空开销,提高程序执行的并发度;4.fork pipe mknod5.正在执行的进程时间片完; 正在执行的进程执行了sleep系统调用; 正在执行的进程执行了exit系统调用; 正在执行的进程在用户态运行时有优先级更高的进程进入就绪队列6.中低地址, 高地址7.设备控制表, 控制器控制表, 通道控制表, 系统设备表8.只让文件主拥有指向该文件索引结点的指针,而共享该文件的其他用户只有该文件的路径明而不是指向索引结点的指针.七.在消息传递通信方式下:A三种同步方式分别为:1.发送进程和接收进程均阻塞(即同步的发送和接收)2.发送进程不阻塞,接收进程阻塞(即阻塞的发送和接收)3.发送进程和接收进程均不阻塞(即无阻塞的发送和接收)B.同步的发送和接收方式下:X=11;阻塞的发送和接收方式下:X=11;无阻塞的发送和接收,X=11,或21,或-99.八.应用银行家算法A.安全,存在至少一个进程安全执行队列:P3,P2,P1,P4.(只要P3排第一均可)B.不安全.因为系统在满足了P4的资源请求后,已不满足安全性.九.A.在设有快表的请求分页系统中地址变换机构在进行地址变换时,(1)首先检索快表,试图找到所要访问的页.若找到,便修改页表中的访问位.对于写指令,还需将修改位置成"1",然后利用页表项中给出的物理块号和页内地址(偏移址), 形成物理地址.(2)如果在快表中未找到该页的页表项,则应再到内存中查找页表,再从找到的页表项的状态位来了解该页是否已调入内存,其结果可能是:(1)该页已调入内存,这时应将该页的页表写入快表,当快表已满时,应先调出按某种算法确定的页的页表项,然后再写入该页的页表项.然后再执行如(1)所述的地址变换过程.(2)该页尚未调入内存,便要产生缺页中断,请求操作系统从外存将所缺之页调入内存.操作系统的缺页中断机构从外存中找到所缺的页后,判断内存是否已满.若否,则从外存调入所缺的页;若是,还要先调用页面置换算法从内存中换出一页,再从外存调入所缺的页.在做页面置换时,若将被换出的页的修改位置为"1",说明已被修改过,则要将该页写回内存,然后执行(1)所述的地址变换过程.B.虚地址(虚页号,页内地址) 物理地址(物理块号,块内地址)2221=1024*2+173 (2,173) (不在内存)5499=1024*5+379 (5,379) (0,379)。

01-编译原理课程测试第一套卷(附解析)-编译原理试题-中国科技大学

01-编译原理课程测试第一套卷(附解析)-编译原理试题-中国科技大学

编译原理课程测试第一套卷(附解析)1.(20分)写出字母表∑ = {a, b}上语言L = {w | w中a的个数是偶数}的正规式,并画出接受该语言的最简DFA。

2.(15分)考虑下面的表达式文法,它包括数组访问、加和赋值:E → E[E] | E + E | E = E | (E) | id该文法是二义的。

请写一个接受同样语言的LR(1)文法,其优先级从高到低依次是数组访问、加和赋值,并且加运算是左结合,赋值是右结合。

3.(10分)下面是产生字母表∑ = { 0, 1, 2}上数字串的一个文法:S → D S D | 2D → 0 | 1写一个语法制导定义,它打印一个句子是否为回文数(一个数字串,从左向右读和从右向左读都一样时,称它为回文数)。

4.(10分)教材上7.2.1节的翻译方案P →{offset := 0}DD →D ; DD →id : T { enter(, T.type, offset); offset := offset + T.width }T →integer {T.type := integer; T.width := 4 }T→real{T.type := real; T.width := 8 }使用了变量offset。

请重写该翻译方案,它完成同样的事情,但只使用文法符号的属性,而不使用变量。

5.(5分)一个C语言程序如下:void fun(struct {int x; double r;} val) { }main(){struct {int x; double r;} val;fun(val);}该程序在X86/Linux机器上的用cc命令编译时,报告的错误信息如下:1: warning: structure defined inside parms1: warning: anonymous struct declared inside parameter list1: warning: its scope is only this definition or declaration,1: warning: which is probably not what you want.7: inco mpatible type for argument 1 of ‘fun’请问,报告最后一行的错误的原因是什么?如何修改程序,使得编译时不再出现这个错误信息。

中国科学院软件基础1996答案

中国科学院软件基础1996答案

/* seek for the index of mininum
} } /* end of for i */ free(p); } 九. struct bintree { int ele; struct bintree *left; struct bintree *right; } binsort(a,n,p_tree); /* procedure START */ int *a; /* a[n] */ int n; struct bintree * p_tree; /* p_tree[n] */ { int i; boolean greater; float value; struct bintree *p_tree1,*p_treesave; for(i=0;i<n;i++) { p_tree[i].ele = a[i]; p_tree[i].left = NULL; p_tree[i].right = NULL; } for(i=1;i<n;i++) { value = a[i]; p_tree1 = p_tree; /* root of bin_tree */ while(p_tree1 != NULL) { p_treesave = p_tree1; if (greater = (p_tree1->ele > value)) p_tree1 = p_tree1->left; else p_tree1 = p_tree1->right; } if (greater) p_treesave->left = p_tree+i; /* chained onto the tree */
五.解答:当用户创建或联接了一个文件并把它打开后,便可以对它执行读、写 操作。文件系统在进行读写操作时,需调用一系列读写有关的过程把一字符从缓冲区送到用户区,后 者相反; ⑵ iomove 过程用于实现用户区和缓冲区之间的信息传送; ⑶

国科大计算机复试题目及答案

国科大计算机复试题目及答案

国科大计算机复试题目及答案第一部分:专业课基础知识1. 计算机组成原理题目:请简述冯·诺依曼计算机体系结构的基本原理及其特点。

答案:冯·诺依曼计算机体系结构是一种基于存储程序概念的计算机结构,它包括存储器、运算器、控制器、输入设备和输出设备。

其基本原理是程序和数据都以二进制形式存储在存储器中,计算机通过控制器按照程序顺序依次从存储器中取指令,并将指令交给运算器进行执行。

其特点是指令和数据存储在同一存储器中,程序可以被修改和执行,具有存储程序的灵活性和通用性。

2. 数据结构与算法题目:请介绍一种常用的排序算法并分析其时间复杂度。

答案:一种常用的排序算法是快速排序(Quick Sort)。

它的基本思想是选择一个基准元素,通过一轮排序将待排序序列分割成独立的两部分,其中一部分小于基准元素,另一部分大于基准元素。

然后对这两部分继续分别进行快速排序,直到所有的元素都排序完成。

快速排序的时间复杂度为O(nlogn),其中n是待排序序列的长度。

3. 操作系统题目:请简要描述进程和线程的概念及其区别。

答案:进程是操作系统对正在运行的程序的抽象,它包括程序代码、数据和资源。

每个进程都拥有独立的地址空间和系统资源,进程之间通过进程间通信机制进行通信。

线程是操作系统能够进行运算调度的最小单位,一个进程可以包含多个线程。

线程是在同一进程下执行的,共享相同的地址空间和系统资源。

线程之间的切换开销较小,可以提高程序的并发性和响应速度。

区别在于,进程之间是相互独立的,而线程之间共享进程的资源,包括地址空间、文件描述符等。

第二部分:综合应用能力4. 数据库题目:请简述数据库的范式及其作用。

答案:数据库的范式是数据设计中的一种原则,用于规范化数据库结构,减少数据冗余和提高数据的一致性和完整性。

常用的范式有第一范式(1NF)、第二范式(2NF)和第三范式(3NF)等。

1NF要求每个属性都是不可再分的基本数据类型;2NF要求在满足1NF的基础上,非主键属性必须完全依赖于主键;3NF要求在满足2NF的基础上,非主键属性之间不能存在传递依赖关系。

中国科学技术大学计算机考研经验分享

中国科学技术大学计算机考研经验分享

中国科学技术大学计算机考研经验分享昨天看到录取名单,已被录取为中国科大的学术型硕士,总算是尘埃落定,这里大致说下我的考研经验,希望可以对师弟师妹们有所帮助。

准备篇:我是从大三第一学期开始关注考研信息的,当时目标的浙大,但是后来的一些经历使得我有了研究生毕业后出国的打算,这才放弃了浙大选择了中科大,毕竟中科大在国外有着很好的声誉和强大的校友群,对以后的发展会比较有好处。

对于选学校,我的建议是“不选最好的,但选最合适的”,可能有人会说中科大的计算机的综合实力在国内并算不上特别好,但是它在计算机理论和网络计算方面是有着很强实力的,再加上之后职业规划的考虑,所以我选择了中科大。

“凡事预则立,不预则废”,个人认为之前的收集资料和准备工作是很重要的,这样可以使得考研的过程中复习更有效,更重要的是也可以使自己之后的研究生阶段的学习更具有针对性。

初试篇:本来是打算四月份就开始准备考研的,但是由于种种原因一直耽搁了,之后又由于世界杯和期末考试的原因,搁置了一段时间,直到暑假在家里待了半个月之后七月底到了学校,才开始准备考研。

这段时间的考研准备得相对轻松,每天也就学习六七个小时左右,下午就跑去游泳,每天就是学习数学和英语,再加上对于保送本校还有一丝幻想(当时的想法是如果保送本校的话就不考了,毕竟考外是有风险的),学习也不算很认真,直到九月份才真正进入状态,专业课也是九月份开始看的。

每天早上七点多起床吃了饭去图书馆学习,中午吃了饭之后直接回图书馆学一会,累了就趴一会,晚上到了九点多回寝室,玩一会再休息。

这样的作息时间一直维持到十一月份中旬,到了十一月份之后感觉自己状态下滑了很多,学习精力也不如以前了,中间给自己放了几天假,回寝室玩玩游戏睡睡懒觉啥的,那段时间早上也有点起不来的感觉(传说中的疲劳期?),这样的状态维持了一个月左右,到了十二月份中旬才开始继续振奋起来,开始好好搞专业课和政治。

不幸的是考试前一天开始感冒,而且很严重,幸好最后的结果还算可以,真的是差点因为身体付出代价。

2024年考研计算机科学编译原理与技术历年真题

2024年考研计算机科学编译原理与技术历年真题

2024年考研计算机科学编译原理与技术历年真题2024年考研计算机科学编译原理与技术真题回顾编译原理与技术作为计算机科学考研的重要科目之一,对于考生来说是需要认真准备和熟悉的。

本文将回顾和分析2024年考研计算机科学编译原理与技术的历年真题,帮助考生们更好地了解考试内容和备考重点。

一、选择题1. 编译原理与技术主要关注的是()。

A. 程序编写的方法和技巧B. 如何学习计算机科学C. 程序的语法规则和语义分析D. 程序员的日常工作2. 在编译原理中,抽象语法树(AST)主要用来表示()。

A. 用户输入的程序B. 程序中的变量C. 程序的语法结构D. 程序的输出结果3. 下面不属于编译原理中的前端任务的是()。

A. 词法分析B. 语法分析C. 语义分析D. 代码生成4. 符号表在编译过程中主要用于()。

A. 存储程序的源代码B. 存储程序中变量的类型和值C. 存储程序的中间代码D. 存储程序的目标代码5. 下面哪个不属于编译器的优化技术()。

A. 常量折叠B. 循环展开C. 数据流分析D. 锁定优化二、填空题1. 语法分析阶段的主要任务是()分析。

2. 编译器将源程序经过一系列处理后生成的中间代码称为()。

3. 在编译原理中,词法分析的任务是将字符序列转换为()序列。

4. 编译器在执行词法分析时会忽略()。

5. 语义分析的主要任务是检查程序的()是否符合语言的语义规则。

三、解答题1. 请简要描述编译器的工作原理。

编译器是一种将高级语言程序翻译为机器语言程序的软件工具。

它的工作过程主要分为以下几个阶段:1) 词法分析阶段:词法分析器根据事先定义的词法规则,将输入的字符序列转换为一个个具有意义的词法单元。

2) 语法分析阶段:语法分析器根据事先定义的语法规则,对词法单元进行组合和分析,生成一棵抽象语法树(AST)。

3) 语义分析阶段:语义分析器对抽象语法树进行遍历和验证,检查程序的语义是否符合规定的语义规则。

1996年国防科技大学编译原理和操作系统试题

1996年国防科技大学编译原理和操作系统试题

国防科技大学研究生院1996年硕士生入学考试编译原理和操作系统试题(操作系统部分)注意:1.统考生做一、二、三、四、五、七、八、九、十、十一、十二题2.单独考生做一、二、三、四、六、七、八、九、十、十一、十三题3.答案只能写在答题纸上一.选择题(在下列各小题的备选答案中,请把你认为正确答案的题号,填入题干后的括号内。

多选、少选及选错不给分。

每题3分,共15分)1.分时操作系统需要使用下面哪些成份。

()①多道程序设计技术②作业说明书③终端命令解释程序④中断处理⑤优先级调度⑥系统调用2.进程具有哪些特性。

()①动态性②共享性③并发性④相互制约性⑤独立性⑥静态性3. 在页式虚存管理系统中,若常发生抖动影响CPU的利用率,从系统管理员的角度,则下面哪些方法可改善CPU的利用率。

()①用一个更快的CPU ②用一个更大的辅存③减少多道程序的道数④增加多道程序的道数⑤增大主存⑥采用更快的I/O设备4.在文件系统中,为实现文件保护一般应采用下面哪些方法。

()①口令②密码③访问控制④复制⑤在读写文件之前使用OPEN系统调用⑥在读写文件之后使用CLOSE系统服务5. 从资源分配角度,操作系统把外部设备分为( )①独占型设备②共享型设备③快速型设备④慢速性设备⑤块设备⑥字符型设备⑦虚拟设备二、(9分)对访问串:1,2,3,4,1,2,5,1,2,3,4,5, 指出在驻留集大小分别为3,4时,使用FIFO和LRU替换算法的页故障数。

结果说明了什么?三.(8分)简述文件的二级目录组织形式。

欲实现文件共享如何处理?四.(8分)假设有5道作业,它们的提交时间及运行时间由下表给出:均周转时间。

五.(10分)设有如下图所示的工作模型。

四个进程P0,P1,P2,P3和四个信箱M0,M1,M2,M3进程间借助相邻的信箱传递消息:i P 每次从i M 中取出一条消息,经加工送入4)1(Mod i M 中。

其中M0,M1,M2,M3分别设有3,3,2,2个格子,每个格子放一条消息,初始时,M0装满了三条消息,其余为空。

中科大1992编操

中科大1992编操

中国科学技术大学一九九二年招收硕士学位研究生入学考试试题试题名称:编译原理和操作系统编译原理部分:一.(25分)1.下面是一个FORTRAN77的程序,按语言的语义,该程序的结果是什么?在静态存储分配的情况下,实际的运行结果是什么?扼要说明理由.CALL SUBCALL SUBENDSUBROUTINE SUBDATA I/10/WRITE(*,*)II=100END2.把下面自动机化简.3.画出表达式(a+b)*c+d-(a+b)*c的树形表示和无环有向图(dag)表示.4.画出下面程序第3次进入函数factor时的活动记录栈和静态链(访问链).program fact(input,output);var f, n: integer;function factor(n: integer): integer;beginif n=0 then factor:=1else factor:=n*factor(n-1)end;beginreadln(n); f:=factor(n); writeln(f)end.二. 一语言的文法如下 (10分)S → aSb | Sb | b1.描述该语言.2.该文法是LR(1)文法吗?给出理由.若不是LR(1)的,给出这个语言的一个LR(1)文法.三. (10分)考虑文法S → (L) | aL → L,S | S1.给出语法制导翻译(或语法制导定义),它打印出括号嵌套的最大深度.2.写一个语法制导翻译(或翻译方案),它打引出每个a在句中是第几个字符.如,当句子为(a,(a,(a,a),(a))) 时,两小题的结果分别是3和 2 5 8 1014 .四. (5分)给出下面语言的一个上下文无关文法“形式为xy且x y的a和b的串”(说得更明白一些,若串长为偶数时,分成的等长的前后两部分不相同.)操作系统部分:一. 填空(10分):1.文件的物理组织有四种类型________、_______、_______和_______.2.进程的基本特征是_______、_______、_______和_______.3.引起进程调度的原因有(任举三种)_________、________和________.4.产生死锁的四个必要条件是________、_______、_______和_______.5.在非多道程序系统中,常用的作业调度算法有:__________、_________和___________.6.通过_____________技术把原为独享设备改造成能为若干个用户共享的设备,以提高设备的利用率.二. 判断题(4分,每题1分,正确打“”,错误打“”)1.( ) 进程是一段可执行的程序.2.( ) 原语是用以完成特定功能的不可中断的一段程序.3.( ) 引入SPOOLing系统是为了解决联机作业控制.4.( ) 地址空间仅仅是指程序用来访问信息所用的一系列地址的集合.三. 用类ALGOL语言描述(10分):1.进程创建原语2.利用信号量实现两并行进程的互斥3.进程调度算法4.设备管理中Release过程四. 回答问题(10分):1.何谓临界资源?何谓临界区?2.何谓死锁?如何预防?3.作业调度程序的功能是什么?4.建立一个文件的主要步骤有哪些?五. 说明在段页式存贮管理系统中动态地址翻译过程.(8分)六. 试分析UNIX系统中软中断信号的处理过程,必要时,可辅以流程图或图表说明.(8分)。

1996年国防科技大学编译原理和操作系统试题答案

1996年国防科技大学编译原理和操作系统试题答案

国防科技大学研究生院1996年硕士生入学考试编译原理和操作系统试题操作系统部分参考答案(非标准答案)一.选择题(每题3分,共15分)1.(①②④⑥)2.(①③④⑤)3.(③)4.(①②③④)5.(①②⑦)二、当驻留集为3时,采用FIFO替换算法,页面故障数为9次;采用LRU替换算法时,页面故障数为10次。

当驻留集为4时,采用FIFO替换算法,页面故障数为10次;采用LRU替换算法时,页面故障数为8次。

结果表明,FIFO替换算法的故障数不随驻留集增大而减少;而LRU算法的故障数随驻留集增大而减少。

三.把记录文件的目录分成主文件目录和由其主管的若干个子目录,各子目录的位置由主目录中的一项指出。

应用中常设一个主文件目录,而为系统中每一个用户设立一张主文件目录MFD,每个用户的所有文件均设立一个用户文件目录UFD,作为MFD中的一项。

用以描述UFD的文件名和物理位置,即UFD是用户全部文件的文件控制块的全体。

在二级文件目录中,欲共享文件需给出一个文件的全路径名。

由系统从根目录开始检索;或者用户将其当前目录指向另一用户的子目录上,以实现共享访问。

四.采用FCFS调度算法的被调度顺序为1→2→3→4→5平均周转时间为T =(T1+T2+T3+T4+T5)/ 5 = (2+2.95+3.5+2+2) / 5 =2.49 (小时) 采用SJF调度算法的被调度顺序为1→3→5→4→2平均周转时间为T=T1+T2+T3+T4+T5)/ 5 = (2 +2.5 +0.5 +1.25 + 4.45 ) / 5 =2.14(小时)五.定义如下公共信号量:mutex0 ~ mutex3 : 分别用于控制互斥访问M0 ~ M 3,初值为1。

full0 ~ full3 : 分别用于控制同步访问M0 ~ M3 ,其中full0 初值为3,full1 ~ full3 初值为0,表示信箱中消息条数。

empty0 ~ empty3 : 分别用于同步控制对M0 ~ M3的访问。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一九九六年招收硕士学位研究生入学考试试题
试题名称:编译原理与操作系统
一.(5分) 画出一个DFA,它能接受∑={ 0, 1 }上能被3整除的二进制数.
二.(5分) 下面的条件语句试图消除else的二义性.说明这个文法仍然是二义的.
stmt ---> if expr then stmt | matched_stmt
matched_stmt ---> if expr then matched_stmt else stmt | other
三.(5分) 画出下面基本块的无环有向图.
d := b*c
e := a+b
b := b*c
a := e-d
四.(15分)
1)构造下面文法的LL(1)分析表.
S ---> aBS | bAS | ε
B ---> aBB | b
A ---> bAA | a
2)为上面文法写一个语法制导定义,它统计句子中a的个数和b的个数.
五.(10分) 某些语言允许给出名字表的一个属性表,也允许声明嵌在另一个声明里面,下
面文法抽象这个问题.
D ---> attrlist namelist | attrlist (D)
namelist ---> id, namelist | id
attrlist ---> A attrlist | A
A---> decimal | fixed | float | real
D ---> attrlist(D) 的含义是: 在括号中的声明提到的所有名字有attrlist中给出的属性,
而不管声明嵌套多少层,.写一个翻译方案,它将一个名字的属性个数填入符号表.
六.(10分) 下面是一个C语言程序及其运行结果.从运行结果看,函数func中四个局部变
量i1,j1,f1,e1的地址间隔和它们类型的大小是一致的,而四个形式参数i,j,f,e的地址间隔和它们类型的大小不一致,试分析不一致的原因.
#include <stdio.h>
func(i,j,f,e)
short i,j;float f,e;
{
short i1,j1;float f1,e1;
i1= i; j1=j;f1=f; e1=e;
printf("Addresses of i,j,f,e = %d, %d, %d, %d \n",&i,&j,&f,&e);
printf("Addresses of i1,j1,f1,e1 = %d, %d, %d, %d \n",&i1,&j1,&f1,&e1);
printf("Sizes of short, int, long, float, double=%d, %d, %d, %d, %d\n",
sizeof(short), sizeof(int), sizeof(long), sizeof(float), sizeof(double) ) }。

相关文档
最新文档