在Python中实现解释器的更好方法

cjm*_*cjm 4 python brainfuck

我正在尝试为brainfuck实现一个解释器,截至目前,我只是使用一系列if/elif语句.

if(i == ">"):
    ...
elif(i == "<"):
    ...
elif(i == "+"):
    ...
elif(i == "-"):
    ...
Run Code Online (Sandbox Code Playgroud)

然而,这对我来说似乎非常笨拙和不py.是否有更好的(更清洁/更快/更美观)的方式来实现这个?

mip*_*adi 6

我在GitHub仓库中快速实现了针对Python的Brainfuck解释器.简而言之,您可以保留一个字典,其中键是Brainfuck字符,值是函数(或方法)对象,然后在其上发送.像这样的东西:

instructions = {
  '+': increment,
  '-': decrement,
  # Other functions
}

def run(tape):
  ch = next_token(tape)
  if ch in instructions:
    instructions[ch]()
Run Code Online (Sandbox Code Playgroud)

(不是实际的实现,只是一个快速的说明.)

  • +1.作为一般规则,几乎任何链条都超过少数`if foo =='a':``elif foo =='b':`行更好地用这种方式编写,使用dict调度函数.但是,您可能希望使用`instructions.get(ch,default_func)`而不是显式的`in`检查.(当然,`default_func`是NOP,错误处理程序还是其他不同的东西取决于你正在写的东西.) (2认同)