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 -

习题课课件

  1. 第一次习题课课件

Homework

H0

使用ssh-keygen生成公私钥,并将公钥发送至助教曹焕琦(通过QQ或邮件)。命名应为名的全拼-姓的全拼.pub,请按照自己的姓名修改文件名。

H1

本次作业请在git仓库中Homework/H1中添加文件answer.md来回答问题。

  1. 安装一个具备完善GNU工具链的环境,如任意Linux发行版/Windows Subsystem for Linux/MacOS(至少你要一个brew);
  2. 在你安装的环境下,练习使用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

results matching ""

    No results matching ""