我正在尝试解析(普通)微分方程。理想情况下,我更喜欢使用现有的解析器-否则,这将直接导致诸如语法之类的事情,并且可能相当费力。
编辑:想法是然后将方程式馈送给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
是一种选择。