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 add
、git commit
加入到版本库跟踪中,并在截止日期之前执行git push
。
注意:由于commit操作是在本地的,只有push操作才会上传,今后请在完成一个阶段性工作后就进行commit,并在commit记录中简要描述你此次更新所做的工作。一个没有说明的大commit不论在可读性还是在可信度上,都会大打折扣。
提交的目录要求:
PBXXXXXXXX : git 根目录
└── mp1/
├── answer.txt : 你的答案
├── cool-support/ : 复制的文件, 无需修改
├── referencen-binaries/ : 复制的文件, 无需修改
└── src/ : 复制的文件, 无需修改