| 选课类别:计划内与自由选修 | 教学类型:理论实验课 |
| 课程类别:本科计划内课程 | 开课单位:计算机科学与技术系 |
| 课程层次:专业核心 | 学分:4.0 |
本课程是计算机科学与技术专业的专业核心课,目的是让学生对程序设计语言的设计和实现技术有深刻的理解,对和程序设计语言有关的理论有所了解,并能把本课程讨论的概念和技术用到软件设计和开发中。本课程介绍编译器构造的一般原理和基本实现方法,其内容包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等部分。本课程在介绍编译器各逻辑阶段实现技术的同时,强调形式化描述技术,并以语法制导定义作为翻译的主要描述工具。作为原理性的课程,本课程介绍基本的理论和方法,而不偏向于某种源语言或目标机器。
郑启龙老师的《编译原理和技术》课程涉及广泛的编译原理知识,课程内容包括词法和语法分析、DFA、三地址代码、x86汇编等。老师讲课思路清晰,也有学生认为其上课条理一般,需要认真听课或课下自学以消化内容。PPT被评价为虽有趣,但有些地方不够详尽,需要结合课本或其他资料学习。郑老师的上课风格包括课间不休息和随机游走询问学生状态,这可能对注意力集中不强的学生来说具有挑战。
课程作业中包含一些复杂的C语言操作和较多计算量的题目,部分学生觉得题目难度较大,有些问题答案模糊不清。实验部分主要是PL/0编译器的补充和扩展,由于代码质量和实验规范被批评为欠佳,学生普遍觉得实验内容过于繁冗、缺乏现代编程规范。实验占课程较大比例,但实际要求不算高,由团队合作完成,负担较轻。
考试题目设计上比较特别,常考异常C语言表达式和课程非常规内容,这导致学生备考压力较大。考试给分总体较好,郑老师在改分时表现出一定的关照,一般调整得分以保证更高的总体成绩,这使得课程总体上给分偏高。平时作业、实验和小测占一定比例,期末考试占比约40%。
助教角色被评价为不够负责,反应慢且有时不能有效解答学生问题,作业答案提供迟缓且错误率高。助教的支持力度和质量有待提升,学生有必要更多地自行解决问题或求助于老师。
整体而言,该课程不适合希望精细系统学习编译原理的学生,特别是在实验和作业辅助上。这门课较适合不想过于忙碌、追求生活质量的学生,因为课程负担相对轻松且给分较优厚。但对想深入了解编译技术并接受更多编程挑战的学生,建议考虑其他班级选择。
这篇点评给想要选(或不得不选)郑启龙老师课的同学看看好了,看了一圈下来我好像是给这门课评分最高的,虽然我自己的得分也有点低于预期。这门课不好的地方其他都说的挺清楚的,还是建议换李诚老师班。
我觉得郑启龙老师水平还是可以的,能把很多东西讲的清楚。但是在他的课上不能开小差,否则马上就不知道他在干什么了。。郑老师很多事情都是亲力亲为,PL/0实验的测试样例,检查什么的都是郑老师自己一个人做的,没检查完的好像还专门去了他东区的办公室检查,我觉得还是很负责的。
但是这门课的助教我真的一分都不想给,平时作业没有答案,直到要考试了才慢悠悠地把答案上传到群里,而且有错误(都是助教自己写的)。平时习题课也没有,快要期末考试了才赶忙安排一次习题课,并且准备的也不充分。平时分数、实验成绩统计那更是想都别想。很少随堂听课,甚至一个学期下来我连哪个助教叫什么名字都不知道(和顾乃杰老师算法班的助教形成鲜明对比)。在科大读了2年半,我还真没见过那么轻松的助教。
这门课有期中考试和期末考试,期中主要就考文法、语法和翻译,应该算是比较套路的东西,感觉自己考的还可以。期末难度比较高,考的很烂,只能说没好好复习。
上课:不知道。不点名。记得前几周坐在走廊旁边农药,结果下课的时候被老师随机游走 gank 了,所以后面就不去了,改在寝室打了。
作业:似乎每年的作业都是在前一年作业的基础上迭代。经常发生在 GitHub
上找到答案却又因为题目稍微改变而不能无脑抄、找到了三份答案但全都不一样结果自己写出了和三者都不同的答案之类的事情。似乎每两三周布置一次作业,每次大概要花三四个小时抄+消化。某次作业让画一个巨大无比的树,我就拿着
PowerPoint
画了一晚上。。。然后被助教载入习题课了。(当然,习题课也翘了
实验:一个大作业,今年是在基础 PL0 的基础上添加一些功能,2-5 人组队,实测整个实验(包括重构框架的时间,除去写报告的时间)共花费了我 28 小时,如果多人合作的话可能总时间会更长。具体情况可以看我的仓库 https://github.com/txtxj/PL0-Compiler 。另外在这个仓库的 frame 分支下有我重构后的框架,可以给学弟学妹参考。
考试:有一次期中小测,可以用电子设备,直接狠狠滴抄。期末闭卷,五道基础题,卷子发下来还以为漏页了。直接提前半小时交卷了。
给分:今年似乎非常奶,平时作业 59.5/60 + 小测满 + 实验 48.8/50 + 期末半天速成 = 93
收获:写编译器还挺有意思的,尤其是当发现实验的某个要求不是 LL(1) 文法能做到的,于是想到一个奇奇怪怪像 LL(2) 又不是 LL(2) 的方法解决掉的时候,还是蛮有成就感的。
更新于2021.3
评课社区已出现循环。建议大家自行判断。当然我是推荐李诚班的,老师人很好,助教人也好,就是可能会比较费肝(毕竟利益相关:我是adsl的
如果你觉得诚哥班卷,不想去,那完全可以换到zql班上。但是期末别后悔。我同意隔壁班的同学说的这句话:
合着是愿意花时间在实验上是错误的?你愿意花2个小时背书我愿意花2个小时写代码我就不配高分?
啥?你想要事少给分高的六边形战士?还有人嫌张信明上课水哩。坤哥os实验也要慢慢变难。今年已经有个文档36页的实验了。




个人觉得,今年zql老师的这门课略微有点水。
首先,我觉得讲课挺无聊的,每次课的前20分钟还勉强能够保持专注,然而过了这段时间就会因为跟不上/讲的太慢等各种原因完全失去了听课的动力,于是只能课后啃PPT。但是啃PPT效果似乎也挺好(
其次就是实验安排比往年水。第一个实验是让你在PL/0编译器中增加while, break, continue, else和连续赋值语句。第二个实验是进行C语言声明语句分析。但是,这种实验布置也拯救了这个爆炸的学期(笑)。实验检查方式:第一次是抽取几组做报告,第二次是每组做报告。
最后,作业的安排也有点问题。自底向上分析、数据流分析竟没留过作业;期中考试之后只留了一次作业,使靠作业预习课程变得困难。
其实老师人挺好的,很欢迎我们向他问问题,我和几位同学考试前一天也去了一趟他的办公室提问。但是,由于前三点原因,这门课总是让我有一种怪怪的感觉。
课程安排:
综合大家的反映来看,给分超好。

1 非常好代码,是我这辈子都写不出来的。鉴于郑老师是雷军的同学,我只能说老师肯定是把雷军当年写的代码拿来给我们出作业了。
2 教材和PPT上面的有些定义会出现倒装的情况,给人一种是从英文翻译过来的感觉,可就算是这样,翻译之后不应该恢复到中文的语序吗?不然大家读着也很别扭。难不成是机翻的?
以下内容是为了分享本学期的PPT,作业答案。
下载链接如下:
https://pan.ustc.edu.cn/share/index/56676d1923ef40a1a4fc
使用科大云盘保存资料,校内下载应该很快。
以下为帮助大家在评课社区快速寻找资料而列出的关键词,直接使用网页搜索就能检测到,除此之外,别无他用。
.xsl .xswl
.pdf .doc .docx .ppt
.txt .xls .xlsx .pptx .rtf .jpg .jpeg .png
.gif .bmp .svg .tiff
.mp3 .wav .flac .aac .ogg
.mp4 .avi .mkv .mov .wmv
.zip .rar .7z .tar .gz .xz
.html .css .js .py .c .cpp .php .sh .bat
.exe .dll .apk .iso
.md .db .bak .tmp
.zql
首先,老师本人是没什么太大问题的,讲课也还行,甚至还自己一个人卖力地检查实验、改试卷。也很愿意和同学们交流。出的题目有一点点奇奇怪怪的。
第二,助教实在是有很大的问题,发个作业答案也不及时,据说也不为同学们答疑,或者就是回答不会。实验和试卷都是老师负责,也没什么习题课答疑课,工作量完全就是改改作业吧,工资到底发在哪啊???但是这学期经历了xk的课之后,我深刻地认识到,有一个什么都不管的助教是多么快乐qaq(不然我期中之后全抄别人的作业平时分能给我扣没 赞美!感恩!
第三,本人对这种半放羊式教学还蛮喜欢的,实验也不难,当初就是看中这一点才退了英才班而且也没去lc班。感觉还是调了分的,期末卷面估计不超过70,总评90。
我特地来看鸽王的2333
教的还好,但是我没太听懂。。。
我就记住了他是雷军的校友。。。
踩踩
先引用一个评课:https://icourse.club/course/5782/#review-60172
真是出分后赞美zql了,龙门!(好吧我承认我是利益既得者)
课程:刚开始几节课去听了,完全没听明白,郑启龙讲课一般般,而且喜欢随机游走,千万不要坐前排,不过认真听课的大哥们受我一拜!后面就不去听课了,当然也一点也没学,期中和期末都是考试前两天开始预习,对着一堆不知道说了些什么的ppt一筹莫展,然后靠着我的大佬室友一点点教会的(呜呜,真是我大爹),反正就是别去听他讲课了,讲了和没讲一样
作业:前期很少很少,也没有实验,快结课了作业突然指数级增长,抄都抄不完,写了一大堆当时根本看不懂的东西上去,另外作业分给的也很严,非常严,除了qq学姐批的以外其他作业分都极易大残,当然我怀疑是因为往年答案有错的qaq
实验:神奇的PL0出现了,鬼画符开始,幸好大佬队友带飞(我哭死)
考试:期中考试,他不提前留语法制导翻译的作业,就以为重点不在这,结果直接考50分,期中直接祭天喜提55分,期末考试,zql没有像往年一样施展自己的C魔法,而是转向奔赴了另外的神奇领域,Pascal递归调用代码的x86实现,所见之人无不大为赞叹,zql可真是个人,所以你告诉我那十个填空到底该填啥??前面一道完美的串行执行的50分大题,带你从FA开始领略他的分数两级反转领域,一步卒后续直接祭天,最后一道题更是神奇,考了他最后一节课讲了但是没发PPT的寄存器和内存的使用优化,(当然我也没去上课,是听去上课的人说的),总结一下,郑启龙的考试题主打一个反人类反常规在最大限度内恶心你却让你只能硬接,因为他都讲过(joker🤡🤡)
给分:龙门!我承认他给的太多了!!考试瞎写的,作业全抄的,期中期末都是考试前两天从头开始学的,实验是队友大佬带飞的,他给了92,实在给的太多了,抱歉既得利益者只能赞美郑启龙的神奇调分了))
实验写了个mini python解释器,完成基本元素类型及基本函数操作等,其实理解原理了就不难
老师自己也提前花一个晚上写了一份用来展示效果,说大概四五百行吧
然后小组就一共写了一千五百行完成了要求的功能
然而总有大佬几乎独立完成了py全部功能(安详
上课基本没听过,自己在下面看ppt,偶尔来兴趣听一会儿就睡着了
两次期中闭卷,范围从开学到考试的全部内容
都是大题,而且后面的题会和前面的相关,就很慌
助教只说都很好,平均分及格了
期末统考删减了一些,会提前划范围,甚至根据群众意见删掉了一块考试范围
感觉自己都没及格,总评3.0已经满足了(
ps,老师特别喜欢++和指针的各种骚操作,只有QLcompiler能编译那种,谨慎选课
这门课的实验比例给你说是这么多,实际上基本为0,好好考好期中期末最重要,最后成绩82