擅长:python、mysql、java
<p>如果您正在用Python解析表达式,那么可以考虑使用Python语法来解析表达式,并使用<a href="http://docs.python.org/library/ast.html#module-ast" rel="nofollow">^{<cd1>} module</a>(AST=abstract syntax tree)来解析它们。在</p>
<p>使用Python语法的好处是:不必为此而创建单独的语言,解析器和计算器都是内置的。缺点:解析树中有很多您不需要的额外复杂性(您可以通过使用内置的<code>NodeVisitor</code>和<code>NodeTransformer</code>类来避免其中的一些复杂性)。在</p>
<pre><code>>>> import ast
>>> a = ast.parse('x**2 + x', mode='eval')
>>> ast.dump(a)
"Expression(body=BinOp(left=BinOp(left=Name(id='x', ctx=Load()), op=Pow(),
right=Num(n=2)), op=Add(), right=Name(id='x', ctx=Load())))"
</code></pre>
<p>下面是一个示例类,它遍历Python解析树并执行递归常量折叠(对于二进制操作),以向您展示您可以相当容易地完成的事情。在</p>
^{pr2}$