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

c++ - c++中的调车场算法

我需要一个接受中缀字符串(如“3 + 4 * 9”)并将其转换为后缀(如“4 9 * 3 +”)的函数。

我让它工作,直到你在括号内加上括号。我整天都在努力,无法弄清楚我做错了什么——也许有头脑的人能看到它吗?我觉得我真的很亲近!

谢谢!这是代码:

0 投票
1 回答
1107 浏览

java - Java中的调车场算法不起作用?

这是我的代码:

输入 3 + 5 * 6 + 7,它应该返回 3 5 6 * + 7 +,但我得到的是 3 + 5 * 6 + 7 + *。我很困惑为什么,因为我遵循了维基百科页面上的算法说明......我在其他地方搞砸了吗?我在这里先向您的帮助表示感谢!

0 投票
2 回答
5392 浏览

c# - 带三角函数的调车场算法

我正在用 C# 实现调车场算法。尽管它可以很好地解析带有符号(+、* - / 和 ^)的数学表达式。但由于某种原因,它不适用于正弦余弦函数。例如,如果我尝试计算 sin(45) 我得到 0.707106 。但是当我尝试解析表达式时



我已按照Wikipedia上的这篇文章中提到的所有步骤进行操作。我已经尝试了几天,但我无法让它完美地工作。这是主要的解析功能

此外,这是程序的输出:

//错误的

新案例:

就是这样。任何人都可以指出我做错了什么。

编辑:

这是 IsHigherPrecedance 函数和优先级枚举:

既然这些三角函数是单参数函数,它们是否会用其他逻辑进行解析,或者这个分流场算法也适用于这些函数?

问候。

0 投票
1 回答
589 浏览

java - Java 计算器版本 4

计算器现在几乎可以工作了。它现在给我读取的每个方程式都给出了相同的答案?

输出结束为:49 + 62 * 61-36 15.666666666666668 4/64 15.666666666666668(53 + 26)15.666666666666668 0 * 72 15.666666666666668 21-85 + 75-85 15.666666666666668 90 * 76-50 + 67 15.666666666666668 46 * 89-15 15.666666666666668 34/83-38 15.666666666666668 20/76/14+92-15 15.666666666666668 5*10/3-1 15.666666666666668

而不是那里有每个方程的答案?

我在我的方法中遗漏了什么吗?

谢谢

所有代码如下所示。任何帮助都感激不尽。

堆栈类:

数组列表类

方程处理的 TestClass

0 投票
2 回答
1988 浏览

c++ - 输入字符串 C++ 双 chevron

我目前正在尝试在“<<”和“>>”的字符串中使用双 V 形来表示位移。但是,我的程序似乎无法识别对任何输入使用双 V 形。如果我将其更改为任何其他字符串,它会完美运行。

derpleft 会起作用,但是“<<”不起作用。

0 投票
4 回答
10196 浏览

java - Java 表达式解析器和计算器调车场算法

所以任务是为表达式计算器创建我们自己的解析器。例如:

输入:3+2*1-6/3 输出:3

输入:3++2 输出:无效的表达式

输入:-5+2 输出:-3

输入:5--2 输出:7

这里的代码解决了部分问题,只是它有一个固定的输入并且无法解决负值,而且我还不太确定它是否真的解决了具有运算符优先级的表达式。但我已经对其进行了修改以从用户那里获取输入表达式。我一直想知道如何解决负值。帮助任何人?

请不要使用 JAVASCRIPT 引擎。

这是当前代码

更新代码:添加:unaryToexp() 函数。我想做的是每次出现“ - ”时,代码通过将其更改为“ _ ”作为另一个运算符将其视为二进制文件,并且该运算符解决乘以 -1 的问题(我首先想要的是添加 [- 1] 和 [*] 到 rpn 堆栈)。这里仍然有问题。

编译器说:

我认为这与Double d1 = Double.valueOf( stack.pop() );它仍然弹出另外两个值的原因有关,我只需要一个来解决一元运算符。有什么帮助吗?

0 投票
2 回答
167 浏览

algorithm - 如何估计将中缀表达式转换为后缀表达式所需的堆栈空间

有著名的调车码算法可用于将中缀表达式(例如1 + 2 * 3)转换为后缀表达式(例如1 2 2 * +)。调车场算法需要一个堆栈来存储即将被移动的元素。

是否可以预先估计在线性时间和恒定内存中将特定输入转换为其后缀形式所需的堆栈长度?

0 投票
1 回答
3128 浏览

parsing - 在调车场处理额外的操作员

给定这样的输入:3+4+ 算法将其转换为3 4 + +

当需要执行后缀表达式时,我可以找到错误。但是,是否有可能在转换过程中发现这一点?

(我读过的维基百科文章和互联网文章不处理这种情况)

谢谢

0 投票
2 回答
4714 浏览

c++ - 调车场表达式解析器中的一元减号

这是我使用分流码算法的表达式解析器,除了在一种情况下,它可以正常工作,除非在一种情况下,当我在 -2*3 中使用一元减号时它不起作用(我认为它不应该,因为我在算法中没有找到任何东西处理这个)有没有一种简单的方法可以解决这个问题?(这是一个简单的解析器,我只需要 () + - * / ^ )问候 Pedram

0 投票
1 回答
609 浏览

parsing - 在 PHP 中解析数学表达式

我目前正在尝试将数学表达式解析为表达式树。但是我被困在需要实现功能和否定的阶段。我不明白使用 Shutting-Yard 算法的逻辑。

我目前想做的是支持

  • 否定,如 -(x+5)
  • 函数调用,例如 min(x,y)
  • 函数名称后的幂,如 cos^2(x)
  • 隐式乘法,如 2x 与 2*x 相同
  • 科学计数法
  • 常数 e 和 pi

有人可以告诉我提示如何实现这一点吗?