很讨厌黄老师的一句话:“就是花点时间就可以做好的工作”。此言不实,重修需要时不时和老师邮件汇报、获取反馈,持续一个多月。此过程中,我深感和他在教学理念上存在极大冲突,对课程的质量和体验十分失望,为必修这门课的师弟师妹们默默心酸。

本文写作的目的是帮助受害者们去伪存真,获取到编译原理理论课和项目课的有效载荷。课程,至少在 2023 年的版本,只涉及到传统编译器(不提及 LLVM),只涉及到前端,且是连前端的一半内容都不到。单从知识点的角度,是简单且蜻蜓点水的,但从实验项目的角度,是灾难的。因为在要求写一个极简的 Flex + YACC 的同时,没有对二者作出任何介绍。更令人厌恶的,是乱七八糟的捉摸不定的文档、视频和汇报要求,不愿给学生提供真正的便利。课程本应能够传授知识和经验,而非在形式上空耗精力。

假设课程要求焰火,不肯告知有打火机,不愿意给根火柴,而是扔来一块木头。钻出火星后,还要求在木头上雕个花,才允许上交过去。为了顺利毕业,却是千真万确地、情真意切地,得感谢他。下列分享的是经处理后的代码和文档。教学评估要保证去重,可我不忍心等到 3、5 年后,若取之,请有道。

  1. 代码不完整。删去了图形界面和自定义 MiniC 语言的部分;可使用 go test 命令运行
  2. 代码不符新要求。24 年任务书里的 Tiny 语言不完全等于教材;文法分析改用 SLR(1) 而非 LL(1)
  3. 文档是给人类阅读的版本。不按模板要求写,曾被邮件批评
  4. 需自行补充。如做 PPT、录视频、把文件夹改成中文名

https://gitee.com/pylog/scnu-compiler-construction-2023

这个课理解为 Introduction to homework format and some outdated parsing technique 可能会更加轻松一些,至于真正编译器相关的知识就别想着学到啥了,或者说在 SCNU 就别想着学到啥了。

    July 26 2024 Update: 我目前实习所在公司做的就是编译器(或者说做编程语言),感觉真正精华会是 Type theory (inference/checking etc.),language overall design,standard library API design,runtime perf (if any), toolchain (user experience/ debugger/ formatter/ build system/ pkg managment), testing, IR design,这些方面。就 SCNU 教的那些东西真的是最没技术含量那些,间接导致我做的东西也是没技术含量的那些。。。

    或者说,更通用的,学点PL吧

      2 个月 后

      这个课非常简单,但是也非常麻烦。因为技术以外的要求过多,同时老师在文档上是想通过更多地解释去让大家清楚要求,但我觉得是越讲越麻烦混乱。

      建议大家还是去报编译实现赛代替项目吧,比赛要求清晰也没歧义。生成到汇编代码就好了。

      © 2018-2025 0xFFFF