我需要为我正在研究的应用程序解析代数表达式,并且希望在对它进行破解之前装饰一些集体智慧,并且可能会走错路.
我需要做的是非常直接:给定一个文本代数表达式(3 * x – 4(y – sin(pi)))创建一个方程的对象表示.自定义对象已经存在,所以我需要一个解析器来创建一个我可以走的树来实例化我需要的对象.
基本要求是:
>能够将代数表达为语法,因此我可以控制并可以根据需要自定义/扩展它.
>初始语法将包括整数,实数,常数,变量,算术运算符(,–,*,/),幂(^),方程(=),括号,优先级和简单函数(sin(pi)).我希望能够相当快地扩展我的应用程序以支持正常的功能(f(x)= 3x 2).
>必须在C中编译,因为它需要集成到我的代码中.
我不需要以数学方式评估表达式,因此解决变量或执行算术的软件是噪声.
我已经完成了我的Google作业,看起来最好的方法是使用BNF语法和软件在C中生成编译器.所以我的问题:
>对于代数表达式(或者更好的是,LaTex),是否已经存在具有相应解析器生成器的BNF语法?有人必须已经这样做了.我真的想避免自己滚动,主要是因为我不想测试它.我愿意为图书馆支付合理的金额(50美元以下)
>如果没有,你认为C的哪个解析器生成器最容易学习/使用?莱克斯? YACC? Flex,Bison,Python / SymPy,其他?我对这些都不熟悉.