【发布时间】:2019-09-01 17:45:56
【问题描述】:
我正在 python 3.7 中构建一个 lisp 解析器。
想象一下我有这个列表程序作为一个字符串
"(begin (define r 10) (* pi (* r r)))"
我使用的标记:
def tokenize(string):
return string.replace('(', ' ( ').replace(')', ' ) ').split()
返回
['(', 'begin', '(', 'define', 'r', '10', ')', '(', '*', 'pi', '(', '*', 'r', 'r', ')', ')', ')']
现在我正在尝试构建一个从这个令牌列表中读取并返回它的函数。
['begin', ['define', 'r', '10'], ['*', 'pi', ['*', 'r', 'r']]]
欢迎任何想法。
【问题讨论】:
-
我根本不会使用正则表达式。想想
'("\"" "(" "\\")等等。 -
您正在尝试构建递归结构,因此您需要递归或堆栈。或道德上的等价物。
标签: python-3.x parsing iteration s-expression