哈工大2022春编译系统(编译原理)课程总结

前言

关于编译系统这门课往届学长分享的资料还是很多的,毕竟是一门重要的大课,而且有一定难度。因此我在复习的时候也是在这门课上比较努力。现在全部考试都结束了,这门课经过一段时间复习也取得了好的结果,最后98分,应该是最高分。所以总结一下这门课的学习方法,主要是个人对课程的体会,希望能帮到学弟学妹们。
成绩:
成绩
应该是单科最高分
在这里插入图片描述

课程介绍

这门课总体来看个人感觉和计网在一些方面很像,课程的条理十分清晰,所以如果上课的时候没有掌握透彻,那么在复习之前最好首先留出一些时间花在梳理脉络上。知道了编译的整个流程和技术要点,复习起来方便使各个模块解耦,逐个攻破能减少很多不必要的精力浪费。
但也有与计网有一些不同。计网属于那种原理都在书本上,很多背的东西,只要肯努力背协议“自学即可学会”的那种课。但是编译不是,如果不理清脉络,不练几道题,很可能是“努力也学不会”的课。
这样的特点就使得这门课成为一门“想不挂科比较容易,想达到很高分数比较难”的课。由于这门课脉络太清晰,所以必考题已经相当于摊牌了(词法分析考一点自动机、语法分析自顶向下+自底向上、写中间代码等等)。期末搞定这几道“明牌”的题,平时分再拿一拿几乎是稳过。但是另一方面,这门课想全部掌握知识点又不是一件简单的事,知识点多造成难以覆盖所有点,而且部分知识点很难短时间掌握(甚至于到现在我还对一些优化方法一知半解,好在老师出题没有偏难怪)。

概况

平时分:容易拿,该做的都做了即可,除了刷MOOC没什么任务,前提是要认真去上课,课上会有小测答题。
实验:内容较难,工作量大,但给分还可以,好好写实验报告
期末:重点。

实验

词法分析:比较简单,按照手册要求写就行。19级用的是南大的实验教材,标价不到30但是市面上没有卖的,只有淘宝几家被炒到很高价格。所以大家量力而行,实验手册很重要,但是未必要去淘宝买,可以尝试在集市收一收学长的或者去图书馆借,或者使用电子版。(图书馆借书一定下手要早,我好像是借到了最后一本·-·,本来就没几本,纸质版的会比电子版舒服很多,而且书很薄方便带)。

强烈谴责无良商家,这么薄的一本书居然卖50+。

谴责!
语法分析:可以顺便复习一下数据结构再做,思路难度中等,代码量较大。
语义分析:代码量较大。
如果没有思路可以参考一下GitHub,有一些资料,但是切忌直接抄,不会做可以拿来看别人的思路,自己在掌握思路的基础上再做。但是直接拿来就用属实有点不讲武德了。

期末考试复习

一定要将各个部分解耦复习,不然复习这块还想着那块很费脑子。比如语法分析和语义分析看起来是两个承接关系的章节,但是复习的时候完全可以采取独立复习的方法,这样每个章节都能理解的比较透彻。当然前提是按我上文提到的,在逐个复习之前你应该早已掌握了全书的脉络组织。
另一点是做题,一定要做题。老师发的习题集基本涵盖了考试中的所有题型及知识点。重要性❤❤❤❤❤。

期末试题回忆

填空

下面是我能想起来的题,题号不记得了,自己标的
1 LR0 SLR LALR LR1 之间的强弱、包含关系。
2 给一个SDD,计算1+2*3+4的结果(类似SPOC选择题)
3 题干给了一段内情向量的描述,问你这种东西叫做什么?答案是内情向量(属于挺偏的一个点)
4 写出寄存器描述符那部分的一些定义(最后一张不能不复习啊 不然这道题俩空必定白给了)

选择

不记得具体的了,但是好像和SPOC上的选择很大关系

大题

所有题目的细节(比如文法给的是什么样的、中间代码生成给的是什么样的源代码)我都记不得了,只能记住考了什么样的题型。
1 设计DFA,识别某种特殊的词法。
2 LL1的考察。第二问比较有意思,问你是不是LL1的,如果是的话画表。答案居然是不是LL1的,(相同左部的SELECT相交),这块当时也是最后几分钟反复检查了几遍,因为实在不敢相信居然不是LL1。
3 LR1的考察。提醒一句:识别活前缀的LR1自动机等等的这种问法的意思就是让你画出LR1自动机,不要想多了。
也希望大家能沉下心来好好理解一下到底什么是活前缀,什么是句柄等等。虽然可能不是真的理解也能把题做对,但是理解这些定义之后会发现对这部分整体的体会上了一层
4 SDT考察。识别二进制数的SDT,要求消除左递归后重新设计一个一样功能的SDT。习题册原题。
5 符号表考察。会画就没问题,没什么特别的。
6 最大的一道题,好像28分。
(1)给源程序写中间代码 最后答案好像24行代码。如果完全不会写直接寄了,后边题没法做。但是错一点没关系,只要脉络对后边可以做。
(2)(3)(4)忘了具体的。第(3)问应该是画出流图然后问支配结点,这应该也是我卷面唯一扣分的地方,支配结点忘记了写自身,希望大家一定注意不要忘了。不过大多数人在这里如果扣分的话应该是没有理解“支配结点”的定义,你需要仔细理解题目问的到底是“写出a所支配的所有结点”,还是“写出a被哪些结点支配”。我已经忘了题目问得是哪种了,但是通过审题能看出来题目想问什么。
(4)好像是画DAG图然后优化,没什么特别的,掌握了就可以。

本次卷面上我认为容易错的点

填空:
内情向量答不上来
寄存器描述符等概念的定义不知道
选择:忘了
大题:
给定的文法不是LL1的,容易怀疑自己答案的正确性
LR1自动机状态一般都很多,别画蒙了
中间代码生成。
尤其是跳转语句。比如第10条语句是goto 1,第5条语句是跳到循环外,而循环外刚好是第10条语句。那么第5条语句最后应该写goto 1还是goto 10?为什么这样写?仔细理解中间代码生成的道理,研究研究SDT会找到答案。一般是goto 1. 因为goto 的一般是S.next,不要想当然地以为S.next就是紧跟着的下一条语句。可能这些道理在画图的时候都知道,但是在实际写中间代码的时候就忽略了。

资料获取

去github找找,很多资料都在上面,应有尽有。包括但不限于热心学长上传的手写习题、期末试卷等。

后记

仅做个人2022春编译系统课程总结所用,仅供参考。其它问题咨询QQ 958284846 请注明来意。
请不要特意开小号加我,我又不收你费,又不给你挂出来发表白墙上,大可不必开个一星企鹅头像小号上来啥都不说就一顿要
编译这门课我也没啥独家的资料哈哈哈,都是GitHub上找的,所以资料没法帮忙,要是有问题咨询,欢迎。

  • 18
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值