c - 需要一种方法来解析 C 中的代数表达式

标签 c parsing math grammar algebra

我需要为我正在处理的应用程序解析代数表达式,并希望在开始尝试并可能走错路之前积累一些集体智慧。

我需要做的非常简单:给定文本代数表达式 (3*x - 4(y - sin(pi))) 创建方程的对象表示。自定义对象已经存在,所以我需要一个解析器来创建一棵我可以遍历的树来实例化我需要的对象。

基本要求是:

  1. 能够将代数表达为语法,因此我可以控制并可以根据需要自定义/扩展它。

  2. 初始语法将包括整数、实数、常量、变量、算术运算符(+、-、*、/)、幂 (^)、等式 (=)、括号、优先级和简单函数 (罪恶(π))。我希望相当快地扩展我的应用程序以支持适当的功能 (f(x) = 3x +2)。

  3. 必须用 C 编译,因为它需要集成到我的代码中。

我不需要对表达式进行数学计算,因此求解变量或执行算术的软件是噪音。

我已经完成了我的 Google 作业,看起来最好的方法是使用 BNF 语法和软件在 C 中生成编译器。所以我的问题:

  1. BNF 语法和相应的代数表达式解析器生成器(或者更好的是 LaTex)是否已经存在?必须有人已经这样做了。我真的想避免自己滚动,主要是因为我不想测试它。我愿意为图书馆支付合理的费用(低于 50 美元)

  2. 如果不是,您认为 C 的哪个解析器生成器在这里最容易学习/使用?莱克斯? YACC? Flex、Bison、Python/SymPy 等?我对这些都不熟悉。

最佳答案

标准的 Linux 工具 flex 和 bison 可能最适合这里。 IIRC 这些工具中使用的示例解析器和词法分析器可以做一些接近您想要的事情,因此您可能只需修改该代码即可获得所需的内容。

这些工具看起来符合您的要求。您可以自定义语法,向下编译为 C,并使用您想要的任何运算符。

关于c - 需要一种方法来解析 C 中的代数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4641824/

相关文章:

mysql 算术函数中的单引号

.net - ASP.NET VB - .NET 的一些数学运算

c - 我应该添加哪个库来解决 fcntl64、stat64 等问题?

c - 这里的输出应该是什么?

c - 通常,C 解析器如何区分类型转换和函数调用?

java - 使用 JAXB 将 XML 数据解析为字符串对象

c - 返回(0)的使用

c - 在 C 中生成文件给出 fatal error

C: 使用 sprintf( ) 做 IP 地址解析,不正确的值

php - MySQL计算具有可变半径的地理位置距离