湖南大学-编译原理-2023期末考试【原题】

前言

早上11:00考完的考试,凭着回忆把题目重现出来了。

复习的时候刷了一些往年的卷子,感觉用处不是很大。

希望结果不负努力吧。

教材用的这个

1.词法分析(20分)


(1)NFA->DFA
(2)DFA最小化
看了很久,但是不知道为什么第一问子集构造法解出的DFA就已经是最小的了,所以第二问就用Hopcroft算法稍微说明了一下,没法继续划分


2.语法分析(20分)


(1)根据文法写分析表
(2)一个字符串,可不可以被这个文法接受
LL文法,比较简单,没有“空”,直接写即可。
可否被接受可以直接看出来,不可以。然后用栈去按照分析表模拟这个过程,得出不能。

【注意】这个比较要注意一下“倒序入栈”的问题。

我用书上(PPT上)的这个例子做一个简单说明,大概是这样子。如果最后输入串能被全部消掉,并且能归约回开始符S,就表示是可接受的。


3.语法制导和翻译(10分)


考虑4进制体系中数字集合为: =0,1,2请构建一个组产生式并设计语义动作,使其具备将三进制
数翻译成十进制的能力。
使用综合属性就可以构造出来。

4.寄存器分配(30分)


一个比较简单的图,先做活性分析,再分配寄存器,要求画出那个无向图。

大概长这样子,不需要回溯,一遍从底向上分析就可以了。

分析方式老师课堂上都讲过:

5.优化相关(20分)

T1=j-2
T2=4*T1
temp = A[T2]
T3=j+2
T4=T3-2
T5=8*T4
T6=A[T5    ]
……
T11=

印象中提取了几次公共子表达式之后,就比较简洁了,
主要就用到了常量传播和公共子表达式,强度削弱好像没用到,
我试图用<<2来代替*4,但感觉其实用处不是很大。
化简到最后可以看出是一个交换数组相邻两个数的swap操作
答案大概最后是这样:
T1 = j - 1
T2 = T1 * 4
temp = A[T2]
T3 = T2 + 4
T4 = A[T3]
A[T2] = T4
A[T3] = temp

我们一般写代码对于这种交换操作是这么写的
temp = a[i-1];
a[i-1] = a[i];
a[i] = temp;
但是对于数组的访存不能一步进行,这里需要两步,所以上面那样应该;已经从原理上达到了最简。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理期末考试主要涵盖了编译原理课程所学的知识点和理论基础,以及相关的实践能力。在考试中,通常会包含选择题、填空题、简答题和编程题等不同类型的题目。 选择题考察学生对编译原理相关概念的理解和掌握程度,例如词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等方面的知识。 填空题要求学生填写编译过程中的关键参数、关键步骤或关键算法的具体数值或表达式,考察学生对具体细节的掌握情况。 简答题会提出一些编译原理的基本问题,要求学生用自己的语言进行解释和回答,主要考察学生对编译原理的原理和概念的理解和应用能力。 编程题是考察学生对编译原理知识的实际应用能力,通常要求学生编写一个简单的编译器或解释器的某个功能模块,完成对源代码的词法分析、语法分析、语义分析等操作。 在备考阶段,需要重点复习编译原理的基本概念、算法和原理,练习做一些相关的习题和编程实践,熟悉不同类型的题目形式和解题思路。此外,深入理解编译原理的原理和实践,尝试设计和实现一个简单的编译器,也有助于加深对知识的理解和应用能力的提升。 总之,编译原理期末考试是对学生在编译原理课程上所学的理论和实践能力的检验,通过复习和实践的准备,能更好地应对考试的各个环节,取得好成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值