- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要为我正在处理的应用程序解析代数表达式,并希望在开始尝试并可能走错路之前积累一些集体智慧。
我需要做的非常简单:给定文本代数表达式 (3*x - 4(y - sin(pi))) 创建方程的对象表示。自定义对象已经存在,所以我需要一个解析器来创建一棵我可以遍历的树来实例化我需要的对象。
基本要求是:
能够将代数表达为语法,因此我可以控制并可以根据需要自定义/扩展它。
初始语法将包括整数、实数、常量、变量、算术运算符(+、-、*、/)、幂 (^)、等式 (=)、括号、优先级和简单函数 (罪恶(π))。我希望相当快地扩展我的应用程序以支持适当的功能 (f(x) = 3x +2)。
必须用 C 编译,因为它需要集成到我的代码中。
我不需要对表达式进行数学计算,因此求解变量或执行算术的软件是噪音。
我已经完成了我的 Google 作业,看起来最好的方法是使用 BNF 语法和软件在 C 中生成编译器。所以我的问题:
BNF 语法和相应的代数表达式解析器生成器(或者更好的是 LaTex)是否已经存在?必须有人已经这样做了。我真的想避免自己滚动,主要是因为我不想测试它。我愿意为图书馆支付合理的费用(低于 50 美元)
如果不是,您认为 C 的哪个解析器生成器在这里最容易学习/使用?莱克斯? YACC? Flex、Bison、Python/SymPy 等?我对这些都不熟悉。
最佳答案
标准的 Linux 工具 flex 和 bison 可能最适合这里。 IIRC 这些工具中使用的示例解析器和词法分析器可以做一些接近您想要的事情,因此您可能只需修改该代码即可获得所需的内容。
这些工具看起来符合您的要求。您可以自定义语法,向下编译为 C,并使用您想要的任何运算符。
关于c - 需要一种方法来解析 C 中的代数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4641824/
我已经将一些变量声明为 bool 值,我希望 C++ 在我进行一些 bool 加法时知道该做什么,但它并没有按照我希望的方式发生。我如何让它工作。 #include using namespace s
我正在创建小型配置文件查看器,我想在 SQL 中模拟环。怎么运行的?对于简单:我的 table 上有 5 个用户。当我从中间获得一个到我的实验(如用户编号 2、3、4)时,下一个和上一个用户是 CUR
我计划使用低级 API 实现 FUSE 文件系统,目前正在尝试了解 fuse_entry_param结构体。 不知道是什么unsigned long fuse_entry_param::generat
从事 JS 工作,刚刚开始学习 boolean 代数。想知道是否有办法简化这个表达式: (!variableOne || !variableTwo) 我记得听说过两个“not”意味着你可以改变符号,但
我有这个 F-代数 (introduced in a previous question),我想在它上面施放一个有效的代数。通过绝望的试验,我设法组合了一个有效的 monadic catamorphi
我在 Google 上到处寻找德摩根定律的 bool 代数(不是集合论)证明,但找不到。 Stack Overflow 也缺少 DeMorgan 定律问题。 作为我的 CIS 251 类(class)
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
正在解决这个问题。 验证闰年的基本规则如下: - 大多数能被4整除的年份都是闰年。 - 异常(exception):世纪年不是闰年,除非它们可以被 400 整除。 这就是答案: if(y%4==0 &
假设算法的最坏情况运行时间可以描述为: T(n) = O(n) + O(r^2) + O(n-r) n 是输入大小,r 是根据算法创建分区的索引。 这个等式可以进一步简化吗?如果变量都是 n 那么它将
有没有办法在 JS 中使用 bool 代数? 例如,我想遍历一个包含 true 和 false 的数组,并将其简化为只有 true 或 false。 用 bool 代数来做这件事似乎是一种优雅的方式.
假设我有两个数据框 df1 df2 我可以加入 df1_keys 和 df2_keys。 我想做的事: (A-B) (A-B) U (B-A) A=df1 和 B=df2。 根据我在 document
这个问题已经有答案了: How can I remove a flag in C? (3 个回答) How to set, clear, and toggle a single bit? (27 个回
大家 我实现了自定义聚合 pig UDF。UDF 实现了 Algebraic 接口(interface),并且有 3 个类 - Initial、Intermed 和 Final 在不同阶段进行工作。它
我想制作一个 bool 向量,它是通过比较两个输入 bool 向量创建的。我可以使用 for 循环,但有更好的方法吗? 我理想的解决方案是这样的: df['A'] = [True, False, Fa
我想编写一个 pig 代码来执行分组并生成 31 个字段的总和,但在此之前我需要做一些自定义处理,为此我编写了一个 eval 函数。我想如果我可以将 GROUP 和 SUM 操作包含到 UDF 中,我
我试图通过 boolean 代数来理解使用 4 个与非门如何等同于 1 个异或门。 如果我们从维基百科看这张图片 http://en.wikipedia.org/wiki/XOR_gate#Alter
我是一名优秀的程序员,十分优秀!