问题标签 [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 回答
166 浏览

java - Java无法将某些东西从堆栈移动到队列

所以我正在编写一个函数来对一些数字/运算符执行调车场算法。问题是我最后有一个循环,它将所有剩余的运算符添加到输出队列中,但由于某种原因它们没有被添加。我已经测试过了,程序进入循环,在进入循环之前堆栈中有数字但它们从未被添加到队列中,通过循环后堆栈也是空的,所以看起来运算符正在从堆栈中弹出但未添加到队列中。这是相关的代码:

编辑:

我对堆栈和队列的实现是:

0 投票
1 回答
580 浏览

c# - C# Infix to Postfix 转换器在少数情况下不给出正确答案

我做了一个InfixtoPostfix转换器,并认为它有效,但是当我回去向我的老师展示它时,他测试的一个例子结果是错误的。:|

如果有人能在这件事上帮助我,我将不胜感激,并让我知道出了什么问题。

我跳过了关于输入数字按钮的部分,只发布了其余部分,

上面的部分用于将 a 重定向console.writeline到我的文本框及其完成所有工作并给出最终结果的按钮。

这是主要课程:

}

这是失败的输入:

A^B^(CD/(E+F))-(G+H)^L*Z+Y

此代码的结果不正确:

ABCDEF+/-^^GH+-LZY+*^

正确的结果:

ABCDEF+/-^^GH+L^Z*-Y+

0 投票
2 回答
144 浏览

java - 这个 Shutting-Yard 算法语句是什么意思?

我正在尝试基于Wikipedia page中的伪代码开发一个 Shutting-Yard 算法。

其中一项操作指出:

如果标记是函数参数分隔符(例如,逗号)[...]

有人可以澄清这意味着什么吗?

0 投票
1 回答
3647 浏览

compiler-construction - 使用逆波兰表示法 (RPN) 进行算术表达式评估

数学表达式通常用中缀符号表示。出于评估目的,我们可以将其更改为后缀(反向抛光)表示法(使用Shutting-Yard等算法),然后使用堆栈评估后缀表示法。

我发现计算器使用了这种技术,但是今天的现代编译器是否使用它来进行算术表达式评估?它是否足够有效或正在使用其他技术(或算法)?

0 投票
1 回答
506 浏览

java - 使用 Java 分隔没有制表符的控制台文本

嘿,我目前正在用 Java 编写表达式计算器。我现在已经让它工作了,但不知道如何在终端中间隔写我想要的是两个彼此相邻的列表。我最初会使用标签,但因为数组可以增长它会移动另一个。这是我现在得到的:

这是我想要实现的目标:

这是我目前用来打印堆栈和输出缓冲区的代码:

0 投票
1 回答
337 浏览

java - 在我的调车场实施中添加括号处理时遇到问题

我正在实施调车场算法,但在处理括号时遇到了麻烦。不过,它适用于非分组表达式。这是我没有括号检测的情况:

ops 是保存 Operator 对象的堆栈。有两种类型的运算符,函数(+,-,*等)和Parans(“(”,“[”))。您如何为此添加括号处理?每次尝试,我似乎都无法理解正常工作

这是我尝试过的:

我怀疑while循环条件不好,但我不知道有什么合适的替换。它继续到无穷大。这是我拥有的最干净的实现。基本上它应该做的是当它遇到一个左括号时,将它压入堆栈。当它碰到一个闭合的时,将堆栈中的所有内容弹出到输出上,直到它碰到左括号。然后它应该中断,并继续下一个令牌。

编辑:添加了我的尝试

0 投票
0 回答
6883 浏览

algorithm - 使用调车场算法的抽象语法树

我有一个已标记化的中缀表达式,并希望继续创建抽象语法树。我了解在这些情况下使用的调车场算法。我只找到了将中缀表达式转换为 RPN 格式的方法,而不是转换为 AST 的方法。我可以先创建 RPN 版本,然后从中创建 AST,但这似乎没有必要。

我选择的语言是 JavaScript,尽管我只需要查看任何语言的示例和/或算法的描述。我浏览了 Dragon Book 和 Terence Parr 的书,但都没有给出我想要的答案。

0 投票
1 回答
1457 浏览

java - 在 Java 中标记中缀字符串

我正在用 Java 实现Shutting Yard 算法,作为我的 AP 计算机科学课程的一个附带项目。我用 Javascript 实现了一个简单的,只有基本的算术表达式(加法、减法、乘法、除法、求幂)。要将其拆分为一个数组,我所做的是找到每个运算符 ( +-*/^) 以及数字和括号,并在它们周围放置一个空格,然后将其拆分为一个数组。例如,中缀字符串4+(3+2)将被制成4 + ( 3 + 2 ),然后在空格处拆分。

但是,我觉得这种方法非常慢,并且随着您开始添加数学函数(例如正弦、余弦、正切、绝对值等),实现起来变得越来越困难和效率低下。

将字符串拆分sin(4+3)-8为数组的最佳方法是["sin","(" 4,"+",3,")","-",8]什么?

我可以为此使用正则表达式,但我不太了解它们,我正在努力学习它们,所以如果这对他们来说是最好的解决方案,那么回答者能否解释一下它的作用?

0 投票
1 回答
1366 浏览

c++ - 分流场算法中缀到前缀实现

我已经成功地在 C++ 中实现了分流场算法,将中缀表达式转换为后缀表达式 (RPN)。我需要修改我的算法以返回前缀(抛光)表达式,但我不知道如何。

0 投票
0 回答
795 浏览

c++ - Dijkstra 的 C++ 中的 Shutting Yard 算法

作为我的作业,我必须编写一个程序来计算以字符串形式给出的方程。该程序的一部分是将中缀表达式解析为后缀的函数。这是我的代码:

问题是它适用于除 4/6 等方程之外的所有条件。有任何想法吗?我刚刚进行了请求的更新