从 REPL 到逆波兰计算器:一步步扩展交互程序

副标题 / 摘要 REPL 是交互式程序的最小形态。本文先构建 echo REPL,再扩展为逆波兰计算器。 目标读者 想练习解析与交互程序的开发者 学习表达式求值的人 初中级算法学习者 背景 / 动机 交互式解释器是语言与工具链的核心。 从简单 REPL 演化到计算器,是理解解析流程的好练习。 核心概念 REPL:读入-求值-输出循环 逆波兰表达式(RPN):无需括号的表达式形式 栈求值:用栈完成运算 实践指南 / 步骤 先实现 echo REPL(读入并输出) 加入退出指令(如 quit) 解析输入为 token 列表 用栈计算 RPN 表达式 可运行示例 import sys def eval_rpn(tokens): stack = [] for t in tokens: if t in {"+", "-", "*", "/"}: b = stack.pop() a = stack.pop() if t == "+": stack.append(a + b) elif t == "-": stack.append(a - b) elif t == "*": stack.append(a * b) else: stack.append(a / b) else: stack.append(float(t)) return stack[-1] def repl(): while True: line = input("> ").strip() if line == "quit": return if not line: continue try: tokens = line.split() print(eval_rpn(tokens)) except Exception as e: print("error:", e) if __name__ == "__main__": repl() 解释与原理 RPN 的关键是“运算符后置”,因此可以用栈自然求值。 REPL 只需持续读入、求值、输出即可。 ...

2026年1月24日 · 1 分钟 · map[name:Jeanphilo]