MP1 COOL编译器前端的构建

本实验通过多个循序渐进的子实验,最终为Cool语言构造编译器前端(front end),它能分析输入的Cool程序并产生对应的抽象语法树(AST)。

MP1.1 Preparation

1. 环境准备

在开始做实验之前,请检查你的实验环境是否具备以下工具:

  • g++/clang++
  • make
  • git
  • flex
  • bison

之后你需要clone你的git版本库到本地,你的实验将在这个版本库中进行。方法:

git clone [email protected]:PBXXXXXXXX

另外你需要另外git clone [email protected]:comppub,并定期pull。实验的材料、示例将放在这里。

对git不熟悉的同学,可以去看ProGit或者其他材料。

MP1.x的工作都在MP1/目录下进行。请复制comppub/2016f/mp1/目录到你自己的版本库。目录下已经有一些材料,分别是:

cool-support/: 支持库,提供后续会使用的数据结构、AST定义等。请不要修改这部分内容
reference-binaries/: 参考程序,你可以用它们来辅助测试你的代码
src/: 你要完成的部分都将放在这里

另外,要求在MP1下新建一个文本文件answers.txt,实验要求中有时会向你提一些问题,请在该文件中简要回答。

注意:请保持版本库整洁,除了源代码以外,不要将多余的文件包含在版本库中。进行git commit之前,请检查是否错误地将二进制、临时文件、测试输出等包含在内(使用git status)。最好在git add之前执行一次make realclean. 修改.gitignore文件也是一个好办法。

2. 熟悉COOL语言

1) 阅读Cool语言的文档:CoolAid: The Cool Reference Manual. 你暂时不需要熟悉Cool语言的每个细节,但是要大致了解cool语言有哪些特性,比较它和你学过的语言之间有哪些异同。

2) 下载cool-examples.tar.gz,理解其中的示例。

3) 自己编写几个Cool程序,并使用reference-binaries/下的工具对其进行处理,确保你对Cool语言有一个初步的理解。

Cool 语言是 Stanford 的 Alex Aiken 为编译课程设计的一个语言, 这里有一些相关的资料.

3. 支持库概览

在开始编码之前,你需要了解你有哪些库可以使用。不要重复造轮子。

1) 阅读A Tour of the Cool Support Code的1-3节,理解list和string table。

2) 阅读两个数据结构的对应代码。对C++还不熟悉的同学,希望能在下个实验开始之前,至少能够理解这些代码的含义,并能正确使用它们。

3) 在answers.txt中回答:(1) 这个list和C++ STL的list有哪些不同?(2) String table的意义是什么?

4. 提交要求

将你修改/增加的文件(这次只有answers.txt)通过git addgit commit加入到版本库跟踪中,并在截止日期之前执行git push

注意:由于commit操作是在本地的,只有push操作才会上传,今后请在完成一个阶段性工作后就进行commit,并在commit记录中简要描述你此次更新所做的工作。一个没有说明的大commit不论在可读性还是在可信度上,都会大打折扣。

提交的目录要求:

PBXXXXXXXX                     : git 根目录
└── mp1/
    ├── answer.txt             : 你的答案
    ├── cool-support/          : 复制的文件, 无需修改
    ├── referencen-binaries/   : 复制的文件, 无需修改
    └── src/                   : 复制的文件, 无需修改

results matching ""

    No results matching ""