选课类别:专业任务 | 教学语言:英文 |
课程类别:专业选修课 | 开课单位:计算机科学与工程系 |
课程层次:本科 | 获得学分:3.0 |
省流:计系毋庸置疑的好课!
课程大纲一目了然逻辑清晰,上一学期下来感觉结构很通透(虽然一学期肯定是不足以学透编译原理的),完整讲述了编译器的各个部分是如何将高级语言源码编译成机器码的过程,是听着很舒服的全英文,课程节奏也不算很快,课程内容的设置感觉比计组/OS会少一些,属于是刚好可以完整消化的程度,本人认为容量、难度、节奏设置最合理的计系课之一(还是加个之一比较客观),教材是龙书,具体内容可以看文末的第一节introduction课件了解。
理论和实验课的讲授都是刘老师负责,都讲得很清楚,再吹可能有人要觉得我是水军了所以点到为止。
应该是4次,不过这学期假期有点巧所以就3次,难度适中,题量不大,不过画自动机和推parsing table之类的不可避免地会花时间,没什么问题。
一个project是SPL(SUSTech-Programming-Language) Compiler,分四个阶段分布在整个学期,从前端(指lexer, semantic analyzer, intermediate code generator, optimizer)写到后端(MIPS32 code generator),前三个phase满分100,最后一个60即满分,多出来的可以补前面的,详情请读文末的lab课件和project。
Project还包含一次占比5%的research/survey,本学期主题是调查一个开源编译器,角度很多样。
无论是SPLC还是survey,做的好就有一次pre的机会,pre之后有+1总评的bonus,还是挺好的。
期末有个35%的考试,允许携带一张A4 Cheating sheet,鼓励手写,不允许多人使用同一份打印档,难度而言感觉并不超纲,考察内容和课程内容完全一致,虽然我计系的纸质考试就没有考好过,但这一门是为数不多让我真心觉得试卷无论是内容还是难度还是题量都很正常,是我自己没考好的计系课(也没有吐槽其他课不好的意思。均分63.6,最高91,感觉这一学期确实没有考试战神出现。
总之,好课,上!
IskXCr出品的能够接上LLVM后端优雅且强大的C++ SPLC
咕桃的CS323课程资料仓库(含理论实验课件、平时作业、期末cheating sheet[实测有用])
*感觉全放这里有点占空间,直接去GitHub就能翻到很多优质作品了!
温馨提示:刘老师明确表示cheating paper不可共享,并且计系有完善的学术诚信体系,以上cheating sheet/project/作业仅供参考,创作者不对错误使用上述材料造成的后果负任何责任。
计系精品好课,CS三大浪漫之一不学CS生涯不完整.jpg
刘老师鼓励式教育给分超好,而且讲得很通透,结构完整,节奏也很舒服,足够大部分同学消化。
课本是龙书,主要包括编译器的基本理论(能跑就行),英文授课(无论有没有国际生)
编译优化的内容很少,可能是刘老师有意控制难度 但其实也挺好的可以摆一点
作业这学期是四次,只涉及lexical 和 syntax 的内容,基本上都是龙书的题,写起来可能比较麻烦但不难。
lab都是中文,教用flex写lexer,bison写parser,也会给一些starters code(类似project的demo)。practice大概有8-9次,都是用flex/bison写一个简单的练习题。
中期左右(11月)有一个pre,展示在compiler/programming language做的调研探究,全自由发挥,然后交一个小报告。
Project 当然是做一个compiler,但今年刘老师大改project
本人被队友带飞的Rust写的全程开源的魔改版SPL Compiler
可爱Ice和他的大爹们写的酷炫函数式语言(什么你不知道函数式?)
你的Project
据说24级开始这门课必修了,鄙人认为是个好事,这种课就该上。
计算机经典课程,很有挑战也能得到很多收获。
作业包括理论作业、lab小练习和project。在project中最终可以利用 flex、yacc 等工具实现一个完整的能用的编译器(虽然最终是在 mips 模拟器上跑的)
刘老师的英语口语十分标准,听课不会有口音上的障碍。少部分复杂的概念如果我们听不懂也会用中文解释。
去年的课程材料仓库:https://github.com/sqlab-sustech/CS323-2022F
非常认可其他几位的评论!也就不再赘述刘烨庞老师和这门课程的优点啦!
今年我们课程其实调整了不少内容,以往Project是贯穿学期的,一共四个Phase,但是今年其实是从中后期才开始的Project,Basic只有三个Phase,最后一个Phase是选作。前面的时间会要求准备一个Presentation,是要对跟编译器相关的内容做一个调研,每个组15min的样子,最后会根据Pre的表现和提交报告的内容评分。后面如果Project做得好,也会有一个Presentation让你在实验课分享你们的项目内容(大佬好多QAQ),这个Presentation说是可以添加Bonus,但是仅限Project内部,没有办法溢出到其他部分。
今年也跟刘烨庞老师聊了聊,感觉之后刘老师仍然会继续对这门课进行一个改造,所以明年课程内容和考核内容跟今年也会不一样,可能会增加实验课里面的内容,教同学们除了使用Flex/Yacc/Bison这些C之外的工具比如Antlr/Rust等等,让我们敬请期待一下。希望之后的同学也能享受这门课程,多跟刘老师和队友沟通,真的能学到很多东西 : )
学计算机不学编译原理,就像写代码只会调API,说明这个人计算机基础和技术深度不足,他理解不了程序背后的机制和计算机科学的精妙逻辑,只能看到代码的表面堆砌,参不透系统设计的核心本质。他整个人的技术层次就卡在这里了,只能度过一个相对失败的人生。
计算机系精品好课,前面的评论已经说的很多了,这边就不多说了。
虽然感觉刘老师讲得很好,但是感觉还是很难。尤其是project对于没学过C的真的很折磨,好在最后4个phase还是赶完了。
另外刘老师对分数挺严格的,总评差0.03上B+但是还是不允许round上去…
计算机三大浪漫之一,不必多言。
刘老师讲课很细致,理论作业有四次,不过只覆盖编译器前端的lexer和parser部分。
project当然就是搓编译器了,可以写课程提供的SPL语言的编译器,也可以自己拓展兼容SPL的语言,或者自造语言。phase1是基本的lexer和parser分析部分,只做milestone检查,不评分。phase2是semantic analysis,和phase1一起检查评分,lab课当场给测试样例跑。phase3就是生成中间代码了,这学期是指定生成TAC的中间代码,答辩的时候需要在TAC的IR模拟器上跑测试样例。phase4选做,生成最终的汇编,MIPS32或者RISC-V等。
刘老师会控制课程难度,主要难点还是编译器前端,对后端部分的要求和考察不会很难。
期末占比30%,最高分90。最后一题SLR parsing还是有点太折磨了(画LR(0)状态画了整张纸),不过好在只有10分,而且最后的parsing过程只有2分(累死累活为了2分,对),可以看出是刻意控制分值了,而且只要写的差不多应该也是酌情给分的。如果前面作业和project都做的还不错的话,期末考低点总评也影响不大(我期末85,总评94)。
24级是必修了,好事,不知道课程结构在必修之后会不会变呢哈哈哈。