《编译原理》半期考试答案(2012.11.6)(开卷)
选课号: 学号: 姓名:
1 .采用高度抽象概念有利于程序设计。C语言中循环语句
for (i=1;i<=N;i++) S
对应的显示控制结构是什么?请使用伪代码形式(通过条件跳转指令)表达(15分)。
i=1;
Loop: if i<=N goto B.true (2分)
goto S.next (2分)
B.true:
… /* S的代码*/
i++;
goto Loop; (4分)
S.next:
2.程序片段为:
float fnumb=6.5;
void main( )
{char * p=“UESTC”;int arr[20] ;chat ch ; ... }
void fun( int n) { int m=100 ; ...}
请列出各个常量、变量在内存中对应的内存的存储区名称和存储顺序以及所占用的存储单元的个数。设字符数占1个字节;整数占2个字节;float数占4个字节;double数占8个字节 ;指针占4个字节;内存按照4个字节进行编址。(20分)
解答:
常量存储区 6.5 2个单元
“UESTC” 6个单元
20 1个单元
100 1个单元
全局数据区 fnumb 1个单元
活动记录 (函数数据存储区):
main函数:p 1个单元
arr 20个单元
ch 1个单元
fun函数:n、m 各1个单元
3.简述典型编译系统的5个阶段的任务。(15分)
词法分析: 输入字符串,根据词法规则识别出单词符号。
语法分析: 根据语法规则,将单词符号构成各类语法单位,并进行语法检查。
语义分析: 根据语义规则,进行初步编译。
优化:对中间代码进行等价变换,以使代码更有效。
目标代码生成:生成机器语言程序或汇编语言程序。
4.写出生成语言L的上下文无关文法G(只写产生式):L(G)={an+1b2n+1|n>=0} (10分)
S->aSbb|ab
5.编译程序为什么需要包括出错处理程序?出错处理程序的功能是什么?(10分)
编译过程各个阶段可能发现源程序的错误,需要出错处理,报告错误性质,位置,并将错误影响最小化
6.已知文法G(A):(共30分)
A → aAB | b
B → Bb | d
消除文法的左递归得文法G’;(2分)
求G’中各非终结符的的FIRST集、FOLLOW集;(12分)
构造预测分析表;(12分)
该文法是不是LL(1)文法?为什么?(4分)
答: 1.(2分) G'(A):
A → aAB | b
B→d B'
B'→b B'|
2. FIRST集和FOLLOW集(每个集合2分)
3. 预测分析表(每个产生式2分)
4. 因为预测分析表无多重定义入口,所以文法G是LL(1)文法。(4分)
本文来源:https://www.2haoxitong.net/k/doc/cbd9160faf45b307e87197e5.html
文档为doc格式