编译原理

(刘烨庞)CS3232024秋 2023秋 2022秋 2021秋 2020秋 2019秋  
2024秋 2023秋 2022秋 2021秋 2020秋 2019秋
9.8(4人评价)
  • 课程难度
    中等
  • 作业多少
    中等
  • 给分好坏
    一般
  • 收获大小
    很多
选课类别:专业任务 教学语言:英文
课程类别:专业选修课 开课单位:计算机科学与工程系
课程层次:未知 获得学分:3.0
课程主页:暂无(如果你知道,请点右上角“编辑课程信息”添加!)
课程简介(教工部数据)
本课程介绍计算机编程语言的基本原理与编译器设计的理论基础。课程将会介绍编译器的各个组成部分,内容主要包括词法分析、语法分析、语义分析、中间代码生成、运行时刻环境、代码生成以及机器无关优化等。本课程还将通过实验使学生了解如何设计并且实现一个简单语言的编译器。 


This course introduces the basic principles of programming languages and theories of compiler construction. It aims to help students understand the architecture of a modern compiler and will cover topics including lexical analysis, syntax analysis, semantic analysis, intermediate-code generation, run-time environments, code generation and machine-independent optimizations. We will design experiments to provide students hands-on experience of constructing a compiler for a simple language.
点评写点评
排序学期
评分评分4条点评
user avatar   咕桃     2023秋
  • 难度:中等
  • 作业:中等
  • 给分:一般
  • 收获:很多

省流:计系毋庸置疑的好课!

课程

课程大纲一目了然逻辑清晰,上一学期下来感觉结构很通透(虽然一学期肯定是不足以学透编译原理的),完整讲述了编译器的各个部分是如何将高级语言源码编译成机器码的过程,是听着很舒服的全英文,课程节奏也不算很快,课程内容的设置感觉比计组/OS会少一些,属于是刚好可以完整消化的程度,本人认为容量、难度、节奏设置最合理的计系课之一(还是加个之一比较客观),教材是龙书,具体内容可以看文末的第一节introduction课件了解。

理论和实验课的讲授都是刘老师负责,都讲得很清楚,再吹可能有人要觉得我是水军了所以点到为止。

作业

应该是4次,不过这学期假期有点巧所以就3次,难度适中,题量不大,不过画自动机和推parsing table之类的不可避免地会花时间,没什么问题。

Project

一个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

给Monad神将会开源的基于Rust的SPLC放个占位符

GAS开发协会出品的得分399/360的纯C课程项目

咕桃的CS323课程资料仓库(含理论实验课件、平时作业、期末cheating sheet[实测有用])

*感觉全放这里有点占空间,直接去GitHub就能翻到很多优质作品了!

温馨提示:刘老师明确表示cheating paper不可共享,并且计系有完善的学术诚信体系,以上cheating sheet/project/作业仅供参考,创作者不对错误使用上述材料造成的后果负任何责任。

user avatar   xss     2020秋
  • 难度:困难
  • 作业:中等
  • 给分:超好
  • 收获:很多

计算机经典课程,很有挑战也能得到很多收获。

作业包括理论作业、lab小练习和project。在project中最终可以利用 flex、yacc 等工具实现一个完整的能用的编译器(虽然最终是在 mips 模拟器上跑的)

刘老师的英语口语十分标准,听课不会有口音上的障碍。少部分复杂的概念如果我们听不懂也会用中文解释。

去年的课程材料仓库:https://github.com/sqlab-sustech/CS323-2022F

user avatar   Zagreus_Hadeson     2024秋
  • 难度:中等
  • 作业:中等
  • 给分:超好
  • 收获:很多

计系精品好课,CS三大浪漫之一不学CS生涯不完整.jpg

刘老师鼓励式教育给分超好,而且讲得很通透,结构完整,节奏也很舒服,足够大部分同学消化。

理论

课本是龙书,主要包括编译器的基本理论(能跑就行),英文授课(无论有没有国际生)

  • Lexical Analysis 占 ~30 %,介绍正则表达式,DFA/NFA以及它们之间的转换
  • Syntax Analysis 占 ~30 %,介绍CFG(BNF/EBNF),递归向下/LL(1)/LR(1)/LALR(1)的parser原理
  • Semantic Analysis 占 ~20%,基本没啥特别的分析就完事了 讲一些SDD/SDT(其实就是parser加一些建语法树和语法树节点的处理的内容),Scope/Type Check 之类的细节
  • IR/Codegen 占 ~15%,介绍三地址码(TAC),triple/quadruple,以及runtime environment一些计组的知识
  • 剩下的5%是拓展内容(?),讲一些Data-Flow Analysis的理论

编译优化的内容很少,可能是刘老师有意控制难度 但其实也挺好的可以摆一点

作业这学期是四次,只涉及lexical 和 syntax 的内容,基本上都是龙书的题,写起来可能比较麻烦但不难。

Lab & Project

lab都是中文,教用flex写lexer,bison写parser,也会给一些starters code(类似project的demo)。practice大概有8-9次,都是用flex/bison写一个简单的练习题。

中期左右(11月)有一个pre,展示在compiler/programming language做的调研探究,全自由发挥,然后交一个小报告。

Project 当然是做一个compiler,但今年刘老师大改project

  • 语言不限制SPL(但其实今年没几个组自定义语言)
  • 测试样例会全部给,但变为lab课上检查而不是直接交bb让助教测
  • milestone检查只有phase1 lexer 和 parser(不记分),phase2 semantic(记分),phase3 IR & 4 codegen (记分),4是bonus但建议做
  • phase3 不限制 TAC,可以生成任意一种IR但要自己提供测试方法,建议写LLVM IR但别说你是怎么写的懂得都懂

广告位

本人被队友带飞的Rust写的全程开源的魔改版SPL Compiler

可爱Ice和他的大爹们写的酷炫函数式语言(什么你不知道函数式?)

薛神写的类rust的compiler但是我没链接

你的Project

结尾

据说24级开始这门课必修了,鄙人认为是个好事,这种课就该上。

user avatar   Randomizer32w     2023秋
  • 难度:中等
  • 作业:中等
  • 给分:一般
  • 收获:很多

授课和考察的内容主要集中在前面的Parser构建上,对后端处理和优化方面还是讲的/考察的/在Project中体现的比较少。


teacher avatar

刘烨庞

计算机科学与工程系

教师主页

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

    刘烨庞老师的其他课