跳转至

编译原理与技术

说明

本课程主页为 2025 秋季学期李诚老师班《编译原理与技术》课程主页,包含了理论课与实验课的相关信息。

勘误

Lab3 栈式分配,由于实验没有对齐需求,框架中栈上给每个 i1 分配空间的是 1 字节而非 4 字节,在作业与考试中也认为 i11 字节空间(实验代码无需更改)。


课程简介

本课程是计算机科学与技术专业的核心课,旨在深入探讨程序设计语言的设计和实现技术,涵盖与程序设计语言理论相关的知识,并培养学生将课程中学到的概念和技术应用于软件设计和开发的能力。内容包括编译器构建的基本原理,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。同时,本课程结合现代编译技术和趋势,使用 LLVM 和龙芯后端,基于自主设计的教学实验框架“建木”,设计现代化的编译器工具。

课程信息

上课时间与地点

时间:1~15 周,1(6,7) 和 3(3,4)
地点:高新校区 GT-B212

联系方式

教师

助教

其它

  • QQ 群:910418526

公告

  • 2025-09-08:课程平台介绍 已发布
  • 2025-09-14:Lab0 已发布,Deadline:2025 年 9 月 24 日
  • 2025-09-21:第一次作业已发布,Deadline:2025 年 9 月 28 日
  • 2025-09-24:Lab1 已发布,Deadline:Phase1 : 2025 年 10 月 1 日 / Phase2 : 2025 年 10 月 8 日
  • 2025-10-08:Lab2 已发布,Deadline:
    • Phase1 : 2025 年 10 月 22 日
    • Phase2 : 2025 年 10 月 31 日
    • Phase3 : 2025 年 11 月 7 日
  • 2025-10-17:第二次作业已发布,Deadline:2025 年 10 月 29 日
  • 2025-11-12:第三次作业已发布,Deadline:2025 年 11 月 23 日
  • 2025-11-12:Lab3 已发布,Deadline:
    • Phase1 : 2025 年 11 月 23 日
    • Phase2 : 2025 年 11 月 30 日
  • 2025-11-27:Lab2 助教代码 已发布:
    • 包含 Lab1, 2 的助教实现和 Lab3 Phase2 框架,可以在上面实现 Lab3 Phase2
    • 具有比旧版本更方便调试的底层框架,具体更改见助教代码介绍,Lab4 将仅提供该版本代码
  • 2025-12-4:Lab4 已发布,Deadline:
    • Phase1 : 2025 年 12 月 14 日
    • Phase2 : 2025 年 12 月 21 日

教学课件

日期 标题 课件
2025-09-08 编译原理和技术导论 Lecture1_Intro
2025-09-10 词法分析 Lexical-analysis, Triton_Intro
2025-09-15 语法分析 - 上下文无关文法 Parser-part1
2025-09-17 语法分析 - 自顶向下 - 递归下降 Parser-part2
2025-09-22 语法分析 - 自顶向下 - LL(1) 文法 & 语法分析 - 自底向上 - 移进规约 & LR 分析器的简单模型 Parser-part3, Parser-part4, Parser-part5
2025-09-24 语法分析 - 简单的 LR 方法 Parser-part6
2025-09-29 语法分析 - 简单的 LR 方法 & 规范的 LR 方法 Parser-part6, Parser-part7
2025-09-29 中间代码表示 & 语法制导翻译 - 语法制导定义 & S/L 属性的定义 IR, Translation-part1
2025-10-13 语法制导翻译 - 语法制导翻译方案 & L 属性定义的翻译方案 Translation-part2, Translation-part3
2025-10-15 语法制导翻译 - L 属性定义的翻译方案 & 中间代码翻译 - 简单语句 Translation-part4, IR-Translation-part1
2025-10-20 中间代码生成 - 控制流与布尔表达式 & 标号回填与布尔表达式 IR-Translation-part2, IR-Translation-part3
2025-10-22 中间代码翻译 - 标号回填与控制流语句 & 类型表达式及自动构造 IR-Translation-part4, IR-Translation-part5
2025-10-27 中间代码生成 - 符号表与声明语句 IR-Translation-part6
2025-10-29 中间代码翻译 - 数组寻址 & 运行时管理 - 存储组织 IR-Translation-part7, Runtime-part1
2025-11-03 运行时管理 - 栈式分配 & 非局部名字 Runtime-part2, Runtime-part3
2025-11-05 代码生成 - 简单机器模型 & 机器无关代码优化 - 常见优化方法 CodeGen-part1, IR Opt-part1
2025-11-10 机器无关代码优化 - 数据流与到达定值分析 IR Opt-part2
2025-11-12 机器无关代码优化 - 可用表达式分析 & 活跃变量分析 & 基本块内优化 IR Opt-part3, IR Opt-part4, IR Opt-part5
2025-11-17 流图中的循环 & 寄存器分配 Loop, Register
2024-11-19 一段代码的神奇之旅 一段代码的神奇之旅
2025-11-24 龙芯架构介绍 & 龙芯汇编介绍 LA-part1
2025-11-26 栈式分配介绍 LA-part2

参考资料

教材和参考书

  • [1] 陈意云、张昱,编译原理(第 3 版),高等教育出版社,2014
  • [2] 李诚、徐伟,现代编译器设计与实现(实验讲义版本,高等教育出版社待出版,2024)。教材资源及实验框架
  • A. V. Aho, M. S. Lam, R. Sethi, and J. D. Ullman 著,赵建华等译,编译原理,机械工业出版社,2017

其他资料

如何使用本文档?

关于提示框

为了便于标识,我们在文档中提供了若干提示框。它们有着不同的形式与作用。例如:

一般的提示框长这样

里面是这样的文字。

有的提示框默认是折叠的,需要点击才能展开

然后看到里面的内容。

有的提示框则是默认展开的

如果觉得碍事可以点击折叠。

大家可以在后续的文档中接触到它们。

关于搜索

你可以在右上角搜索框中输入想要查询的关键词,文档会给出对应的查询结果与跳转链接。

Tips

如果在阅读文档时发现有自己不清楚的知识点,可以先用搜索框查询其是否在先前的文档中出现过。