问题标签 [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 投票
0 回答
435 浏览

java - Java中的调车码算法,一个数字中有多个数字?

所以我试图在Java中实现Shunting-yard算法,我做得很好,但我的问题是我希望由算法评估的文本字符串包含多于一位的数字。

我有这个问题的解决方案,但解决方案并不是那么“漂亮”。我能做的是,每当找到一个数字时(在主 for 循环中),我会将它连接到一个字符串并将一个布尔变量变为 true,以让程序知道我们在一个数字内。当 for 循环找到一个非数字字符时,布尔变量将变为 false,我们照常继续算法。

我觉得这个解决方案不是很好,因为每当我遇到困难时,将布尔变量 true/false 一直是我的解决方案。

请问有什么帮助吗?

我已经突出显示了算法中出现问题的那一行(第 3 行)。它说数字,但我实现算法的方式只能捕获数字。

谢谢!

0 投票
1 回答
400 浏览

c++11 - 我究竟做错了什么?使用堆栈实现中缀到后缀

我正在尝试使用堆栈编写后缀表达式转换器的中缀。基本上,它是wikipedia 上的Shutting Yard 算法的一种实现。

我希望这段代码以包含相关标记的向量的形式返回一个有效的后缀表达式。

下面的评估函数为我正在测试的更长的表达式返回奇怪的数字。

例如,考虑这个输入和输出:

谷歌说它是 184。

更新: 我包含了来自wikipedia的关联函数。我还更新了表达式结果。

更新 2: 合并了使此代码工作的注释。

0 投票
1 回答
324 浏览

c++ - 调车场算法 C++ 在方法之间不能正确传递?

我的任务是编写一个用于我的最终项目(计算器)的 Shutting-Yard 算法。我以对我有意义的方式编写了程序,但是,在调用主算法函数(toRPN)时我没有得到任何输出。我相信这是在 parse 和 toRPN 之间传递值的问题,因为我已经直接在 main 中测试了 parse 并且它工作正常,但是当我尝试在 toRPN 函数中进行打印测试时,它什么也没打印。有人能指出我正确的方向吗?

标题:

cp:

更新:

我已将问题缩小到以下 while 循环:

行 getPrecedence(stack1.top() > getPrecedence(tokens[I]) 是问题。特别是在 stack1.top() 上运行 getPrecedence。这个函数基本上接受一个字符串并将其与包含所有存储的运算符。当它找到索引时,它返回该索引处的优先级(它们按顺序设置所有索引)。我不明白为什么我不能以这种方式调用这个函数。 stack1.top() 只会给出一个字符串,它会被传递并比较。有什么想法吗?

0 投票
0 回答
30 浏览

algorithm - “ab +”情况下的调车场算法

我正在学习调车场算法。我读过维基百科,它为我提供了详细的 步骤

但是,如果您将表达式写成1 2 +,它将以与1 + 2 相同的方式计算。

你知道如何解决吗?

0 投票
1 回答
46 浏览

parsing - 没有线路终结器的调车场 - 如何根据操作员数量停止?

这是一个关于扩展一个非常基本的Shunting Yard表达式解析器的问题。

我有一种语言,其表达式由数字文字、字母数字变量名称、运算符“+”、“*”和“-”组成,并带有一些数量、关联性和优先级以及括号。但是该语言中还有其他语句,并且该语言没有行终止符。

当运算符的数量已知时,停止解析或发出错误信号的正确方法是什么?

例子:

前四个案例已经奏效,那么后三个呢?

0 投票
0 回答
63 浏览

c++ - 调车场算法动态函数生成

我的 Qt 应用程序需要一些概念上的帮助。

我有一个程序可以接收来自 12 个模数转换器(ADC - 它们将电子显微镜中 12 个探测器的信号数字化)的图像数据。我在我的应用程序中实时显示这些图像。现在我想让用户有机会以非常灵活的方式对信号应用数学运算,同时保持实时显示。

因此,我考虑实现调车场算法。我的想法是用户根据自己的喜好在文本框中输入/混合信号。例如,如果需要四个 ADC 信号的总和,用户只需输入

我了解如何应用该算法来获得波兰后缀符号,以及如何评估这样的表达式。但是,这种方法似乎太慢了,无法应用于当前的 8x256x256 值(八个正方形图像,不幸的是所有值都需要同时刷新)。当然,Postfix 转换只需要进行一次,但我的变量的插入和评估在我看来比仅仅编写成本要高得多

在代码中。

你能想出什么方法来做这样的事情吗?我想到的是从后缀中创建某种动态函数,但我不确定如何在 C++ 中实现这样的东西。

0 投票
0 回答
321 浏览

algorithm - 在调车场处理链式一元操作员

我查看了调车场的 wiki 页面,因为在我的调车场处理链式一元减号运算符时遇到问题,但 wiki 算法似乎无法处理它。

Wiki算法供参考:

假设我有以下表达式---1,我希望 rpn 输出为1---,但实际发生的情况如下:


迭代1: operator stack: [] output queue: []

要读取的令牌是 a-所以我们推入操作员堆栈


迭代2: operator stack: [-] output queue: []

要读取的令牌是-. 有一个-操作员堆栈,我们应该将其弹出到输出队列中。然后我们将令牌推送到操作员堆栈上。


迭代 3: operator stack: [-] output queue: [-]

错误- 我们不应该-在输出队列中有一个。(因为没有意义,所以不会继续算法)

0 投票
1 回答
108 浏览

c++ - 试图理解调车场算法

我正在尝试做Shunting-yard算法,所以我开始研究它。这样做时,我发现了一些我不太了解的有趣文档:

我不明白为什么在里面while,变量val被乘以 10(val=(val*10))。有人可以帮我理解为什么算法必须这样做吗?

0 投票
1 回答
1276 浏览

c++ - 调车场算法 C++

作为大学项目的一部分,我写了一个关于 Dijkstra 的 Shutting Yard Algorithm 的尝试。一切都按预期工作,但我还需要展示操作员在处理后是如何排序的,我不知道该怎么做,我相信最好的方法是队列?有谁知道如何做到这一点?我的代码:

0 投票
1 回答
79 浏览

infix-notation - 使用 Shutting Yard 算法将中缀表达式转换为 RPN

我一直在尝试正确回答过去的试卷问题,该问题要求我将 5+3*6*(8*2+1) 转换为 RPN。我得到的唯一答案是 53682***1+。

当我评估我的上述 RPN 答案时,我没有得到 311 的预期答案。如果有人能告诉我如何回答这个问题,我将非常感激。我应该得到哪个 RPN 答案?谢谢