问题标签 [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.
c# - 调车场验证表达式
我们使用 Shutting-Yard 算法来评估表达式。我们可以通过简单地应用算法来验证表达式。如果缺少操作数、不匹配的括号和其他东西,它会失败。然而,Shunting-Yard 算法具有比人类可读的中缀更大的支持语法。例如,
是所有可接受的方式来提供“1+2”作为Shunting-Yard 算法的输入。'+ 1 2' 和 '1 2 +' 不是有效的中缀,但标准的 Shutting-Yard 算法可以处理它们。该算法并不真正关心顺序,它按优先顺序应用运算符,获取“最近”操作数。
我们希望将输入限制为有效的人类可读的中缀。我正在寻找一种方法来修改 Shunting-Yard 算法以使中缀无效或在使用 Shunting-Yard 之前提供中缀验证。
有谁知道任何已发表的技术可以做到这一点?我们必须同时支持基本运算符、自定义运算符、括号和函数(带有多个参数)。除了在线基本操作员之外,我还没有看到任何可以使用的东西。
谢谢
java - 后缀转换器输出问题的中缀
我正在尝试实现后缀转换器的中缀,但我在输出时遇到了一些麻烦,即括号。当我尝试用括号传递任何内容时,请说:
我得到一个 NoSuchElementException。有谁知道怎么了?
一些注意事项:我将一个标记化字符串的双端队列作为中缀传递(因此我仅限于双端队列方法)并返回后缀的字符串双端队列。任何帮助表示赞赏。
这是我有问题的方法:
java - 后缀数字或字母连接的中缀
正在研究将中缀表示法转换为后缀的程序。我让它适用于大多数情况,除非需要字符连接。例如,如果我传入一串数字 (1002+304),它会输出 1、0、0、2、3、0、4、+ 而不是 1002、304、+。
python - 调车码算法中的复杂表达式导致计算器错误
我已经实现了调车场算法,如下所示:
它适用于诸如“3 + 4”之类的简单表达式,但如果我输入任何复杂的东西,就会发生这种情况:
$ ./rpn.py
-> 4 - 5 * 6 + 3 ^ 2
(错误)太多的值
在此先感谢,感谢您的帮助!
java - 如何在有条件的反向波兰符号公式中使用 AND/OR?
假设我有一个“(a > b) OR (c < d)”形式的条件。如何将其转换为反向波兰符号并计算它?我通过将“和/或”标记设置为最低优先级来尝试并得到“abc OR > d <”。这样对吗?
基本上我想在这个调车场算法的实现中添加条件特性;http://eddmann.com/posts/shunting-yard-implementation-in-java/
shunting-yard - InfixToPostfix 将字符转换为字符串
如何将此代码中的字符转换为字符串?InfixToPostfix 必须能够接受字符串而不是字符,因此它可以接受两位数和空格。有什么建议么?提前致谢。
}
java - 调车场算法解析函数agruments
我试图让我的调车场算法的实现工作。它适用于数字和运算符。但是当我尝试向输入添加功能时会出现问题。因为函数参数在函数应该输出到右边时输出到函数的左边。
测试程序
算法
示例 1:
输入:cbrt ( 8 )
输出:8 cbrt
输出应该是:cbrt 8
示例 2:
输入:cbrt ( 8 ) + sqrt ( 9 )
输出:8 9 sqrt + cbrt
输出应该是:cbrt 8 sqrt 9 +
示例 3:
输入:5 + 4 - 9 / 2 ^ 6 * cbrt ( 8 )
输出:5 4 + 9 2 6 ^ / 8 cbrt * -
输出应该是:5 4 + 9 2 6 ^ / cbrt 8 * -
java - 调车场功能
我在 Java 程序中使用 Shunting-Yard 算法 ( https://en.wikipedia.org/wiki/Shunting-yard_algorithm ) 来创建计算器。我差不多完成了,但我仍然需要实现功能。我遇到了一个问题:我希望计算器在放在一起时自动将 x 和 y 等变量相乘 - 示例:计算器将 xy 转换为 x*y。另外,我希望计算器将 (x)(y) 转换为 (x)*(y) 并将 x(y) 转换为 x*(y)。我已经使用以下代码完成了所有这些工作:
(在我的计算器中,变量名总是单个字符。)
现在这很好用,但是当我实现函数时,这当然行不通。它将“sin(1)”变成“s*i*n*(1)”。我怎样才能让这段代码只为运算符而不是函数进行乘法转换?
java - 用逻辑实现调车场
所以我正在尝试实现一个调车场来与 Logic 一起工作,我认为这会很容易,直到我遇到为物质条件(->)和双条件(<->)设置优先级的问题语句,因为它们需要表示为字符串而不是字符。我需要能够读取带有诸如(A|B) -> !C
(这意味着:(A OR B)暗示NOT C)之类的语句的文件并将其转换为后缀表示法。我在第 115 行不断收到 NullPointerException,实际上我不确定为什么,我只能使用 char 值设置案例吗?或者我是否需要找到另一种设置符号优先级的方法。这是我的代码
}
binary-tree - 一元运算符、二叉表达式树和调车场算法
我正在编写数学表达式求解器,它采用中缀表达式并求解它们,二叉表达式树和分流场都对我有好处(我什至解决了处理一元和三元运算符的问题)。遇到三角函数问题。当我写 45sin 或 (45)sin 或 (44+1)sin 时,调车场将其转换为有效的逆波兰表示法 (RPN) 并且评估成功。虽然有效的中缀表达式是 sin(44+1) 或 sin45 + 1。请建议解决这个问题。
这是 ExpressionEval 类中的 java 代码,它将中缀转换为 RPN。
一旦我们有了 post-fix 表达式,就会在 ExpressionEval 类的这个函数中完成评估
运算符类与此有些相似。