Yifei Kong
Dec 10, 2017 阅读 norvig 文章 (How to Write a (Lisp) Interpreter (in Python)) 的笔记。 作为从数学系转过来的学生,之前并没有学过编译原理,只是自己在一些文章中读过关于编译器的只言片语,借这篇文章了解一些编辑器的基本知识吧。 这篇文章主要是用 Python 实现了一个 lisp 的解释器。lisp 语言的语法非常简单,可以说lisp语言本身就是 AST 。一个解释器基本有两个部分。一部分是 parser,生成AST,另一部分是执行,运行AST。 code --> (parse) --> AST --> (eval) --> result 也就是我们只要去实现 parse 和 eval 两个函数就好了~ 这里使用了几个类型,都是直接衍生自Python 的原生类型 Symbol = str # 变量 Number = (int, float) Atom = (Symbol, Number) List = list Exp = (Atom, List) Env = dict parse parse 传统意义上应该分为两部分,一部分是词法分析(Lexical Analysis),也就是 tokenize,把代码转换成一系列的 token。另一部分是语法分析,也就是合成 AST。常用的工具有 lex,ply 等 在