问题标签 [shunting-yard]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 调车场算法的问题
我已经在java中成功实现了一个调车场算法。算法本身很简单,但是我在使用标记器时遇到了问题。目前,该算法适用于我想要的一切,不包括一件事。如何区分减法(-)和负数(-)
例如 4-3 是减法但 -4+3 是负数
我现在知道如何找出它什么时候应该是负数,什么时候应该是负数,但是它应该放在算法中的什么位置,因为如果你像函数一样使用它,例如它不会总是有效
3 + 4 * 2 / -( 1 - 5 ) ^ 2 ^ 3
当 1-5 变为 -4 时,它会在平方和立方之前变为 4
就像 3 + 4 * 2 / cos( 1 − 5 ) ^ 2 ^ 3 ,你会在平方和立方之前取余弦
但在真正的数学中你不会用 - 因为你真正说的是 3 + 4 * 2 / -(( 1 − 5 ) ^ 2 ^ 3) 以获得正确的价值
haskell - Haskell 函数返回空列表
我真的是 Haskell 的绝对新手,所以我完全不知道如何调试我编写的一些函数。当我打电话时,shuntingYard ["3+4"]
我回来了[]
,而我想回来[34+]
。任何和所有的帮助将不胜感激。
clojure - 调车场算法
我正致力于在 Clojure 中实现一个中缀计算器,首先是我实现 Dijkstra 的 Shutting-yard 算法。我以为我把它弄得很好,但在开玩笑,它似乎根本不能很好地处理操作员。呼唤(shunting-yard "3 + 5")
=>
(\3)
。就这样。有人可以告诉我在这里处理操作员字符有什么问题吗?
regex - 在调车场之前处理逗号分隔的列表
因此,我正在使用 Shunting-Yard 算法从 XML 字符串中处理一些数学运算。诀窍是我想允许使用逗号分隔列表生成随机值。例如...
我已经有一个基本的 Shutting-Yard 处理器在工作。但我想在处理表达式之前预处理字符串以从列表中随机选择一个值。这样我最终可能会得到:
就我的理解而言,Shunting-Yard 的设置已经相当复杂,所以我很犹豫是否尝试改变它来处理这个问题。用错误检查来处理这个问题听起来像是一场噩梦。因此,我假设事先寻找这种模式是有意义的?我正在考虑使用正则表达式,但我不是“那些”人之一......虽然我希望我是......虽然我找到了一些例子,但我不确定如何修改它们先检查括号?我也不相信这将是最好的解决方案。
附带说明一下,如果解决方案是正则表达式,它也应该能够匹配逗号列表中的字符串(只有字符,没有符号),因为我将在我的 Shunting-Yard 实现中处理特定字符串的值。
提前感谢您的想法。
c++ - 无法从“void”转换为“Token”(C++)
编辑:将令牌结构/枚举添加到代码块
我是 C++ 新手,所以如果我错过了一些明显的东西,请原谅我。我正在尝试编写调车场算法的 c++ 版本,但它无法编译,因为它给了我错误:“无法从 'void' 转换为 'Token'(在我标记的行上)。” 谁能告诉我为什么会出现这个错误?
java - 在调车场保留括号
我正在研究本质上是调车场算法,但是将中缀移动到前缀而不是 RPN 我试图保留括号,而且我正在经历一段魔鬼时期。目前我的代码是
这会正确输出左括号,但只有一种右括号。有人知道我应该在哪里添加它们吗?我发誓我错过了最后一个合乎逻辑的步骤来获得它的去向......
algorithm - 无法理解如何处理调车场算法的输出
我一直在看维基页面:http ://en.wikipedia.org/wiki/Shunting-yard_algorithm
我已经使用代码示例构建了第一部分,基本上我现在可以打开:
3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
进入3 4 2 * 1 5 − 2 3 ^ ^ / +
但我不知道如何使用3 4 2 * 1 5 − 2 3 ^ ^ / +
来获取3.00012207
wiki上的示例代码和解释对我来说没有任何意义。
有人可以解释如何评估3 4 2 * 1 5 − 2 3 ^ ^ / +
和产生答案。提前致谢。我不需要一个代码示例,只需要一个很好的解释或一个示例的分解。
没关系,但我正在使用.net C#。
algorithm - 必须实现Shunting-yard算法,需要帮助理解
我正在尝试实现一个没有括号的Shutting-yard算法,但我无法理解它。我试过维基百科,但条目真的很糟糕。我在实现代码时应该没有什么问题,但如果我不明白,我就无法实现它。
现在:这个算法是如何工作的?
以下是我的理解:
从左到右,所有数字都添加到输出队列中,所有操作数都添加到堆栈中。到达末尾后,您将弹出所有操作数并将它们添加到输出中
/li>
现在我弹出堆栈并将其添加到队列中
据我了解,表格应该是:25435/+*+
让我们尝试解决它:
编辑:我确信我在这里使用的反向波兰符号是正确的,所以这不应该是问题。
我知道我在做一些愚蠢的事情,但对于我的一生,我无法弄清楚。
我认为如果有人能指出我的逻辑中的错误,那将很有帮助,因为算法应该很好,因为它来自维基百科,而且我看到其他人向我指出了它。所以它必须是好的,我只是在某个地方搞砸了。
是队列吗?我很确定我可以很好地处理逆波兰符号。
c++ - 在 Shutting Yard 中处理带括号的表达式
我有以下手写循环来处理带括号的表达式:
(output
并且punctuators
都是 type std::vector<token>
,其中token
是一个非常简单struct
的,由 achar kind
和一个unsigned value
数据成员组成。)
我想知道从手写循环切换到算法是否会提高可读性:
但不知何故,我觉得这段代码的可读性差了很多,可能是由于使用了反向迭代器,尤其是转换为普通迭代器。有更好的解决方案吗?您是否同意手写循环更具可读性,或者我只是在算法方面还没有看到光明?
c++ - C++ 编译器错误涉及一个据称未声明的函数
我目前正在编写一个基本程序来评估数学表达式,然后我将在遗传编程中使用它来确定表达式系统的最佳解决方案。我的编译器一直在抱怨,但我几乎可以肯定我做的一切都是正确的。
错误:
我的制作文件:
我的主要:
}
我的头文件:
我的实现文件:
请帮助我即将把我的笔记本电脑靠在墙上。