shunting-yard相关内容

具有功能支持的调车场算法

我在互联网上找到了这种分流码算法的实现(带有函数支持的后缀中缀) infix_to_postfix(中缀):后缀 = []infix.add(')')堆栈 = []stack.push('(')对于中缀中的每个标记:如果令牌是操作数:postfix.add(令牌)如果令牌是“[":堆栈推送(令牌)否则如果令牌是运算符:如果堆栈为空或stack[top] 是 '(' 或 stack[top] 是 ..
发布时间:2021-06-22 20:41:58 C/C++开发

具有三角函数的调车场算法

我正致力于在 C# 中实现调车场算法.虽然它用符号(+、*-/和 ^)解析数学表达式非常好.但由于某种原因它不适用于正弦余弦函数.例如,如果我尝试计算 sin(45) 我得到 0.707106 .但是当我尝试解析像 这样的表达式时 sin(25)+cos(15+sin(25))+3 它给了我 0.43756(正确答案是:2.19106879911) sin(45)+cos(45) 它给了 ..
发布时间:2021-06-14 19:33:23 C#/.NET

带变量的调车场算法

我目前正在开发Shunting Yard Algorithm的修改版本,该版本可以使用变量,但是我不知道如何使它起作用.例如,我希望算法重新编写2 *(2x + 5)-5到4x +5.是否有任何想法/指向已经实现的算法的链接? 解决方案 采用表达式: 2 *(2x + 5)-5 添加*符号,使计算机更易理解: 2 *(2 * x + 5)-5 使用Shunting Yard算法对其进行 ..
发布时间:2021-05-31 20:45:58 其他开发

标记Java中的中缀字符串

我正在Java中实现 Shunting Yard Algorithm (分流场算法),作为一个附带项目我的AP计算机科学课.我已经用Javascript实现了一个简单的脚本,只带有基本的算术表达式(加法,减法,乘法,除法,求幂).要将其拆分为一个数组,我要做的是找到每个运算符( +-*/^ )以及数字和括号,然后在它们周围放置一个空格,然后拆分它变成一个数组.例如,将中缀字符串 4+(3 ​​+ ..
发布时间:2021-05-18 20:17:20 Java开发

调车场表达式解析器中的一元减号

这是我使用Shunting-yard算法的表达式解析器它可以正常工作,除非在一种情况下,当我在-2 * 3中使用一元负值时它不会工作(我认为应该不行,因为我没有在算法中找到任何东西来处理这个问题).有一种简单的方法可以解决此问题吗?(这是一个简单的解析器,我只需要()+-*/^)问候踏板车 #include#include#include ..
发布时间:2021-04-19 19:38:05 C/C++开发

Java表达式解析器计算器调车场算法

因此,任务是为表达式计算器创建自己的解析器.例如: 输入:3 + 2 * 1-6/3 输出:3 输入:3 ++ 2 输出:无效的表达式 输入:-5 + 2 输出:-3 输入:5--2 输出:7 这里的代码解决了部分问题,除了它具有固定的输入并且不能解决负值之外,而且我还不确定它是否真的以运算符优先级解决了表达式. 但我已经对其进行了修改,以从用户那里获得输入表达式. ..
发布时间:2020-11-02 18:35:41 Java开发

调车场算法,有什么变化吗?

我已经根据Wikipedia中提到的内容在C ++ 11中实现了调车场算法: 此实现未实现复合函数,具有可变数量的参数的函数,和一元运算符. while there are tokens to be read: read a token. if the token is a number, then: push it to the output queu ..
发布时间:2020-08-22 20:56:41 C/C++开发

后缀算法的后缀,用于一元运算符

算法的I / p将是这样的表达式: a +(-b) a * -b + c 即标准C编译器将支持的任何表达式。 现在我已经将输入格式化为令牌流,这些令牌包含的信息是操作符还是操作数。 算法应将其引入并给我一个可以评估的后缀表达式。 如果我使用标准转换算法,则 无法区分一元运算符和二进制运算符 。 就像a *(-b)会给我ab- *一样,它将以错误的方 ..
发布时间:2020-06-03 20:10:22 其他开发

为调车场算法处理一元减号

在将中缀表达式转换为后缀表达式时,是否有更好的方法来处理一元“-”? 显而易见的是在每个一元“-”之前加上前缀0。有人知道更好的实现吗?谢谢! 解决方案 我几年前的方式是为我的后缀表达式发明了一个新的运算符。因此,当我在前缀中遇到一元减号时,我会将其转换为#。所以我的 a + -b 的后缀变成了 ab#+ 。 当然,我的评估者必须知道#仅弹出一个操作数。 种类的大小取决于 ..
发布时间:2020-06-03 19:58:35 其他开发

将infix转换为Rpn(调车场)

这是我的代码,用于使用调车场将infix转换为ron.我知道算法如何运作良好,对此我没有任何问题. 但是当我运行时,什么也没发生. 当我调试它时,在堆栈初始化行上出现未知错误 #include #include #include #include #include using namespace ..
发布时间:2020-05-25 01:58:16 其他开发

分流场VS递归下降解析器

我正在构建一个高级数学解析器,并且想知道Shunting-Yard与其他可用的解析器算法(例如“下降解析器")之间的区别,因为我希望将公式存储为RPN表示法. 预先感谢 解决方案 "shunting yard"算法从未使用过很多,因为它似乎只针对中缀表达式.递归下降解析很容易完成表达式以及使用更复杂的解析器进行的大多数操作.更一般地说,我发现它更有用,并且不需要记住两种技术. ..
发布时间:2020-05-25 00:45:34 其他开发

在调车场处理额外的操作员

给出如下输入:3+4+ 算法将其转换为3 4 + + 我应该在执行后缀表达式时发现错误. 但是,是否有可能在转换过程中发现这一点? (我读过的维基百科文章和互联网文章都无法解决这种情况) 谢谢 解决方案 除括号不匹配外,可用正则表达式验证有效表达式. (不匹配的括号将被维基百科页面上指示的调车码算法捕获,因此我将忽略它们.) 正则表达式如下: PRE* OP ..

需要在PHP中使用Shunting Yard实现,解释和解析字符串以执行数学比较并返回布尔结果

我正在寻找可以解释php中的字符串并执行简单数学计算,然后返回关于表达式是true还是false的布尔结果的东西. 例如: 起诉类型为"3 * {mysalary}/9 = 10000" PHP将其分为两个表达式-explode('=',string); PHP接收了我的数据库字段列表,并用数据(类型转换为int)替换了所有用"{}"分隔的字段 PHP然后评估数学表达式 php ..
发布时间:2020-05-06 10:35:48 PHP

分流码算法的问题

我已经在java中成功实现了一个调车场算法。算法本身很简单但是我在使用tokenizer时遇到了麻烦。目前,该算法适用于我想要的一切,不包括一件事。如何判断减法( - )和否定( - ) 之间的区别,例如4-3是减法 但-4 + 3是负数 我现在知道如何找出它应该是负数何时应该是负数,但算法应放在哪里,因为如果你使用它就像例如,它不会一直有效的功能 3 + 4 * 2 / - ..
发布时间:2018-12-05 11:30:57 Java开发

在PHP中解析数学表达式

我正在尝试将数学表达式解析成表达式树。 但我被困在我需要实现功能和否定的舞台上。我不明白使用Shunting-Yard算法的逻辑。 我目前想做的是支持 否定,像 - (x + 5) 函数调用,如min(x,y) 功能刚刚在函数名称后面,像cos ^ 2(x) 隐含乘法,像2x一样2 * x 科学符号 常量e和pi 有人可以告诉我如何实现这个吗? p> 解决方案 ..
发布时间:2017-10-07 16:42:49 其他开发

分流场验证表达式

我们使用Shunting-Yard算法来评估表达式。我们可以通过简单的应用算法验证表达式。如果缺少操作数,错误匹配的括号和其他事情,则失败。然而,Shunting-Yard算法的支持语法更大,而不仅仅是可读的中缀。例如, 1 + 2 + 1 2 1 2 + 都是提供“1 + 2”作为分流场算法输入的可接受的方法。 '+ 1 2'和'1 2 +'不是有效的,但是标准 ..
发布时间:2017-10-07 16:22:26 C#/.NET

使用反向波兰记号法(RPN)的算术表达式估计

数学表达式通常以中缀表示法表示。出于评估目的,我们可以将其更改为后缀(反向抛光)符号(使用类似 Shunting-Yard )然后使用堆栈评估后缀符号。 我发现计算器使用这种技术,但今天的现代编译器使用这个算术表达式求值?是否足够高效或使用其他技术(或算法)? 解决方案 要回答这个问题,提及中缀符号, Shunting-Yard 和评估然后将它们与编译相关联。 首先,我们需要了 ..

修改分流算法(c ++)

1 +(3 *(4 + 5)) 我有一个正常工作顺序的调车场算法,但我注意到一个特殊的怪癖: 正确解析 1 3 4 5 + * +, 但1 +(3 *(4 + 5)) 失败, / p> 1 * + 5))+ 我想让它解析第二个问题正确,使结果与第一个相同。我如何实现这一点? 注意: 我从维基百科中导出了我的算法: http://en ..
发布时间:2016-11-02 01:12:30 C/C++开发

在c ++中的分割算法

我需要一个包含中缀字符串(如“3 + 4 * 9”)的函数,并将其转换为后缀(如“4 9 * 3 +”)。 我把它工作,直到括号中的括号括起来。我一直在做这一整天,不能弄清楚我做错了什么 - 有人可能有一个新鲜的主意看到它,也许?我觉得我真的很亲近! 谢谢!代码如下: string ExpressionManager :: infixToPostfix(string infix ..
发布时间:2016-10-24 16:38:24 C/C++开发