1 如何使用Py thon 编写一个Lisp 解释器 原文: Peter Norvig 译者: johnc 本文有两个目的: 一是讲述实现计算机语言解释器的通用方法,另外一点,着重展示如何使用Py thon 来实现Lisp 方言Scheme 的一个子集
我将我的解释器称之为Lispy(lis
几年前,我介绍过如何使用Jav a 编写一个Scheme 解释器,同时我还使用Common Lisp 语言编写过一个版本
这一次,我的目的是尽可能简单明了地演示一下Alan Kay 所说的“软件的麦克斯韦方程组” (Maxwell's Equations of Software)[1]
Lispy 支持的Scheme 子集的语法和语义 大多数计算机语言都有许多语法规约 (例如关键字、中缀操作符、括号、操作符优先级、点标记、分号等等),但是,作为Lisp 语言家族中的一员,Scheme 所有的语法都是基于包含在括号中的、采用前缀表示的列表的
这种表示看起来似乎有些陌生,但是它具有简单一致的优点
(一些人戏称"Lisp"是" Lots of Irritating Silly Parentheses"— — “大量恼人、愚蠢的括号“— — 的缩写;我认为它是" Lisp Is Syntactically Pure"— — “Lisp语法纯粹” 的缩写
考虑下面这个例子: Java Scheme if (x
val() > 0) { z = f(a * x
val() + b); } (if (> (val x) 0) (set
z (f (+ (* a (val x)) b)))) 2 注意上面的惊叹号在Schem e 中并不是一个特殊字符;它只是"set
"这个名字的一部分
(在Schem e 中)只有括号是特殊字符
类似于(set
x y)这样以特殊关键字开头的