我已经实现在Python发电的扫描仪,标记化的字符串到窗体的元组(令牌类型,令牌值)前瞻:使用与发电机
for token in scan("a(b)"):
print token
将打印
("literal", "a")
("l_paren", "(")
...
下一个任务意味着解析令牌流,为此,我需要能够从当前的一个项目前面查看一个项目,而无需向前移动指针。迭代器和生成器不一次提供完整的项目序列,但每个项目根据需要使预览比列表更复杂一些,因为除非调用__next__()
,否则下一个项目是未知的。
什么可以直接实现基于生成器的lookahead看起来像?目前我使用一种解决方法,这意味着做一个列表出来发电机:
token_list = [token for token in scan(string)]
先行那么容易被这样的事情来实现:
try:
next_token = token_list[index + 1]
except: IndexError:
next_token = None
当然,这只是正常工作。但考虑到这一点,我的第二个问题就出现了:首先是否真的有一个使发电机成为scan()
的点?
呃......这不仅仅是关于琴弦,是吗?考虑诸如'(_ for _ in(无,'evil',4,0))',这也是一个生成器。 – n611x007 2014-06-25 16:28:03