gpt4 book ai didi

python - 来自 Python 字符流的 Lisp 分词器

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:26 25 4
gpt4 key购买 nike

我喜欢在这里阅读有关 Peter Norvig 廉价而令人愉快的 Lisp 解释器的文章:

http://norvig.com/lispy.html

在他的代码中,他使用这个非常简单的函数来标记输入的 Lisp 代码:

def tokenize(chars):
"Convert a string of characters into a list of tokens."
return chars.replace('(', ' ( ').replace(')', ' ) ').split()

我想将其重写为可以在流上运行的生成器,如下所示:

def tokenize(stream):
"Generate a stream of tokens from a stream of characters."
# Do something here
yield token # This would be wrapped in a loop

我草拟了一个状态机并开始实现它,但它很快变得比预期的要复杂。是否有我缺少的更简单的方法?

最佳答案

我又试了一次,想出了这个。它尚未经过充分测试,但到目前为止似乎可以正常工作。

def tokenise(char_stream):
c = char_stream.read(1)
accumulated = []

while c:
c_isbracket = c in '()'
if !c.isspace() and !c_isbracket:
accumulated.append(c)
else:
if accumulated:
token_str = ''.join(accumulated)
accumulated = []
yield token_str
if c_isbracket:
yield c

c = char_stream.read(1)

关于python - 来自 Python 字符流的 Lisp 分词器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45975769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com