Assignments
对网络提交(包括Git仓库和发送至助教)的作业,截止时间统一为所述日期22时整。
对纸质提交的作业,截止时间统一为所述日期课前。
作业情况将公布在 USTC Compiler H 2017 Fall Assignment Result Publish 上,内容持续更新。
| Date | Homework | Project | HW Due | Proj Due |
|---|---|---|---|---|
| 12.7,Tue | H13-2 | CSA | 12.12, Tue | CSA 12.17 |
| 12.5,Tue | H13-1 | 12.12, Tue | ||
| 11.30,Thu | H12 | 12.7, Tue | ||
| 11.21,Tue | H11 | 11.28, Tue | Lab2 11.26 | |
| 11.16,Thu | H10-2 | 11.21, Tue | ||
| 11.14,Tue | H10-1 | 11.21, Tue | ||
| 11.7,Tue | Lab2 | Lab2预热实验, 11.12 | ||
| 11.2,Thu | H9 | 11.7, Tue | ||
| 10.26,Thu | H8 | 10.31, Tue | ||
| 10.19,Thu | H7-2 | 10.24, Tue | ||
| 10.17, Tue | H7-1 | Lab1-3 | 10.24, Tue | Lab1-3,10.25 |
| 10.12, Thu | H6-2 | 10.17, Tue | ||
| 10.10, Tue | H6-1 | 10.17, Tue | Team Work 上报团队的选题和队长身份,10.12 | |
| 9.28, Thu | H5-2 | 10.10, Tue | ||
| 9.26, Tue | H5-1 | Lab1-2 | 10.10, Tue | Lab1-2, 10.8 |
| 9.21, Thu | H4-2 | 9.26, Tue | ||
| 9.19, Tue | H4-1 | 9.26, Tue | ||
| 9.14, Thu | H3-2 | Lab1-1 | 9.19, Tue | Lab1-1, 9.20 |
| 9.12, Tue | H3-1 | Environment | 9.19, Tue | - |
| 9.7, Thu | H2 | None | 9.12, Tue | - |
| 9.5, Tue | H1 | None | 9.12, Tue | - |
| 9.5, Tue | H0 | None | 9.10, Sun | - |
习题课课件
Homework
H0
使用ssh-keygen生成公私钥,并将公钥发送至助教曹焕琦(通过QQ或邮件)。命名应为名的全拼-姓的全拼.pub,请按照自己的姓名修改文件名。
H1
本次作业请在git仓库中Homework/H1中添加文件answer.md来回答问题。
- 安装一个具备完善GNU工具链的环境,如任意Linux发行版/Windows Subsystem for Linux/MacOS(至少你要一个brew);
- 在你安装的环境下,练习使用GCC/Clang,结合使用-E(预处理器,结果大致阅读了解即可,不需要在作业中贴出解释)、-S和-m32/64参数,观察程序编译后输出的代码,在
answer.md中列出你的源代码、不同编译选项下输出的汇编码,并对汇编码加注释。
请注意,.md是现在最常用的简单样式说明用途的文本格式之一Markdown的后缀名,你们应大致了解Markdown的排版方式,以合理的形式展现代码。关于Markdown的使用可以参考GitHub Guide: Mastering Markdown,你也可以自行查找一些资料来了解这一Markup Language的使用方式。
H2
根据课件第29页的NFA,手工编写能识别输入串中多个满足NFA的记号的词法分析程序,写出aaab的识别过程。这一作业在Git仓库中提交,目录为Homework/H2。请在其中添加README.md用以说明你的代码结构和使用方式(包括Building和Usage)。
H3-1
Book 2.3(d), 2.4(c)(e), 2.7(d) (注: 手工构造NFA和DFA, 用算法将NFA变换成DFA,再构造最简的DFA)
H3-2
Book 3.2
H4-1
Book 3.4, 3.12
H4-2
Book 3.8, 3.11
H5-1
Book 3.16(a)(b)
H5-2
Book 3.20, 3.27
H6-1
Book 3.22, 3.24, 3.30
H6-2
Book 3.34, 3.37
H7-1
Book 4.12(b) 并写出相应的语法制导定义、预测翻译器
H7-2
Book 4.12(b) 写出自下而上分析的栈操作代码
H8
Book 5.5, 5.12, 5.13
H9
Book 5.16(a)与(b)、(b)与(c), 5.17, 5.21
H10-1
Book 7.10, 7.13, 6.6
H10-2
Book 6.18, 自己出2个题目并给出解答(需要用简短的程序体现你的题目,需要指出题目考核的知识点,2个题目在知识点上要有区分度)
提交说明:
本次作业提交到git库的 Homework/H10 目录下,该目录下至少包含以下内容
answer.md存放题目与解答(需要在其中说明你所使用的机器配置、操作系统及版本、编译器及版本、使用的编译选项,test目录下的内容说明,以及对于各个题目及解答)
test/存放关联的 C 源程序、汇编程序、用于快速编译和产生汇编/可执行程序的脚本等等
H11
6.26 6.27 6.29
H12
9.1 8.5 (注:要求在你的机器上分别用gcc和clang对两种情况进行编译和测试,给出四种情况下的结果并结合汇编码进行分析说明;如果有编译警告,也请说明为什么编译器会产生这种警告)
补充: 一个C语言程序如下
int main() {
long i;
i = 0;
printf("%ld\n", ++i+(++i)+(++i));
i = 0;
printf("%ld\n", ++i+((++i)+(++i)));
}
要求在你的机器上分别用gcc和clang对它进行编译和测试,说明运行结果并结合汇编码进行分析。如果将上述程序中的long i;移到函数main前,会怎么样呢?
H13-1
9.3 9.15 9.22
H13-2
11.5 11.16