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))]
def tokenize(code):
instructions = deque()
if len(code) > 0:
while len(code) > 0:
if code[0] is "[":
code.popleft()
group = deque()
r = 0
while r > -1 and len(code) > 0:
if code[0] is '[':
group.append(code.popleft())
r += 1
elif code[0] is ']':
if r is 0:
code.popleft()
else:
group.append(code.popleft())
r -= 1
else:
group.append(code.popleft())
instructions.append(tokenize(group))
else:
instructions.append(code.popleft())
return instructions
else:
return instructions
这不完全是一种“Python式的方式”,但是。。。。我用递归和生成器来解决这个问题
你得到以下输出
^{pr2}$我快到了:
这会产生:
^{pr2}$这并不是您想要的,但是您也可以对字符串进行迭代。在
如果您担心eval的安全性,请使用^{} 。在
更新:使用regex,我一路做到了:
这将变成:
对于好奇的人来说,以下是我使用递归的有效解决方案:
相关问题 更多 >
编程相关推荐