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给出输入串 的自...