1,安装、运行
根据课程的说明,我们首先下载Oracle VirtualBox(https://www.virtualbox.org/wiki/Downloads)。然后下载课程特地准备的linux环境的镜像文件(https://www.virtualbox.org/wiki/Downloads)。此linux环境包含了compiler课程的各个部分。
运行VirtualBox,新建,选择linux ubuntu,打开镜像文件Compilers.vdi。设置好后,启动虚拟机。
默认进入界面版本,有点类似windows。这里示范用命令行的操作。
打开命令行终端,输入: (引号内)“cd cool/examples/“回车。此目录下全是Cool文件(后缀为cl),我们运行一个最简单的。输入:“coolc hello_world.cl"回车。此时生成MIPS处理器的汇编文件hello_world.s,需要用spim来模拟运行汇编(以后到代码生成阶段会详细讲解)。输入:”spim hello_word.s“回车。运行结果如下:
其中Hello, World.就是运行结果。同理,example/文件夹下的所有cl文件都可以成功执行。
2,简单实践
2.1 简单加法
目的:建立两个变量,并输出。
建立局部变量用let表达式,输出用out_int函数。因为输出函数是IO类里的,所以Main必须继承或者建立一个IO类。
代码如下:
class Main inherits IO {
main() : SELF_TYPE {
{
let x:Int <- 1, y:Int in
{
y <- 2;
out_int(x+y);
};
out_string("\n");
}
};
};
let建立了x、y两个局部变量,只在let内有效。x初始值为1,设置y值为2,输出x+y的值。{}内可以有多个表达式,用分号";"隔开。
2.2 简单函数
目的:写函数并调用
注意函数的格式和返回值。代码如下:
class Main inherits IO {
main() : SELF_TYPE {
{
out_string("The factorial of 4 is ");
out_int(func(4));
out_string("\n");
}
};
func(n:Int) : Int {
{
let sum:Int <- 1 in
{
while 0 < n loop
{
sum <- sum * n;
n <- n - 1;
}
pool;
sum;
};
}
};
};
func函数返回参数n的阶乘。用while循环不断的累乘,func的返回值是最后一个语句let的返回值,let的返回值是let内部的最后一个语句,所以sum就是返回值。关于表达式的返回值,在以后句法一章的时候会讲到。