基本语言(Kaleidoscope)

本教程介绍了一门玩具语言,名叫Kaleidoscope

Kaleidoscope是一个过程式语言,用户可以定义函数、使用条件语句、执行数学运算等等。随着教程的深入,我们将逐步扩展Kaleidoscope,为它增加if/then/else结构、for循环、用户自定义运算符,以及带有简单命令行界面的JIT编译器等等。

简单起见,Kaleidoscope只支持一种数据类型,即64位浮点数(也就是C中的double)。这样一来,所有的值都是双精度浮点数,类型申明也省了,语言的语法简洁明快。以下是一个用于计算斐波那契数的简单示例:

# Compute the x'th fibonacci number.
def fib(x)
  if x < 3 then
    1
  else
    fib(x-1)+fib(x-2)

# This expression will compute the 40th number.
fib(40)

Kaleidoscope还能调用标准库函数(有了LLVM JIT,实现这一点简单至极)。不过,在调用函数之前需要先用extern关键字对函数进行申明(碰到相互递归调用的函数时也需要这么做)。
例如:

extern sin(arg);
extern cos(arg);
extern atan2(arg1 arg2);

atan2(sin(.4), cos(42))

接下来,让我们来细细品味一下这门语言的实现过程吧!