编译原理试题

发布 2024-04-16 19:10:10 阅读 6665

1997年编译原理试题。

1.(10分)某操作系统下合法的文件名为。

其中第一部分(device:)和第三部分(.extension)可缺省,若device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。

2.(20分)

a. 下面的二义文法描述命题演算公式,为它写一个等价的非二义文法。

s—> s and s | s or s | not s | p | q | s)

b. 下面文法是否为ll(1)文法?说明理由。

s—> a b | p q x a—> x y b—> b c

p—> d pq—> a q |

3.(10分)某些语言允许给出名字表的一个属性表,也允许声明嵌在另一个声明里面,下面文法抽象这个问题。

d —>attrlist namelist | attrlist (d)

namelist —>id, namelist | id

attrlist —>a attrlist | a

a —>decimal | fixed | float | real

d —>attrlist namelist的含义是:在namelist中的任何名字有attrlist 中给出的所有属性。d—> attrlist (d) 的含义是:

在括号中的声明提到的所有名字有attrlist 中给出的所有属性,而不管声明嵌套多少层。 写一个翻译方案,它将每个名字的属性个数填入符号表。为简单起见,若属性重复出现,则重复计数。

4.(10分)把表达式。

a+b)*(c+d)+(a+b+c)

翻译成四元式。

5.(10分)由于文法二义引起的lr(1)分析动作冲突,可以依据消除二义的规则而得到lr(1)分析表,根据此表可以正确识别输入串是否为相应语言的句子。对于非二义非lr(1)文法引起的lr(1)分析动作的冲突,是否也可以依据什么规则来消除lr(1)分析动作的冲突而得到lr(1)分析表,并且根据此表识别相应语言的句子?若可以,你是否可以给出这样的规则?

6.(5分) unix 下的c编译命令cc的选择项g和o的解释如下,其中dbx的解释是“dbx is an utility for source-level debugging and execution of programs written in c”。试说明为什么用了选择项g后,选择项o便被忽略。

-gproduce additional symbol table information for

dbx(1) and dbxtool(1) and pass -lg option to ld(1)

so as to include the g library, that is:

usr/lib/ when this option is given, the

o and -r options are suppressed.

-o[level] optimize the object code. ignored when either -g,go, or -a is used. .

7.(15分)下面程序在sun工作站上运行时陷入死循环,试说明原因。如果将第8行的long *p改成short *p,并且将第23行long k 改成short k后,loop中的循环体执行一次便停止了。试说明原因。

main()

addr();

loop();

long *p;

loop()

long i,j;

j=0;for(i=0;i<10;i++)

addr()

long k;

k=0;p=&k;

8.(15分)下面程序的结果是120。但是如果把第10行的abs(1)改成1的话,则程序结果是1。试分析为什么会有这不同的结果。

int fact()

static int i=5;

if(i==0)

else main()

printf("factor of 5 = d", fact())

9.(5分)在文件中,关于qsort的外部声明如下:

extern void qsort(void *,size_t, size_t,int (*const void *,const void *)

下面c程序所在的文件名是用solaris c编译器编译时,错误信息如下:

", line 24: warning: argument is incompatible with prototype: arg #

请你对该程序略作修改,使得该警告错误能消失,并且不改变程序的结果。

注:程序中关于变量asthypo和n的赋值以及其它部分被略去。solaris c比ansi c有更严格的静态检查。

#include <>

typedef structelse if (sthypo1->probprob) else

/* end of function hypocompare */

main()

qsort ( asthypo,n,sizeof(hypo),hypocompare);

编译原理试题

语法分析 自顶向下的分析。重点与难点。重点 自顶向下分析的基本思想,分析器总体结构,分析表的构造,递归下降分析法基本思想,简单算术表达式的递归下降分析器。难点 first和follow集的求法,对它们的理解以及在构造ll 1 分析表时的使用。递归子程序法中如何体现分析的结果。基本要求。掌握语法分析 ...

编译原理试题

编译原理模拟试题。班级姓名学号。1 20分 写出字母表 上语言l 的正规式,并画出接受该语言的最简dfa。2.10分 计算文法g m 的每个非终结符的first和follow集合,并判断该文法是否是ll 1 的,请说明理由。g mm tb t ba b db et d d 3.10分 写一个文法使其...

编译原理试题

东南大学。一 文法g1 e et t t tf f f fp p p e i1 试证明符号串tet i 是g1的一个句型 要求画出语法树 2 写出该句型的所有短语,简单短句和句柄。三 1 试写出一个上下文无关文法g3,它能产生配对的圆括号串 例如等,甚至包含0对括号 2 使用文法g3给出输入串 的自...