Python中的安全表达式解析器

2024-04-28 17:12:19 发布

您现在位置:Python中文网/ 问答频道 /正文

如何允许用户以安全的方式执行数学表达式? 我需要写一个完整的解析器吗?

除了表达式,还有类似于ast.literal_eval()的东西吗?


Tags: 用户解析器表达式eval方式数学astliteral
3条回答

几周前,我也做过类似的事情,但是对于逻辑表达式(或者,而不是,比较,括号等等)。我是用Ply解析器完成的。我已经创建了简单的lexer和parser。解析器生成AST树,稍后用于执行计算。这样做可以让您完全控制用户输入的内容,因为只有与语法兼容的表达式才会被解析。

Pyparsing examples page列出了几个表达式分析器:

http://pyparsing.wikispaces.com/file/view/fourFn.py-一个使用pyparsing的传统算术中缀表示法解析器/求值器实现(尽管它的名称是,它实际上是5函数算术,外加几个trig函数)

http://pyparsing.wikispaces.com/file/view/simpleBool.py-一个布尔中缀符号解析器/求值器,使用pyparsing助手方法operatorPrecedence,它简化了中缀运算符符号的定义

http://pyparsing.wikispaces.com/file/view/simpleArith.pyhttp://pyparsing.wikispaces.com/file/view/eval_arith.py- 一对使用operatorPrecedence重铸fourFn.py的示例。第一个只是解析并返回一个解析树,第二个是添加求值逻辑。

你想要什么样的表达?变量赋值?功能评估?

^{}旨在成为成熟的Python ca。

相关问题 更多 >