编译原理和技术(李诚) 2021秋 2020秋 2019秋 2018秋  课程号:01116302
2021秋 2020秋 2019秋 2018秋  课程号:01116302
8.6(27人评价)
  • 课程难度:困难
  • 作业多少:中等
  • 给分好坏:超好
  • 收获大小:很多
选课类别:计划 教学类型:理论实验课
课程类别:本科计划内课程 开课单位:计算机科学与技术系
课程层次:专业核心 学分:4
简介

This course considers the principles that underlie a wide variety of compilers, and focuses on the problem of translating programs written in a high-level language into semantically equivalent programs written in low-level machine code. After taking this course, students are expected to understand the principles of designing and implementing modern programming languages, and to implement a working compiler using standard compiler tools.

最后更新:

点评 写点评
棉花糖 2020秋

先给这门课一个总体的评价吧:

中科大计科院设计的最好的一批课程之一。


细说:

内容:通过学习这一门课,同学们不仅能够学习到编译原理的知识,还可以学习到包括且不限于C++语法、git的使用、markdown文字处理、软件工程实践、gdb调试等许多在大一大二学习中缺失的内容。

讲课:李老师讲课还是很不错的,不会太跑偏也很清晰。而且ppt中给了很多过程性的描述,可以让大家很生动地理解各个知识点。

作业(20%):相比前几年应该减少了不少。。。我反正每周就花了2个小时。。。

实验(40%):又大又硬。lab123算是热身性质的,基本大家都能拿满(不要学我,lab1遍历字符串的时候从i=1开始了),lab4是独立完成一个CminusF编译器,当时真的差点没把我干碎…我们组完成后的工程差不多有600行代码,大家可以想一下自己调那些不到100行的小代码的时间,然后大概估计一下调这个玩意的时间…lab5是完成3个中间代码优化pass,这个实验感觉就简单多了,稍微注意一点大家都能拿到不错的成绩。

总之一步一步把各种各样的东西都调通还是很有成就感的一件事情,而且说实话这个实验应当是大家这辈子唯一一次接触中间代码生成的编写,所以好好做一做还是很好玩的。另外lab和课程的知识点的结合也很紧密,我后期复习考试的时候就只要通过回忆一下实验,很多内容就明白了。

考试(40%):本门课程包含期中期末两场考试。期中开卷,有手就行;期末闭卷,做了实验基本随便写吧。没有概念解释和优缺点分析,基本上好好做了实验也是有手就行。

 

这门课我个人认为基本上是最能体现理论与实践相结合的一门理论实验课。老师的授课思路很清晰;作业出的题都是需要自己思考的题目,而不是机械性地去查书;实验非常硬核且很有意思,而且能够让擅长实验的同学可以获得一些领先(而不是像COD、OS的实验大家都满分只能拼考试);考试不需要特别看书上的文字,通过复习考试让大家更加熟悉编译器、运行时的各种东西。

另外助教真的都是神仙。。。回答问题、反馈作业都很及时和准确,而且可以看出助教在实验设计上付出了比我们多得多得多的时间,也为此再次感谢各位助教。

关于成绩:

因为不知道期末具体成绩不予评价。不过我个人感觉实验好好做了肯定不会差。

关于bonus:

两个bonus我都加了分了。但我很卷吗?

有些人嫌发issue卷。认识我的人都知道我老咸鱼了,就把正常需要问的问题在git上发了一下而已,怎么就卷了?

有些人嫌bonus实验卷,先不说总共就加两分,你要是愿意在考试上多花时间复习涨个两分一点都不难;更何况写一个bonus pass一个组基本上就只需要3个小时,然后就直接能拿到2分啊?分明是你自己懒吧?

特别是这一堆评分基本上组和组之间都是独立的,而且也不存在所谓某几个组因为做得好导致老师提升评分标准,卷啥了啊?

更何况开学就提了实验和考试占相同比例,明知道的情况下还不努力?


补充:

我看某些同学嫌别人卷

您配么?

合着是愿意花时间在实验上是错误的?你愿意花2个小时背书我愿意花2个小时写代码我就不配高分?

另外我们这次实验真的是军备竞赛么?先不说按照2人组均分50%评分一个同学想拿满分完成分只需要80分,也就是说只要完成了助教在文档里提示到的所有点就可以拿到满分。就这都能叫卷?是不是实验就只配printf一个helloworld然后大家都满分才和您的意?

就应该给你们出点int a[][2][2]={1,{2},{3},4,5,{6},{7},8,9}然后大家一起军备竞赛复习?再出点LR1、LALR、SLR的优点缺点写不对就全扣?

另外我倒看着好多同学抱断别人大腿的样子很靓仔哦。

 

9 3
细雨点洒在花前我也觉得 bonus 其实还可,因为加的分少啊,期末考试多写对一个题基本就加回来了(
tianji同学您好,能方便向你要一份课程PPT和相关实验资料吗
呵呵回复 @tianji: 不是有课程主页吗

立即登录,说说你的看法

suyuz 2020秋

总体评价

这应该是本人大学四年上过的各方面体验最好的一门课(因为提前修了Web,并且大三下上了两周课,尚未感到有更好的,以及web没给我100

老师,实验,考试,课程平台,以及助教团队在我看来都是值得给满分的。但这门课的工作量和实验难度也确实值得一个H课,劝对这方面不感兴趣的同学慎选,不如换个班划划水、去上上机器学习啥的。接下来开始细说。

老师

李诚老师yyds。

实验

本学期的实验跟以往不同,总共分了五部分,并且每一部分(大概除了3)都与课程内容高度相关

  1. 词法分析,FLEX带你走进编译的大门。

  2. 语法分析,用bison将你lab1的成果种出一棵大树

  3. IR接口学习,承上启下,为接下来的工作做好准备

  4. builder,现在有了FLEX,bison,有了API,有了课程第七章PPT,现在开始做你的编译器吧!

  5. 优化,开启-o模式(看了助教的比赛代码才知道我们做的真少((

前三个实验可以说是铺垫和准备,就和别的课程的普通课程实验差不多。而第四个实验就是这门课程最亮眼的地方,要不然这门课只能叫编译原理,不能加上这个技术

  • 首先说下文档,因为上学期有门课做大作业时需要参考CUDA C的文档,我是感觉晦涩难懂还冗长,并且有些参数我根本不需要,但又不得不去看解释。相比之下,虽然我一开始两个屏幕,一个看源码一个看文档都没看懂,但助教提供的Light IR不仅是中文的,而且就几页,没有什么复杂或多余的参数设置,就这些就能完成所有功能,还要啥自行车(我没了解LLVM源码,就只说个人感受)

  • 接着说一下内容。就是根据助教提供的文档,在语法树结点上填写生成IR的代码。而相关的方法基本上课程内容中或多或少都有提及。当然,学习曲线是V形的,起码我要想很久才能写下第一行代码,中间填结点的过程是很愉快的,但是后面debug的过程又很麻烦。

  • 对于评分,也是目前为止我见过最好的评分方式。首先组队实验,三人队两人队均可,分数设置也是用心考虑过的(不像web我一个人全干了还没加分);第4,5个实验实际上是一个没有排行榜的军备竞赛,需要去猜测助教会出什么样的测试样例,当然不全对也能拿满分(我就没考虑到作用域导致没全对)。但是很多同学好像觉得pass基本样例就行了,然后说测试样例太难,问题是只完成这12个测试样例甚至有个留空的函数都不用写,这明显不合理啊(((

  • 工作量:工作量自然是很大,应该是本人写过最长的一个程序。老师助教也好心给我们延了一周,那段时间我基本天天课上敲代码「太菜了qaq」(幸好延期了,不然一周写三门大实验真就要暴毙了

  • 此处@一波计网,趁早由信院接管吧,虽然貌似信院实验也不大好(

实验带给我的收获是很大的,从零开始学了点cpp、gdb,也加深了对整个编译这门课的理解。但真的有很大工作量,且如果像我一样没有cpp基础的话,想要做好就得从早码到晚。Lab5老师延了救命3天,当时我勉强写完公选课论文+Web实验2,然后从早肝到晚,取外卖的路上满脑子都是流图(此处建议不要做ddl战士

收获大意味着需要花很多时间,如果对写代码做实验不感兴趣,最好不要选,不然看着文档和一堆留空的代码段真的头疼。如果抱着一门水课的心态来,我认为这门课确实0分。总不能指望老师助教又负责、课又水吧。

考试

和课程实验联系十分紧密,教了什么,就考什么,重点划了什么,就考什么

  • 不考概念不考背书,看懂了算法会做作业就行,甚至不用背它(有题怕我们弄混都给出来了),和计网形成鲜明对比

  • 考的实验其实不难,但是如果没有对照过.ll代码debug的话确实很难下手。

课程平台

没建官方QQ群,使用的是gitlab。老师希望大家在gitlab上踊跃提issue,并设置了bonus加分,在我看来效果还是不错的,毕竟是实名但带马甲问问题,在过于水和过于冷之间有个平衡。每次做实验都比较晚,开始做的时候刷一遍issue,能少走很多很多弯路。

有关实验环境也是由助教进行提供,本人使用docker,体验很好。但身边的人或多或少都出现过一些问题,这里建议下次助教一步到位,把vscode remote ssh也教上((

作业实验都是直接git commit,并且对文件夹格式都有一定的需求,直接push我们去学习git,我认为还是很有帮助的,不管是工作还是科研,只要在计算机领域都会用到版本控制吧。(但很多人都很排斥?

助教团队

最后大力赞美我们的助教团队,可以说这是我大学三年来见过最负责任的助教们(真的自愧不如

自己设计的实验文档和接口(虽然好像就是沿用了比赛的接口),对各种疑问的及时反馈(我提个文档缩进问题都改了)以及优秀的业务能力。

不足

挑一些刺。。

  • PPT版本有些奇怪,经常有加长版和后续版之类的,对于异步学习的同学不太友好

  • 不知道是不是有意为之,lab4倘若给一个example会更好一点,我看到builder空着的十几个函数看了一天,过了好几遍文档才写出第一行代码,这样对萌新属实不友好。

  • 实验文档和实验细则更新太快,lab5尤为显著

    • 公告栏隔三岔五更新

    • lab5有个样例明明issue已经提过了,但评分时没有更改(发邮件提醒后更改了)

当然,lab5是新增的实验,出些差错也挺正常的((

总结

可能有人会说我是既得利益者,但我也确实花了很多很多时间(包括卷bonus实验也会占用算法复习时间),并且卷的这些东西都是有用的(起码在我看来比卷实验报告,数学物理和背书大赛有用),我认为这是应得的(逃。有付出就有回报,能切实提升自己各方面能力,老师助教尽心尽力,让我这个几乎0基础的同学也能做好东西,这样的课,上到就是赚到。

妮可的数学物理是有目共睹的难,却不希望计算机学院的专业核心课难、工作量大?就要跟计网、杰哥算法实验一样?因为感觉自己用不到分数低就去说课卷,私以为数学物理才是你们的攻击对象,给咱为数不多的好课留点唇舌吧。

刚好有位浙大同学今天给我发了条消息:

 

欢迎大家来喷我(>ω<)

8 2
根本不行zd100昏的神!
细雨点洒在花前最后的黑体字不能再认同了!

立即登录,说说你的看法

King.Zevin 2019秋

本学期⑦助教之一

本学期课程主页:http://staff.ustc.edu.cn/~chengli7/courses/compiler19/

本学期决定不用qq群,而改用gitlab的issue

------------

欢迎吐槽

8 2
Lotdhh关于LLVM,推荐一本书:Getting Started with LLVM Core Libraries,对LLVM各个模块都有介绍(包括实验用到的IR模块)。
细雨点洒在花前吹爆助教!

立即登录,说说你的看法

orz2345 2020秋

课程还没结束,先来小声吐槽一下。(给分好坏未知,但是必须要填,就随便写一个)李诚老师很认真,大家可能学的都很好也很开心,但是并不包括我qwq

九分是因为老师很敬业不忍心打低分,但是真的太累了(哭

可能之前来评价的都是大佬,个人感觉实验量真的太大了,一个实验还没结束另一个实验又放出来了,最近平均每两周一个实验,每次实验花费5天+。

我这学期一共6门课,如果每门课都像这样留实验/作业,我14天得当成30天才够用((((不睡觉可能时间差不多。

然后上课发言有加分issue提问有加分,感觉自己什么都没懂什么都没开始做,周围的人就全都会了qwq(从期中考试来看真的是大家分都巨高,满分十几个((((

虽然选课前做好了充足的心理准备,现在学期中了还是觉得压力好大,这门课对我来说真的是上课巨难、实验巨难、压力好大qwqqq。老师的本意是好的,期末占比调低,几乎和实验占比一样。但是现在转念一想期末只是承担两个星期的压力就好了qwqqq,现在一学期都陷入焦虑,不停写实验.jpg

6 2
小鱼同意同意
萝卜萝卜萝卜这课该换到英才班去

立即登录,说说你的看法

TheLitFire 2019秋

总评94,有点小伤心,不过自己期末考的怎么样也是有数的。

实在是想狠狠的夸一夸李诚老师,要不是我对系统和分布式兴趣不大,我一定和李老师跟到博士(你在想peach)

多说一句,如果大家在各课程看到一位新加入科大的教授(而且比较年轻),建议去试一试,甚至能在实验室里混到一席之地吧(为什么我就没有这样的命运嘤嘤嘤)

闲话不扯了,建议大家来。

 

最后大言不惭的谈两句对这门课程的看法:我实在觉得这是相比本学期其他课程以外,最简单的课了

1. 有清晰的算法、概念、计算步骤与思路;没有十分困难的设计和灵光的闪现。

2. 教材(龙书)讲解的很好,如果要精炼一点,昱姐的紫书也还可以(但我至今认为它就是在抄龙书还抄的不咋地);相比其他同年课程(随机过程,遍地都是错;微机原理,废话太多书还绝版)要好得多了。

3. 课堂与考试最为接近,这点与计算方法和随机过程相比尤为显著。

4. 李老师单独出题,考点鲜明,也不为难人,看懂书学会算法绝对能拿好成绩。

6 0
PB18000000 2018秋

第一次评课,一个星给李诚老师的讲课,一个星给给分上。首先就得讲课完全没有问题,但是有的助教的表现和实验真的很难对这个课有好评。首先是实验问题,实验过多过难是公认的,实验量大是可以接受的,毕竟以前那么多学期,模电还有算法都是有很多实验的,但是实验的评价方法真的难以让我理解。因为不是所有人都想搞编译,学编译只是这是门必修课,所以为什么实验要搞得那么难,把一些对应初学者很难第一遍搞明白的东西强加给别人呢,占用大家大量的时间而且还不一定能做出来呢,实验4,实验5搞成前面3个实验那样不是更容易让大家接受吗?横向对比一下,模电实验同样和这门课是一学分的实验学时,模电实验的实验文档就思路很清晰,而且每周有固定的时间可以到机房做实验,和助教交流,而这门课的实验文档对于一个初学者真的费解,但最不能接受的是有的助教却总说认真阅读实验文档就可以轻松完成实验(真的怀疑他有没有从一个初学者的角度看过,可能我智商不够),加上实验文档和源码反反复复的改变,然后就耗费了大量时间。感觉同样是一学分的实验课,为什么不能搞成每周有固定的时间可以统一沟通呢。最后再吐槽一下习题课上的有的助教,我大一大二俩年所有习题课几乎都参加了,助教水平确实参差不齐,但是第一次见有人戴个帽子上习题课,然后感觉比谁都着急(真的感觉到了不尊重)。在课上,我确实感受到了李诚老师对于编译原理这门课的付出和热情(但是有些助教又把这种感觉搞没了),所以这门课可能更适合一些同样在编译原理上有着相同追求的同学吧。

5 0

这课开了3年,只有20个人在评价(今年144人选了这个班)大家都在说好话,那我来当坏人,说说不好地方,因为这门课在评课社区分太不正常(我严重怀疑是水军刷分或者幸存者偏差?),所以我有意给低分,至少得让分数和课程实际情况相匹配。

首先我奉劝不喜欢卷的或者卷不过的同学慎选这个班!!!!!最终的结果可能是你整个学期费心费力,还不如你隔壁班的朋友划一学期水拿的分数好。这个班的作业量和实验量绝对是三个班最大的(包括英才班),以至于产生一种错觉上学期一直在学编译,其他课程存在感薄弱,即使编译这门课在理论上对大多数同学不是上学期所有课程中最有用的(后续无论是工作还是考研),但是它绝对挤占了其他重要课程的时间。

作业不多说了,虽然有配套答案,但量是绝对能让你满足!!!

不得不吐槽实验和issue。。。。。一帮人为了卷而卷(issue有额外加分),疯狂发一些看似高大上实际上屁用没有的issue。这里不得不提一下实验环境的问题,按照助教给的方法配的环境日常奔溃,慎选(即使问助教他们也不知道怎么办,但做实验如果不是他们给的环境,出了问题又不负责。最离谱的是后两个实验我们三个人的电脑只有我的能正常跑,其他人的出现各种奇怪问题,只能他们写好发给我,我来运行)!!!推荐使用OS时留下来的虚拟机,这不比VB强100倍???

总共5个实验,前3个没什么好说的,github上有模板,大家估计都做的差不多。第4个和第5个属实让人无语,助教自认为自己文档写的很好,实际上如果一个初学者看真的就像文言文,似懂非懂。。。。为了比较好的理解llvm,我们组专门把llvm源代码相关部分进行了阅读,助教所做的不过是将源代码进行了包装,好比是换层皮大写变小写,空格变_这种事。。。。不如直接用源库,这种简化的看似是对初学者友好,但一旦深入,让人很难受。当然最恶心的是实验五,每次写完跑完脚本没问题,提交了,不久后就会发现助教发issue,代码或者要求有bug,又得改,来来回回四五次,不是所有人都那么闲,能天天盯着issue。

还得提提查重的问题,只有实验4和5进行了查重。我感觉这查重就像是抽奖,我了解到的是实验四有同学参考github被扣分的,我对查重被罚没意见但理由竟然是对其他同学不公平????github是公开的大家都能看,怎么就不公平了?为什么说像抽奖呢?因为有的组也参考了,但没被查出来,查出来的只能自认倒霉。。。。

感觉我们这个班才像英才班课程,老师很敬业,也是对标国际一流,但是这是普通班,英才班又不限制优秀率,爱怎么卷随便。。。。本人光荣被卡(期中满分,我是实验小组的队长,有加分,且我们每次实验分都是平分,期末没给成绩 直接给了总评,期末很简单,作业是满的,实验我想应该在平均水平之上,平时没卷),而我的两位组员都没被卡……我怀疑往下调成绩也是按学号来,也是抽奖……

还要提一下期末考试考了实验,但实验是分工的,例如考试中关于活跃变量分析中Phi指令的处理,这部分是我做的,我的两位队友这题就白给了,既然实验都分工了,最后来这么一下,是不是有点。。。。。


下面助教说了查重只查变量名之类的,学弟们懂了吗?懂得都懂!

5 11
富哥们沃利贝尔很中肯的评价,参考GitHub代码被查重美名对其他同学不公平,有些人借往届学长的代码直接抄没被查出来就公平了?嗨呀!太公平了!
萝卜萝卜萝卜回复 @富哥们沃利贝尔: 批评不自由,赞美无意义。
gloit我是课程助教,我想回应一下实验中的一些问题,以及希望得到一些反馈 1. 关于实验环境的问题,今年确实第一次做,我们已经尽量让镜像易用了。请问你们具体遇到了什么问题,是否在哪个issue中进行了反馈?我们希望之后能够继续改善环境使用上的体验,希望得到你的反馈。另外推荐VirtualBox是因为它是自由软件而不是商业专利软件,也有同学使用了VMWare WorkStation。 2. 关于文档问题请问有什么更加详细的建议吗,我们希望之后的课程中能够继续优化。 3. 实验专门设计的框架是为了简化lab5中的中间代码分析和优化。你们看了LLVM应该知道LLVM中的分析框架有着众多的类或变量,以及非常繁琐的为了性能而考量的C++语言使用规范,这些东西对于同学们或者助教来说理解起来都很困难。实验简化的框架只包含了实验相关所必要的内容,在使用上更加容易。另外实验框架中没有使用LLVM的代码,而是模仿LLVM的行为构建而成的。由于框架在完成后未经充分测试,实验过程中出现了很多问题,这确实是助教们的责任,我们后续会继续改善。
gloit4. 关于查重问题,我们在课程开始的时候就强调了这一点。但是因为技术受限,有些查重并不能被发现,只能确保纯复制粘贴或者变量命名可以被找出。欢迎推荐给我们新的查重技术。 5. 关于issue的加分,主要还是鼓励大家进行互动,最后加分时的issue会经过助教审核确认有效后才算的,并没有那么多
萝卜萝卜萝卜回复 @gloit: 关于环境,我们和一位助教私聊过,没回答,也直接和老师说过,只是说会和助教反应情况。Win10系统下,VB会出现不能使用的情况,初次安装可以使用,过一段时间就不能使用,重装没用,网上查到的方法是用旧版本的VB,开始有点用,后面也会崩溃。
gloit回复 @萝卜萝卜萝卜: 能试一下现在最新的VB吗?另外你的Hyper-V是否开启了?我们最好直接在issue上讨论,可以直接发gitlab上
萝卜萝卜萝卜回复 @gloit: 关于文档,强烈建议在文档中直接把所有提供的接口给出,我们在实验过程中之所以会去看llvm源代码,是因为头文件中给出而文档中没有给出的接口不知道用法,查看源代码过程中也发现有些接口没有源代码接口的意图清晰,有时候出奇怪bug,我认为实验目的应该是理解原理后自己利用现有工具实现目标,而不是耗费大量时间研究工具,况且这个工具是助教自己搭建的,完备程度及相关资料都不完善。
萝卜萝卜萝卜回复 @gloit: 我用的就是最新的,就像我说的开始的几次是可以用的,后面莫名其妙崩溃没法打开,网上查到不少人有这个问题,但没有靠谱解决方法。
gloit回复 @萝卜萝卜萝卜: 好的,谢谢你对文档的反馈,我们后续会改进。关于VB我们后面也会多测试一下。
萝卜萝卜萝卜大概有人不同意我说的,但评课社区本来就是主观评价,我相信看评课社区的人,也不会只看我一个人的。我只是以一个普通人角度来说(一点都没卷,多一点都没做,但该做的都做了)。但凡卷了的大佬,应该无法体会普通人的感受,毕竟优秀率就那么点。
silence有一说一,评课社区有20个评价的课并不多,每年能有几个人来评课就不错了;更何况这门课是专业课而不是全校通修,且只开了三个学期。 大雾实验每年选课人数不下一千五百人,不过只有117条评课,基本全是喷的,难道给大雾实验评课的全是水军?

立即登录,说说你的看法

Sqrti 2020秋

课程

主要是紫书上的内容,优化部分夹带了一点私活(菜鸡并没有看龙书,全靠紫书和PPT),期末的时候发现诚哥的PPT很香

本学期主要讲了词法分析、语法分析、语法制导的翻译、中间代码生成、运行时存储空间的组织和管理、独立于机器的优化、代码生成

作业

平时的Homework主要是紫书课后题,多数都有答案(一部分是龙书课后题,谷歌有答案)

助教作业给分也很好,只要不是错的太离谱都有A/A+

实验

实名反对楼上"萝卜萝卜萝卜"说实验文档不行(ta 貌似删除了),作为一个混了三年的菜鸡,自认为助教给的文档已经很全面了,至少放眼三年多的实验课,也就2020的CG可以与之媲美。不过“文言文”倒是真的有一点,第一遍读可能会云里雾里不知所云但一般来说读三遍就看懂了,且实验中遇到的问题都能在文档中找到,如果没有,那大可能是没仔细看文档(我在Lab3做类型转换的时候没看到助教给的文档,自己想了很久,后来才发现助教在另一个文档中都提示过了)  

请注意我的意思是:我赞同助教文档不便于理解阅读,但我并不赞同助教文档不全面

关于环境,不是很明白为什么觉得不用助教的环境除了问题还需要助教负责的,至少本人自己双系统完全按照助教文档配置的环境完成所有实验没有任何bug

请注意我的意思是:我并不赞同 由于采用非标准实验环境而导致实验问题说实验环境有问题,而若自己环境有问题,应去gitlab提出issue, 我相信助教和老师会帮助你解决的,而不是在评课社区说。

关于接口问题,确实觉得助教封装过度,但这一点应该在Lab5 bonus之前看不出来的,本人除了bouns看了一点llvm源码,改了一下助教的代码,其余都是用助教封装好的库做的,菜鸡确实认为助教封装的代码节约了我很多时间(

而且诚哥班实验设计非常好,循序渐进,不像隔壁班直接做一个编译器出来(

本学期实验内容主要是

(不好意思忘了一个,等晚上补)

  • 词法分析
  • 语法分析
  • 忘了2333
  • CminusF编译器
  • Pass优化

前三个工程量比较小,差不多半天+一晚上就可以完工。

第四个实验差不多花了三天两夜,但难度感觉也不算大,认真学相关知识,提前构思好逻辑,分块debug,主要是代码量过大,至于隐藏测试,个人觉得,很多隐藏测试自己其实都应该测得出来的,随便搞个快速排序就差不多了,虽然我由于漏了测!=导致一个bug没测出来。

第五个实验应该是我最肝的实验,因为确实对优化感兴趣,所以就去卷了一下bonus, 做了两个优化,bonus总耗时约七天

关于github参考,请问那些参考的同学,是真的“参考”吗, 如果认为参考就是大段复制粘贴别人的代码,那我无话可说,据我所知,有两组相似度有“96%”, 我们组也适当参考了github, moss查重结果是11%, 没有任何扣分(

总而言之我认为是一个很适合正常学生学习,练习的实验过程, 并且在练习完对知识会有更深的理解(尤其是Pass优化那里)

除此之外,诚哥还会考虑到学生的期中时间、天气因素,突然就延迟ddl(赶ddl星人狂喜)

考试

期中印象里比较简单,但要细心,特别是正则表达式那里(毕竟开卷嘛)

期末。。其实也不难,可惜我SLR没背,直接丢了10分。期末之前诚哥给了个复习PPT,差不多就是画考点了, 范围很稳,而且我一直害怕的翻译也出的很简单。然后全学期实验考了20多分(大概这个分), 好好做实验的话没什么问题。在见到期末卷子之前,我一直很害怕诚哥出大面积背诵内容,鱼的记忆完全背不住( 诚哥出卷真的很考验理解,水准高!其实整张卷子觉得需要记的只有SLR。

给分

作为一个期中不到平均分期末80的人,最后总评91。。。这到底是怎么给的分啊(诚哥,yyds!)

相关:作业几乎都是A/A+,实验是二人组,非队长,CminusF 88/100,Lab5不清楚,但bonus拿到了满分,没有卷任何issue, 上课没有回答

总结

这是第二门我在科大体验极其愉快的理论实验课,同时也是第二门让我觉得只要付出就一定有回报的课,也是我愿意写在cv上的第二个课设。 老师水平高且体恤学生,助教也都是神仙,还要啥自行车呢(

 

4 7
Hades您可不菜orz
富哥们沃利贝尔看不懂文档管我吊事?毕竟我们高智商之间交流没有压力,你们这些低智商看不懂文档不配发表意见,只配被实名制反对!
Hades回复 @富哥们沃利贝尔: 鼠人remake了,希望下辈子能当个高智商
萝卜萝卜萝卜其他的我不做评价,环境上我也按照助教说的做了,但是不成我能怎么办呢???我也直接面对面向老师说了,还是不成啊。。。。谁让我是低智商呢
Sqrti回复 @富哥们沃利贝尔: 阿哲不好意思,我反对的是他说的“实验文档不全”,并不是“看不懂文档”, 我确实也觉得文档不好读, 但我确实不认为文档不全面
Sqrti回复 @萝卜萝卜萝卜: Emm说实话,我用VB失败后选择了第三种配置方式build了一下午成功了。如果您三种方法都尝试了且提过issue仍没有解决,那我深感抱歉。 P.S.我不认为这种阴阳怪气的说话方式是一种和平的交流方式。
萝卜萝卜萝卜回复 @Sqrti: 我从一开始就在说助教的文档让人读完似懂非懂,我没有说它不全(至于你说我删了,我没有删什么,也没必要)。助教文档好比是把书里的精华提取了出来,没有过程,对初学者不友好,但如果都懂,显然很方便。

立即登录,说说你的看法

Lyncien 2018秋

课程:

有点难度,但毕竟不是H班,还是能接受的。词法部分不难,语法最难的地方就是搞清三种LR的构造/区别,还有就是判断/写出上下文无关文法,二义文法(习题集好多难题);语法制导定义/语法制导的翻译(蜜汁中文翻译),两个概念一开始还分不清楚,自上而下/自下而上的继承属性的计算,写出栈操作代码也是有点难度;类型检查,数理逻辑再现。。中间代码生成,就是设计翻译方案来生成代码,涉及短路计算/代码回填;运行时存储分配,学习了之后对实际编程还是挺有用的;代码生成和机器无关的优化,简单介绍基本块和流图,数据流分析,考试时会有计算题

课本还是一如既往的科大风格,难啃,感觉大部分和龙书上差不多,一学期下来大概只上了半本多,后面更难的部分没有上

作业是部分课后习题,答案大部分在配套习题集上有,次数很多,但交了就有分(当然,要认真完成

实验是实现PL0编译器,三人一组,会学习使用git。助教给了一个框架,其后几次实验实现词法、语法、错误检测/功能拓展、代码生成。和隔壁班的略有不同。

考试是两个班老师合出,隔壁班老师喜欢考复杂的指针和PL0相关的,考前可以看看隔壁班老师主页上的题

老师:

科研水平很高,年纪轻轻就是正教授,我等楷模

教学水平,虽然是第一次上课,但真是比一些ppt播放机强多了,课件也很用心在做,但有时候试图解释某个概念/想法时并不是很清楚(可能书上有些词就是不好解释)

上课时还会关心一下同学们,分享一些人生经验/故事,课件末尾也会有名言警句,可以说是很棒了

最后给分也非常好,付出努力的都不会差

助教们:

很负责,有一位助教专门更新网站,每次上传课件都会发邮件通知

其他助教分别负责一次实验,会根据同学们的反馈更新实验要求

开学初就建立了Google的邮件群组,有通知和反馈都会收到邮件,很赞


课程主页:http://staff.ustc.edu.cn/~chengli7/courses/compiler18/

4 0
Fancy 2019秋

看到今年的评价不太多,所以来说说今年课程的主要内容。

今年主要使用 gitlab 发布课程信息、作业、PPT以及问题讨论,地址是 http://210.45.114.30/,据老师和助教的想法是这样比较能避免水群的问题,而且有信息和问题大家能一起讨论。实际体验还不错(除了有些你特别着急的时候可能无法及时得到回复,但是一般 ddl 时间都留的比较够,这种情况一般不太会发生),大多数情况下助教和老师的回复都很及时(这里赞李老师,真的是到目前为止大学见过最负责的老师,会经常看 issue 并及时回复)。

课程主要内容和之前的变化应该不太大,还是那些东西,我基本上就只看了 PPT (大雾,期中考试之前才买了龙书,但考试的时候也没看),PPT 很细致,会把讲的例子的步骤一页一页的呈现,并且还有不同颜色标注重点,真的很赞。

实验内容今年变化比较大,今年是写一个 C- 语言的编译器,使用 LLVM 作为中间层,一共 4 个实验:

  • 实验 1:使用 LEX 进行词法分析;
  • 实验 2:使用 YACC 进行语法分析;
  • 实验 3.1:对给定的几个简单例子手动翻译为 LLVM IR;
  • 实验 3.2:将使用语法分析之后得到的语法树翻译为 LLVM IR;
  • 实验 3.3:阅读 LLVM 中几个机器无关优化的源码,撰写阅读报告;
  • 实验 4:阅读 LLVM 中关于寄存器分配的源码,撰写阅读报告。

具体的实验内容可以参考 gitlab。实验一比较简单,唯一的难点可能是匹配多行注释,这个在网上有很多资料可以参考;实验二还是得吐槽一下,助教的目录结构特别混乱,给的教程质量也不高,导致很多同学把大量的时间花在了 merge 更改和把 lex 和 yacc 结合在一起,而不是实验本身;实验三是综合来说最难的一个实验,但好在实验有比较详细的教程和铺垫,并且是组队实验(ps:选个靠谱的队友!),大家认真合作一下还是能完成的不错的;实验四的写阅读报告其实我感觉也挺难的,这个比较考验查找 LLVM 文档的能力,源码中的有些变量挺迷的,最后也接近考试复习了,于是就口糊了一下(雾)。总之实验的质量还是很高的,如果要提建议的话,建议下次助教之间好好协商一下目录安排、实验内容这类比较影响全局体验的东西上,否则就有可能出现这一个助教觉得上一个助教的东西比较乱于是直接推翻重写了一套的情况(也不是不行,但是感觉不是很连贯,最终也没有把自己写的几个实验结合在一起变成一个真的编译器),不过影响其实不大。

作业:课程前一部分作业布置的不少(我感觉其实还好),有同学反映作业太多之后,老师的作业量立即变少(真的很考虑学生的感受),不过还是涵盖了重点。唯一觉得可能需要改进的一点是作业的批改和正确答案的公布可以再及时一些。

考试内容:期中开卷(但不可以带紫书答案),除了第一题需要将一个很复杂的 NFA 转成 DFA 是真的很麻烦(因为我这类题本身做的比较慢,所以写出来 NFA 之后直接跳了,有些没跳的同学后面的时间不太够了,所以需要自己权衡一下),其他的题都是很正的题,如果熟练的话基本不需要看带的资料;期末考试闭卷,今年没考数据流分析,考的都是重点和老师强调过的知识点,没有偏题怪题,建议听老师期末之前的复习课,课上老师会讲考试范围、重点,帮大家复习一下(PPT 当然也会上传),还考察了实验相关的内容,建议每次实验出分之后好好看一下自己出错的地方。

最后,这门课的体验是真的很好,这应该是大三上我所上的课中听课人数最多的一门课(雾),李老师是真的很负责,水平也很高,助教也很负责。

综上,给这门课点赞~

3 0
hejfnjeksmx 2020秋

给分很好!老师很敬业!助教也很敬业! 但如果让我重来一次,宁可去隔壁班被卡绩也不要再来这个班。

--------------------------分割线

我才发现自己被挂辽(

说一下不想再来这个班的原因。感觉这个课给我一种莫名的高级感。“你瞧,实验文档看不懂吧?/实验很难不会做吧?看不懂/不会做就对了,这才是高级”。

就先说实验文档,明明可以用很清楚,通俗易懂的方式讲出来的东西不懂为什么要搞的那么难,一度以为自己语文水平不好。助教难道不能将文档以一种初学者能够理解的方式去布置吗?我觉得编译的实验文档是我在科大读三年书遇到最晦涩的,我物理很差,但大雾的实验文档都没有这么夸张。这个实验文档我无法用语言描述。以后学弟学妹在上这门课的时候就能理解我现在在说什么。

再说实验,我不是来吐槽卷的。实验很难。难到从布置的第一天到交的前一分钟一直一直在焦虑在发愁。更何况一个实验没做完另一个就布置下来,焦虑感加倍。我的队友不是划水的,我们两个就是普通水平,踏踏实实做实验真的要了我们的老命了。我们也和大佬/中上水平同学一样,努力钻研文档,努力做实验,但时间就那么多,以我的能力真的不能那么好的完成。当时刚开始选课看评课社区说实验很难,不会做,还想,只要我好好学应该没有大问题。omg,真的有大问题!逃,赶紧逃。

我不反对说计院的实验就应该难,这门核心课就应该难的说法。但对不起,我就是菜,我不想太难。我来学编译只是了解基础的,不是要在上面钻研多深,还要学其他基础课。它本身和计组和操作系统一样的,但却成了我最头疼的课。本菜鸡当时觉得计算机组成原理难,但现在想想,相比这门课,那门课的不论是实验还是理论课真的恰到好处,难得地方也会让人有一种花时间就能搞懂的信心,但这门课对我来说,过于难了,学到后面就有点自暴自弃毫无兴趣。别骂了别骂了,已经努力了,孩子就是菜。

考试和作业都很正常。李老师有多好,上面的同学已经夸过了。每一届的助教可能不太一样,我不过多评价,没有意义。据说李老师开学会劝退,挺好的,希望学弟学妹认清自己,不要像我一样逞强。 

不欢迎喷。各有各的追求。我是废物,我追求快乐。

2 2
hejfnjeksmxps:众所周知,评课社区评价并不全面,建议要选李老师课的同学先问问自己是不是大佬(躺倒)。
silence墙内的人想出来,墙外的人想进去(

立即登录,说说你的看法

Hades 2020秋

老师讲得很好,但实验真的太难了(也可能是我太菜),上个学期有一段时间一回宿舍就是做编译实验,严重影响了其他课的学习。此前其他课的实验都是做完就给满分,编译实验做完(通过助教给出的部分测试集)只能得基础分,还要再由助教进行测试来决定最终得分,艰难做完的实验,最后测试挂了一半的感觉实在不好。 推荐对编译感兴趣,想确实学到知识的人选这门课。

2 0
kekeke 2019秋

李诚老师实在是太棒啦!幽默风趣,讲课一流!

但是这门课属实是这学期负担最重的一门课。实验是写一个cminus编译器和llvm代码阅读,总共有6次,难度不小,每一次实验都得花两三天来做。作业其实也不少,总共布置了13次。

最后,李诚老师其实给分很好啊,如果自己成绩不行的话,就扪心自问一下自己学得到底怎么样吧。

2 0
ldeng 2018秋

大学以来上得最舒服的一门课。

李诚老师很年轻,有激情、有理想、有抱负,同时又脚踏实地、认真负责,课上得也很棒。

编译原理应该是本科期间较难的一门课程,但是相比于张昱老师的编译(H)(也是口碑非常好的一门课),给非英才班准备的这门课程总体上难度一般,也只是涉及了编译原理最基础的部分,可以说不存在什么本质上的困难(也可能是李诚老师教得太好了)。

实验设计得很好,循序渐进很有成就感。实验过程中老师和助教也在和我们交流,根据反馈调整实验,不像某些课实验布置后助教就失踪。实验基础要求很简单,但有很多拓展选项,最后评分标准也很清晰,总之给人体验是非常好的。

最后给分也很好,实在是挑不出毛病的一门课。

2 0

照以往的习惯,上来应该是:“先说重点,给分很好。”

但显然,这门课的总评和平时付出的功力严格正相关。

课堂:

老师每次都会提前到教室准备 ppt 和 bb 在线课堂。讲课逻辑清晰、有节奏(很少犯困)。

ppt 做的很精致,最后复习的时候可以采用 PPT+ 紫书 套餐,真香。

作业:

一周一次,老师推荐使用 markdown 文档撰写作业内容,并强制要求提交在 gitlab 上。

作为妮可计科人,感觉工具链的学习和使用还是很有必要的,在此感谢诚哥督促我练习 git

实验:

作为本学期总评占比最大的部分,实验部分当然需要你付出一定(大量)的精力啦。

前三次实验都比较简单,仔细阅读助教写的实验文档,结合课上讲的理论知识,按照要求一步步来即可。

有的时候可能会看不懂实验文档要求我干什么,此时我就会去逛逛 issue 区找找灵感 + 再读几遍文档 + 和同学讨论一下,实在不行可以自己提 issue(在此感谢助教,有次我提了 issue,十分钟左右就得到了助教的有效回复,助教辛苦了!希望诚哥能给你们加鸡腿~)。

第四次和第五次实验是要求组队完成的。

在这里提醒大家,一两个靠谱的队友很重要!

不过如果队友比较划水的话,你可能会收获更多知识和能力(笑)

小小的建议:希望下次编译组队实验之前,老师能给一些 team work 的建议,给学妹学弟们节省一些进程间通信的开销 2333

最后实验五有额外的选做内容,做了的话加分会直接加在总评上(最多加两分),个人感觉这个加分设置的还可以,因为加的不多,可能也没有那么卷吧(我猜的

考试:

期中考试侧重前三章的算法练习,大家考试之前一定要多写点题目,别像我一样,考后诸葛亮。

期末同样侧重算法练习,另外考察了实验的内容,可怜孩子实验忘了看,过了一个寒假之后都忘得差不多了orz,大家千万不要学这个粗心的学姐啊啊啊啊

------------------------------------------------------------------------------------------------

最后的最后:

编译原理作为计算机系的专业课本来就是一门具有挑战性的学科,在学期内占用的时间多一些也是可以理解的,讲真我大三上学期感觉真的只学了编译和算法,其他科目都是考前速成的 orz

总评给的也是合情合理,真的和你平时的工作量有很大关系。不过如果单论最后成绩横向对比的话,你确实可以在隔壁班更轻松的获得同样的分数,但相对应的,对编译这门课了解的深度也随之减少啦~

所以,想要挑战自己 || 对编译感兴趣 || 想锻炼自己的动手能力 && 文档阅读能力 的同学可以来选!!!

---------------------表白助教!-------------你们值得我尊敬!-----------------

 

1 0
Misaki 2020秋

说实话这课考试部分我都是用HIT的网课速成的,大三上期确实有点放松了。

诚哥这门课我想说说实验部分,首先实验设计的都很棒,对于我这种水平非常具有挑战性,在这里感谢我的两位队友兢兢业业与我一起完成了所有实验,并且基本都得到了满分。实验会教你使用cpp,git,markdown,gdb等非常好的工具,就算以后接触不到编译原理,这些东西我想都会在计算机的学习道路上一直陪伴我。但是实验任务量远远大于zql老师班,不过助教还是非常尽心尽责,上次看到这么尽心的助教还是我的光原课和大一还在数学系的时候上的淑芬A1

总体来说真的很不错,给个9分吧!多一分怕骄傲啦

1 0
yusanshi 2019秋

课程体验很好,李老师人很 nice,十分推荐!

 

课程没有 QQ 群,课程讨论和实验、作业提交都是用自建的 GitLab 平台,大家有问题在上面提 issue,助教和老师很负责,回复的一般都很快。

实验部分改动较大,今年的任务是完成一个 C- 编译器(其他评论有详细说明)。在实验前期有过一些小风波,但是处理的很不错。

最后再补充一下李老师的个人魅力,除去教学、科研这种“本行”不说,老师还人品好、情商高,十分关心同学。就我自己来说,除了课程知识本身,还有很多课程外的收获。还享受过一次私人专车接送服务(我住东区,老师在西区讲完习题课问有没有同学要回东区,我就顺路搭车了 \笑哭)。

(可能唯一的遗憾就是,两场考试,由于自己比较浪考的都不算理想,有点愧对李老师 \囧)

1 0
水平价 2019秋

刚刚开始这门课的时候确实觉得可能有一点相性不合(后期也不太合),实验、作业相对另一个班负担重很多,也接触了很多完全没有接触过的东西。但李诚老师值得满分,不只是学术上的导师,人生的导师,生活中的朋友,“我们应该去做一些有挑战的事情”。

总之,如果选了这个班,开头会后悔,中期会后悔,但最后一定会感念遇到诚哥的(个人真实经历……)

如果你想问给分的话,给分是真的好!

1 1
吼猴我要选这门课了orz(我是数院的),希望学期结束时我不会后悔(不过已经做好了在这个过程中不断后悔的准备……

立即登录,说说你的看法

daiaqswde 2018秋

其实课程很难,实验也很难。但是说真的,给分不错。平时多去issue区发一些有价值的问题,是巨佬的话可以去回答问题,这可以使得你的总评有直接的提升(也许会有老师给予的无形提分)

 

1 0
Don 2018秋

实验太多,给分不好!!!

1 0
Indigo6 2018秋

怎么说呢,又被1楼说得差不多了,那我就补充几点吧:

1. 李诚老师上课的热情、专业能力、三观等等真的都超好,举个栗子——我认识的一个大佬因为上了这门课去了他的实验室;再举个粒子——老师有次课前几分钟说 :" 我常常在实验室看到,很多同学很晚还在赶报告,或者周末都在实验室。有时候我自己也会这样,但是我后来想明白了,我们首先得做人,该洗澡的时候洗澡,该打球的时候打球,不能因为事情就连最基本的人的需求都不好好处理了”。(记得不太清楚了,反正这么个意思)

2. 美中不足之一:有一些概念解释的时候,老师思路会不太顺畅,还是很难听懂,不过结合实验慢慢就能理解了。

3. 美中不足之二:实验某几个阶段负责的助教不是很认真吧?实验要求写得很简略,然后有些地方会设计错。我们小组写实验时的一大乐趣就是“口嗨喷助教”

1 0
Ursa_polaris 2018秋

第一次写评课决定给这门课。虽然大概这个班级的课程没有隔壁H班那么难,但是我觉得老师的讲课水平也是非常不错的。上课认真的同时不会跑题,下了课会看课程群并且回答群里的问题(这个我觉得能做到的老师大概不多),对待同学们的态度非常随和,但是又不会失去严谨性和严肃性。

实验的话,本学期实验是把一个PL0语言分析器拆成三部分写(PL0语言可以认为是Pascal的简化版),分别是词法分析器,语法分析器,语义分析器。实验是分组完成的,助教会教不熟悉linux的同学如何从零开始使用git。本人也是这学期刚刚学会使用git。感谢组长没有抛弃burden(

给分的话,在下作为科大底层人民,过了,表示很感激。

1 0
猫猫cat 2021秋

阿斯顿看了看AFHLKJHFWKEJFLWKEJFKSJDKDSJNVLSKDVJN

0 0
vevevev 2018秋

李诚老师上课nice大家都夸过了我就不多说了,这门课我收获最多的其实是实验部分。

实验是真的耗时间

本人没有项目经历,没有参加额外的比赛,这门课的实验算是第一次写这种大项目,前两三次的实验室体力活,到再往后的其实刚开始会一筹莫展,想通了会很好写,改bug就是痛并快乐着。学期结束觉得自己确实多会了不少东西。

最后总评3.7,可能是期末考炸了还不自知。(虽然可能考的不好,但是考的都很基础)哦对,没有写过优化的bonus,也没卷过issue,虽然没有感受到诚哥的给分像大家说的那么好,但是这门课真的体验很nice了,不说绝对,至少老师和助教要好过我上过的90%的课,还是十分推荐的。

 

0 0
HenCerbin 2020秋

lc老师人很好,上课体验极佳,内容很充实,强烈推荐喜欢靠听课学习的人选。

作业基本每星期都有吧,都是课上讲过的东西,都搞懂了期末基本无问题。

实验量挺大,难点主要在于搞懂到底要做什么,有什么可以用的。一般做着做着就会了。lab4主要难在测试和团队协作,导致某些极端情况没想到而出错。lab5就是卷王自由发挥的场所了,反正我是没做额外pass。

期末考试占比很少,简单的复习一下就可以了(由于种种原因所以只复习了一天)。理论部分都不难,实验部分因为有涉及到非自己做的部分可能略难,不过也能猜个7788。

总而言之这门课还是很值得选的。多亏了编译实验,让我写CV的时候没科研经历的时候就用这个拿来凑数。

 

0 0
guch8017 2020秋

本学期最喜欢的老师,上课讲的很清晰,教学方式也很喜欢,是理论+实验的方式。不同于其他课程,这门课实验要求较高,按开学时的说明占比也较大。实验为利用各种工具链,从词法分析、语法分析直到生成简单优化后的LLVM IR指令,交由llvm来生成最终的可执行程序,收获很大。

考试不会死扣概念(至少期中如此,甚至是开卷的,与隔壁死扣概念的计网形成鲜明对比),这点也比较喜欢。

疫情原因,这门课期末还没考,考完再来修改

0 0
petergu 2019秋

老师讲的很好,实验也很愉快,必须给10分啊!

关于lab,头一次写这种规模的程序,也头一次看项目源码,收获还是很大的。

实验有用git,配编辑器自动补全以及自己编译东西等等操作,看讨论似乎对初学者不太友好但算是折腾党福音?因为今年是改革比较多的不知道未来会不会有其他改革。

教训是要好好看说明/按时交作业,我第一个lab提交错了地方,后面又有一到两次作业忘了交,感觉影响了一些成绩。

0 0

李诚

教师主页: 戳这里

其他老师的「编译原理和技术」课

李卫海 7.0 (2) 2019春 2018春...
张昱 1.0 (1) 2021秋 2012春
郑启龙 5.3 (26) 2021秋 2020秋...
未知 2016秋
陈意云 2011春 2007春...
陈意云, 张昱 2010春 2009春...
李诚, 吴思 2021秋