南师计算机编译原理2013A卷
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京师范大学2012-2013学年第二学期计算机学院计算机专业《编译原理》课程期末试卷(A卷)班级: 任课教师:
学号: 姓名:
一、(6分)简述一个典型的编译程序总体上由哪些部分组成?
二、(10分)设有文法如下:
G[S]: S::=T+S|T-S|T
T::=L*T|L/T|L
L::=(S)|a|b
问:1、(3分)给出该文法的非终结符号集合VN。
2、(4分)给出该文法的终结符号集合VT。
3、(3分)给出句子(a-b)*a的最右推导。
三、(8分)设有文法如下:
G(S):
S::= (L)|a
L::=L,S|S
问:1、(6分)给出句型(L,S,(a))的所有短语、直接短语、句柄。
2、(2分)给出句型(S,S,(a))的所有的素短语。
四、(7分)设计一个DFA,识别出所有的由0、1所成的串,要求:每一个1后边必须跟至少一个0。
如:0是合法的。
010也是合法的。
但01是不合法的。
五、(9分)设有文法如下:
G[S]
S::=SaSb
S::=bS
S::=ε注:ε表示空
给出LL(1)分析表(7分)该文法是LL(1)文法吗?(2分)
六、(6分)设有文法如下:
G[S] :
E ::=EE|(E)|()
证明该文法是二义性文法。
七、(9分) 设有数组定义如下:int a[5][10];设数组按行存放,每一个int占四个字节。
现有语句while( i<10 )
{
if(i<5)
{
i=a[i+1][i*2];
}
else{
i=i+1;
}
} 写出该语句翻译成的目标代码(三地址代码或四元式)。
若目标代码是四元式序列。
则请从100号单元开始。
八、(10分)设有文法G[S]:
S::=S+S
S::=a
S::=ε注:ε表示空
给出该文法的SLR(1)分析表。
(8分)该文法是SLR(1)文法吗?(2分)
九、(8分)设有文法G[S]如下:S::=L,(S)
L::= S | i
问:1、给出该文法的算符优先关系表。
(填写下表)(6分),该文法是算符优先文法吗?(2
十、(8分)设有文法如下G[S’]:
S’::=S
S::=L=R
S::=R
L::=*R
L::=i
R::=L
将下边两个LR(1)项目集填充完整:
十一、(6分+7分)设C语言函数的活动记录结构如下(已简化),运行栈自底向上增长:
现有C程序如下:
int f(int n,int m)
{
int k;
if (n+m<=0)
k=0;
else
k=n*m + f(n-1,m-2);
return k;
}
void main()
{ int p;
p=f(5,4);
………….//其它语句
} <------------------------------①
问:
1、(6分)设采用标识符栈来登记标识符的作用域及其它信息。
而且该标识符表中内容需要留到以后阶段使用。
当编译到①处时,画出标识符栈中内容。
2、(7分)运行时当第二次(递归)进入f后即:main()->f(5,4)->f(4,2)时,给出整个运行栈的内容。
十二、(6分)设有文法G[S]:
S::=(A,(A))
A::=(A)
A::= ε注:ε表示空
给该文法配上语义规则,计算并打印出括号嵌套的最大深度。
如:((),(()))是3,而((),())是2。
(((())),())是4。