Lisp Value

C 语言有很多种错误处理方式,但针对当前的项目,我更加倾向于使错误也成为表达式求值的结果。也就是说,在 Lispy 中,表达式求值的结果要么是数字,要么便是错误。举例说,表达式 + 1 2 求值会得到数字 3,而表达式 / 10 0 求值则会得到一个错误。

为了达到这个目的,我们需要能表示这两种结果的数据结构。简单起见,我们使用结构体来表示,并使用 type 字段来告诉我们当前哪个字段是有意义的。

结构体名为 lval,取义 Lisp Value,定义如下:

  1. /* Declare New lval Struct */
  2. typedef struct {
  3. int type;
  4. long num;
  5. int err;
  6. } lval;