为什么python复制代码运行不了

您所在的位置:网站首页 为什么我的手机代码运行不了 为什么python复制代码运行不了

为什么python复制代码运行不了

2024-07-12 08:24| 来源: 网络整理| 查看: 265

我在python3.6中编写了一个解析器;我在生成bug的同时尽可能地简化了它:

def tokenize(expr):

for i in expr:

try:

yield int(i)

except ValueError:

yield i

def push_on_stream(obj, stream):

yield obj

yield from stream

class OpenBracket:

"just a token value, could have used Ellipsis"

pass

def parse_toks(tokstream):

result = []

leading_brak = False

for tok in tokstream:

if tok == OpenBracket:

leading_brak = True

elif tok == '(':

result.append(parse_toks(

push_on_stream(OpenBracket, tokstream)))

elif tok == ')':

if not leading_brak:

raise SyntaxError("Very bad ')'.")

break

else:

result.append(tok)

return sum(result)

def test(expr="12(34)21"):

tokens = tokenize(expr)

print( parse_toks(tokens) )

print(list(tokens))

test()

这个例子很简单;其效果应该是添加字符串中的所有数字,包括括号中的数字。

tokenize()函数生成令牌,parse_tok()函数解析令牌流。如果它遇到一个左括号,它会重复出现(按

开括号

在token流上),它应该具有将括号中的数字视为单独表达式、对其进行解析并将结果添加到

结果

堆叠。

当我解析代码时,例如在表达式“1(2)3”上,它立即在右括号后结束,返回

事实上,令牌流似乎已经结束。

但是,当我使用pdb运行它,并在parse-tok的循环中设置断点时,我可以在处理')'时小心地执行,并且程序正确地返回

.

我认为这个bug与从push_on_stream()中的token流中让步有关。

这是解释程序中的错误吗?如果有,是否有一个好的解决方法?

我是为python-3.6编写的,但我也在另一台机器上用相同的结果在python-3.7上进行了测试。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3