常规方案

替代 eval() 最常见的方式即为完全重写 - 分两步走,包括解析和解释字符串。首先解析器创建一个抽象语法树(AST),然后解释器遍历语法树并在沙箱中解释为代码。

这是被最为广泛使用的方案,但是对于如此简单的事情被认为是牛刀小用。从零开始重写所有的东西而不是为 eval() 打补丁会导致易出很多的 bug, 并且它还要求频繁地修改以匹配语言的升级更新。