问题标签 [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无法将某些东西从堆栈移动到队列
所以我正在编写一个函数来对一些数字/运算符执行调车场算法。问题是我最后有一个循环,它将所有剩余的运算符添加到输出队列中,但由于某种原因它们没有被添加。我已经测试过了,程序进入循环,在进入循环之前堆栈中有数字但它们从未被添加到队列中,通过循环后堆栈也是空的,所以看起来运算符正在从堆栈中弹出但未添加到队列中。这是相关的代码:
编辑:
我对堆栈和队列的实现是:
c# - C# Infix to Postfix 转换器在少数情况下不给出正确答案
我做了一个Infix
toPostfix
转换器,并认为它有效,但是当我回去向我的老师展示它时,他测试的一个例子结果是错误的。:|
如果有人能在这件事上帮助我,我将不胜感激,并让我知道出了什么问题。
我跳过了关于输入数字按钮的部分,只发布了其余部分,
上面的部分用于将 a 重定向console.writeline
到我的文本框及其完成所有工作并给出最终结果的按钮。
这是主要课程:
}
这是失败的输入:
A^B^(CD/(E+F))-(G+H)^L*Z+Y
此代码的结果不正确:
ABCDEF+/-^^GH+-LZY+*^
正确的结果:
ABCDEF+/-^^GH+L^Z*-Y+
compiler-construction - 使用逆波兰表示法 (RPN) 进行算术表达式评估
数学表达式通常用中缀符号表示。出于评估目的,我们可以将其更改为后缀(反向抛光)表示法(使用Shutting-Yard等算法),然后使用堆栈评估后缀表示法。
我发现计算器使用了这种技术,但是今天的现代编译器是否使用它来进行算术表达式评估?它是否足够有效或正在使用其他技术(或算法)?
java - 使用 Java 分隔没有制表符的控制台文本
嘿,我目前正在用 Java 编写表达式计算器。我现在已经让它工作了,但不知道如何在终端中间隔写我想要的是两个彼此相邻的列表。我最初会使用标签,但因为数组可以增长它会移动另一个。这是我现在得到的:
这是我想要实现的目标:
这是我目前用来打印堆栈和输出缓冲区的代码:
java - 在我的调车场实施中添加括号处理时遇到问题
我正在实施调车场算法,但在处理括号时遇到了麻烦。不过,它适用于非分组表达式。这是我没有括号检测的情况:
ops 是保存 Operator 对象的堆栈。有两种类型的运算符,函数(+,-,*等)和Parans(“(”,“[”))。您如何为此添加括号处理?每次尝试,我似乎都无法理解正常工作
这是我尝试过的:
我怀疑while循环条件不好,但我不知道有什么合适的替换。它继续到无穷大。这是我拥有的最干净的实现。基本上它应该做的是当它遇到一个左括号时,将它压入堆栈。当它碰到一个闭合的时,将堆栈中的所有内容弹出到输出上,直到它碰到左括号。然后它应该中断,并继续下一个令牌。
编辑:添加了我的尝试
algorithm - 使用调车场算法的抽象语法树
我有一个已标记化的中缀表达式,并希望继续创建抽象语法树。我了解在这些情况下使用的调车场算法。我只找到了将中缀表达式转换为 RPN 格式的方法,而不是转换为 AST 的方法。我可以先创建 RPN 版本,然后从中创建 AST,但这似乎没有必要。
我选择的语言是 JavaScript,尽管我只需要查看任何语言的示例和/或算法的描述。我浏览了 Dragon Book 和 Terence Parr 的书,但都没有给出我想要的答案。
java - 在 Java 中标记中缀字符串
我正在用 Java 实现Shutting Yard 算法,作为我的 AP 计算机科学课程的一个附带项目。我用 Javascript 实现了一个简单的,只有基本的算术表达式(加法、减法、乘法、除法、求幂)。要将其拆分为一个数组,我所做的是找到每个运算符 ( +-*/^
) 以及数字和括号,并在它们周围放置一个空格,然后将其拆分为一个数组。例如,中缀字符串4+(3+2)
将被制成4 + ( 3 + 2 )
,然后在空格处拆分。
但是,我觉得这种方法非常慢,并且随着您开始添加数学函数(例如正弦、余弦、正切、绝对值等),实现起来变得越来越困难和效率低下。
将字符串拆分sin(4+3)-8
为数组的最佳方法是["sin","(" 4,"+",3,")","-",8]
什么?
我可以为此使用正则表达式,但我不太了解它们,我正在努力学习它们,所以如果这对他们来说是最好的解决方案,那么回答者能否解释一下它的作用?
c++ - 分流场算法中缀到前缀实现
我已经成功地在 C++ 中实现了分流场算法,将中缀表达式转换为后缀表达式 (RPN)。我需要修改我的算法以返回前缀(抛光)表达式,但我不知道如何。
c++ - Dijkstra 的 C++ 中的 Shutting Yard 算法
作为我的作业,我必须编写一个程序来计算以字符串形式给出的方程。该程序的一部分是将中缀表达式解析为后缀的函数。这是我的代码:
问题是它适用于除 4/6 等方程之外的所有条件。有任何想法吗?我刚刚进行了请求的更新