[HITCS] 编译系统课程总结

编程入门 行业动态 更新时间:2024-10-24 11:21:12

[HITCS] 编译系统<a href=https://www.elefans.com/category/jswz/34/1770049.html style=课程总结"/>

[HITCS] 编译系统课程总结

[HITCS] 2022哈工大编译系统 实验+期末


贴一下个人成绩,避免误人子弟

选填扣分比较多,但考虑总的复(yu)习时间,算是个人吸收效率比较高的一门课程 ,在此分享一下复习心得,希望对学弟学妹们有所帮助。

概述


这门课今年由cy老师一人执教,相比往年是少了翻转课堂等内容,教学质量见仁见智。

PPT

PPT质量很好,spoc也基本是照着PPT讲,但会添加一些细节。如果想把整门课完整过一遍,推荐直接看PPT,实在难以理解的知识点再参考spoc。

实验


整体向NJU靠拢,与往年大不相同,火炬没有参考价值,实验完全照搬(软构:勿cue)。
难度是真的挺高的,而大三下大家都很忙,只能说自己想办法吧。
参考代码可以直接搜南大编译原理,把源码读通顺了再重构一下基本就可以很好地应付验收了。
这里推荐一份:zyt-yt/Compiler_exp,对比其他几份动辄几千行的,十分整洁。

虚拟机

指导书上写的是Ubuntu 12.04,这种老版本系统最头疼的就是软件源,各种缺依赖,可以换源或者直接装更近的版本。

实验成绩

基本都是80多分,可以说扣得比较厉害了,不过毕竟是博采众长,这个分数也没什么怨言

复习


面向考试的学习虽然不太好听,但编译的理论内容很多,只要能学懂,不管是突击还是细水长流,我认为都是合理的。
这门课对于突击型选手比较友好,大学课程不可能像高中一样有详实的参考书和题解,很多老师甚至到期末都不给习题答案。而编译有spoc,有少量往年试卷,有习题+学长答案,只要不是纯纯摆烂都能拿个不错的成绩。

学习周期

30~40h

复习路线

spoc效率低,相比PPT并没有扩充很多内容,因此推荐PPT为主。参考习题每年都是同一套,推荐两份火炬:

  • 手写习题 题目汇总在一份pdf里
  • 翻转汇总 每题都是单独的文件,查阅比较费劲,推荐作为第一份的补充,部分错误题解自行勘误

有三个部分需要认真看:

  • LL文法类与LR文法类
  • 中间代码生成(语义动作等)
  • 三大数据流分析+自然循环分析

LL/LR文法分析是核心内容,繁琐但是不难,认真做一遍题即可。
中间代码生成需要按PPT模板写,所以每道题都有固定答案,包括临时变量名,跳转Label标号,总行数等。
中间代码需要记模式,而不是模板,不然就只能死记硬背了。
四元式比较简单,变下形就可以。
数据流分析很抽象,时间充裕的话可以看看spoc,推荐期末复习讲座认真听一下,看看各位佬手推分析过程。
其他部分,推荐直接做题,不会的地方再看PPT,最后再看spoc

散碎知识点

spoc测试里有很多概念辨析题,这些内容小题都不一定出,不建议重点复习。考试当天可以简单浏览一下,网上也有很多题库,这里推荐一个:编译题库v15
最后一章《目标代码生成》只出小题,时间不够可以考虑放弃。我的分数就是这样丢的(悲)

期末试题


CSDN直接搜,有完整版试题

选填

有不少记忆内容,很难在复习时兼顾,尽力就好

自动机

考前说不考😅结果第一道大题就安排上了。但是DFA做不出来的话首先应该反思自己

LL文法分析

考了个非LL(1)文法,直接做麻了,没戴表,算了好几遍,做完时考试时间已经过半,只能说挺搞的

LR文法分析

难度正常

其它小考点主观题

访问链-控制链,符号表,简单语法分析器构造之类的,难度正常

压轴题

一段C代码,包括while、if、数组赋值。
首先是中间代码生成,没考四元式和回填,但是这些内容该看还是要看,整段源码按模板翻译完大概20多行。这部分一定要做到直接下手就能写(最低要求是语义正确,要尽可能按模板走),考试时不一定有时间画树。
划分代码块,画DAG。
自然循环分析,这里算是放水了吧,任考其它三个数据流分析之一都能写炸。
代码优化,按照那几个思路随便写写就行。

总成绩

今年的平时分与卷面分正相关,加上实验部分,属于是有点压分了,但是90多分的还是很多。

总结


编译是个很有意思的学科,学一遍下来真心觉得挺有用的,祝学弟学妹们有所收获。

附录


中间代码生成

课件模板有些瑕疵,以如下源码翻译过程为例:

while c1 { while c2 S }

将得到如下中间代码:

...
.label2
c1
...
goto .label2
goto .label2

最后一行明显冗余了,它是由外循环gen 'goto c1.begin'得到,而倒数第二行是由内循环gen 'goto S.next '得到。由于属性继承,有S.next = c1.begin,造成死代码。
这个问题是在习题里发现的,如有其它欢迎评论补充。

Ubuntu 12.04源
由某位留学生支援,2022实测可用
deb / precise main restricted
deb-src / precise main restricteddeb / precise-updates main restricted
deb-src / precise-updates main restricteddeb / precise universe
deb-src / precise universe
deb / precise-updates universe
deb-src / precise-updates universedeb / precise multiverse
deb-src / precise multiverse
deb / precise-updates multiverse
deb-src / precise-updates multiversedeb / precise-backports main restricted universe multiverse
deb-src / precise-backports main restricted universe multiversedeb  precise-security main restricted
deb-src  precise-security main restricted
deb  precise-security universe
deb-src  precise-security universe
deb  precise-security multiverse
deb-src  precise-security multiversedeb  precise main
deb-src  precise main
一个神仙学长

HITCS_Papers

更多推荐

[HITCS] 编译系统课程总结

本文发布于:2024-03-04 21:09:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1710424.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:课程   系统   HITCS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!