从两个表达式开始:整数和加法
本节阅读量:写解释器和编译器之前,先说清楚一件事:
|
|
第一章的程序很小,就是一个表达式。
表达式可以先理解成:
|
|
第一章只认两种表达式:
|
|
整数
整数是最小的表达式:
|
|
它的结果就是它自己。
|
|
这里的 -7 是一个整数,不是减法。第一章还没有减法表达式。
加法
加法写成 Lisp 风格:
|
|
它表示:
|
|
这段程序由五个小块组成:
|
|
注意,左右两边不是“必须是整数”,而是“必须是表达式”。所以加法里面还可以继续放加法:
|
|
可以先这样看:
|
|
这就是本章语言里唯一的递归结构:表达式里面还能继续出现表达式。
写成规则
把上面的说法压缩成规则,就是:
|
|
第一次看到这种写法,不用把它当成新数学。它只是更短的人话:
|
|
这里有几个符号先这样读:
|
|
digit+ 里的 + 不是加法符号,而是“一个或多个”的意思。
合法和非法
合法程序:
|
|
非法程序:
|
|
原因也很简单:
|
|
所以 -1 合法,因为它是整数;(- 10 1) 不合法,因为第一章没有减法表达式。
现在我们知道什么文本算合法。下一节先不急着写 parser,而是看 parser 最终要生成的结构:AST。
本节目录