问题标签 [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.

0 投票
5 回答
7992 浏览

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) 以获得正确的价值

0 投票
2 回答
1097 浏览

haskell - Haskell 函数返回空列表

我真的是 Haskell 的绝对新手,所以我完全不知道如何调试我编写的一些函数。当我打电话时,shuntingYard ["3+4"]我回来了[],而我想回来[34+]。任何和所有的帮助将不胜感激。

0 投票
1 回答
1196 浏览

clojure - 调车场算法

我正致力于在 Clojure 中实现一个中缀计算器,首先是我实现 Dijkstra 的 Shutting-yard 算法。我以为我把它弄得很好,但在开玩笑,它似乎根本不能很好地处理操作员。呼唤(shunting-yard "3 + 5") => (\3)。就这样。有人可以告诉我在这里处理操作员字符有什么问题吗?

0 投票
1 回答
475 浏览

regex - 在调车场之前处理逗号分隔的列表

因此,我正在使用 Shunting-Yard 算法从 XML 字符串中处理一些数学运算。诀窍是我想允许使用逗号分隔列表生成随机值。例如...

我已经有一个基本的 Shutting-Yard 处理器在工作。但我想在处理表达式之前预处理字符串以从列表中随机选择一个值。这样我最终可能会得到:

就我的理解而言,Shunting-Yard 的设置已经相当复杂,所以我很犹豫是否尝试改变它来处理这个问题。用错误检查来处理这个问题听起来像是一场噩梦。因此,我假设事先寻找这种模式是有意义的?我正在考虑使用正则表达式,但我不是“那些”人之一......虽然我希望我是......虽然我找到了一些例子,但我不确定如何修改它们先检查括号?我也不相信这将是最好的解决方案。

附带说明一下,如果解决方案是正则表达式,它也应该能够匹配逗号列表中的字符串(只有字符,没有符号),因为我将在我的 Shunting-Yard 实现中处理特定字符串的值。

提前感谢您的想法。

0 投票
2 回答
1381 浏览

c++ - 无法从“void”转换为“Token”(C++)

编辑:将令牌结构/枚举添加到代码块

我是 C++ 新手,所以如果我错过了一些明显的东西,请原谅我。我正在尝试编写调车场算法的 c++ 版本,但它无法编译,因为它给了我错误:“无法从 'void' 转换为 'Token'(在我标记的行上)。” 谁能告诉我为什么会出现这个错误?

0 投票
1 回答
1205 浏览

java - 在调车场保留括号

我正在研究本质上是调车场算法,但是将中缀移动到前缀而不是 RPN 我试图保留括号,而且我正在经历一段魔鬼时期。目前我的代码是

这会正确输出左括号,但只有一种右括号。有人知道我应该在哪里添加它们吗?我发誓我错过了最后一个合乎逻辑的步骤来获得它的去向......

0 投票
4 回答
2063 浏览

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#。

0 投票
2 回答
2164 浏览

algorithm - 必须实现Shunting-yard算法,需要帮助理解

我正在尝试实现一个没有括号的Shutting-yard算法,但我无法理解它。我试过维基百科,但条目真的很糟糕。我在实现代码时应该没有什么问题,但如果我不明白,我就无法实现它。

现在:这个算法是如何工作的?

以下是我的理解:

  • 从左到右,所有数字都添加到输出队列中,所有操作数都添加到堆栈中。到达末尾后,您将弹出所有操作数并将它们添加到输出中

    /li>

现在我弹出堆栈并将其添加到队列中

据我了解,表格应该是:25435/+*+

让我们尝试解决它:

编辑:我确信我在这里使用的反向波兰符号是正确的,所以这不应该是问题。

我知道我在做一些愚蠢的事情,但对于我的一生,我无法弄清楚。

我认为如果有人能指出我的逻辑中的错误,那将很有帮助,因为算法应该很好,因为它来自维基百科,而且我看到其他人向我指出了它。所以它必须是好的,我只是在某个地方搞砸了。

是队列吗?我很确定我可以很好地处理逆波兰符号

0 投票
1 回答
415 浏览

c++ - 在 Shutting Yard 中处理带括号的表达式

我有以下手写循环来处理带括号的表达式:

output并且punctuators都是 type std::vector<token>,其中token是一个非常简单struct的,由 achar kind和一个unsigned value数据成员组成。)

我想知道从手写循环切换到算法是否会提高可读性:

但不知何故,我觉得这段代码的可读性差了很多,可能是由于使用了反向迭代器,尤其是转换为普通迭代器。有更好的解决方案吗?您是否同意手写循环更具可读性,或者我只是在算法方面还没有看到光明?

0 投票
5 回答
253 浏览

c++ - C++ 编译器错误涉及一个据称未声明的函数

我目前正在编写一个基本程序来评估数学表达式,然后我将在遗传编程中使用它来确定表达式系统的最佳解决方案。我的编译器一直在抱怨,但我几乎可以肯定我做的一切都是正确的。

错误:

我的制作文件:

我的主要:

}

我的头文件:

我的实现文件:

请帮助我即将把我的笔记本电脑靠在墙上。