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

编辑:想法是然后将方程式馈送给SymPy的求解器和积分器,并对其做一些与问题无关的事情。

我已经找到了这个list自定义解析器,但是它似乎有些过时了,而且似乎没有提到我正在寻找的东西。

到目前为止,我尝试过ast(我认为它使用compile())并进行表示,但没有成功:

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和symp不能理解ODE的Langrangian符号。

请指教:


我使用ast并表示错误,还是不适合
任务?
是否有另一种现有方法,还是应该实施
我?

最佳答案

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

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

10-06 10:34
查看更多