PROGRAM = "\n".join([ "BEGIN notr.eal", "CREATE int AS 2", "DESTROY int AS 0", "ANS var AS Create + TO", "out TO", ])
defvalue_of(expr, env): total = 0 for term in expr.split("+"): term = term.strip() if re.fullmatch(r"\d+", term): total += int(term) else: total += env.get(term.lower(), 0) return total
defrun(source): env = {} answer = None for line in source.splitlines(): parts = line.split() ifnot parts or parts[0] == "BEGIN": continue if parts[0] == "out": print("out %s -> %s" % (parts[1], answer)) continue name, declared_type, _as = parts[0], parts[1], parts[2] expr = " ".join(parts[3:]) answer = value_of(expr, env) env[name.lower()] = answer print("%-8s %-4s AS %-14s => %d" % (name, declared_type, expr, answer)) return answer
if __name__ == "__main__": print(run(PROGRAM))
运行输出,最后一行就是程序输出:
1 2 3 4 5
CREATE int AS 2 => 2 DESTROY int AS 0 => 0 ANS var AS Create + TO => 2 out TO -> 2 2