Python 微分方程的解析器:ast 和 sympify 的语法错误

Python parser for differential equations: syntax errors with ast and sympify

我正在尝试解析(常)微分方程。理想情况下,我更愿意使用现有的解析器 - 否则,这会直接导致诸如语法之类的事情并且可能相当费力。

编辑:想法是将方程式提供给 SymPy 的求解器和积分器,并用它做一些与问题无关的事情。

我找到了这个 list 的自定义解析器,但它似乎有些过时,而且似乎没有直接提及我要查找的内容。

到目前为止,我已经尝试了 ast(我认为它使用了 compile())和 sympify,但没有成功:

lagrangeODE = '''f''(x) + f'(x) + f(x)'''

import ast
tree = ast.parse(lagrangeODE)

产生

tree = ast.parse(lagrangeODE)
  File "<unknown>", line 1
    f''(x) + f'(x) + f(x)
      ^
SyntaxError: invalid syntax

同时

import sympy as sy
expr = sy.sympify(lagrangeODE)

产生

---------------------------------------------------------------------------
SyntaxError                               Traceback (most recent call last)
[...]
SympifyError: Sympify of expression 'could not parse "f''(x) + f'(x) + f(x)"' failed, because of exception being raised:
SyntaxError: invalid syntax (<string>, line 1)

对我来说,这基本上意味着 ast 和 sympify 不理解 ODE 的朗格朗日符号。

请指教:

  1. 我是不是用错了ast和sympify,还是它们不适合 任务?
  2. 是否有另一种现有方式,或者我应该实施一种 我自己?

ast 模块旨在解析Python。您的输入不是 Python。同样,sympify 旨在解析看起来像 SymPy 语法的字符串,而 ' 不是 SymPy 语法。这两种工具都不适合您的任务。

获取通用解析器生成器并编写语法。 pyparsing 是一个选择。