在编写完本文档之后,我将为Brainfuck编写一个解释器,在我的实现中,它需要将字符串转换为:
',>,<[>[->+>+<<]>>[-<<+>>]<<<-]>>.'
变成这样的指令列表:
[',', '>', ',', '<', [ '>', [ '-', '>', '+', '>', '+', '<', '<', ], '>', '>', [ '-', '<', '<', '+', '>', '>', ] '<', '<', '<', '-' ], '>', '>', '.']
或减去符号:
[ ... [...] ... [...] ... ]
现在,我正在使用deque和popleft()递归地解决此问题,一次遍历字符串中的一个符号,但我觉得我应该一次将其分解为子数组。
您将如何以Python方式解决此问题?
(出于速度原因排除正则表达式)
这并不是一种“ Pythonic方式”,但是....我使用递归和生成器找到了解决问题的方法
s = ',>,<[>[->+>+<<]>>[-<<+>>]<<<-]>>.'
def brainfuck2list(brainfuck):
while brainfuck: #if list is empty then finish
e = brainfuck.pop(0)
if e not in ("[","]"):
yield e
elif e == "[":
yield list(brainfuck2list(brainfuck))
else:
break
[_ for _ in brainfuck2list(list(s))]
您得到以下输出
[
',', '>', ',', '<',
[
'>',
[
'-', '>', '+', '>', '+', '<', '<'
]
, '>', '>',
[
'-','<', '<', '+', '>', '>'
],
'<', '<', '<', '-'
]
, '>', '>', '.'
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句