问题标签 [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++ - 修改调车场算法 (c++)
我有一个工作正常的调车场算法,但我注意到一个特殊的怪癖:
正确解析为
但
失败,并解析为我想让它正确解析第二个问题,以便结果与第一个相同。我怎样才能做到这一点?
注意:我从维基百科推导出我的算法: http ://en.wikipedia.org/wiki/Shunting-yard_algorithm#The_algorithm_in_detail
我的算法代码是:
编辑:好的,所以我有一个想法。因此,当解析器遇到 '(3' 标记时,它会将这两个字符视为一个字符,并丢弃整个内容,但是如果我递归调用该函数,传入以 ' 开头的输入字符串的子字符串,该怎么办? 3' 字符?然后我只需要将分流字符串添加到输出向量,然后在字符串流上调用 ignore!我说的是进行这些更改:
变成
和 被添加到 while 循环的末尾。想法?javascript - 调车场算法(Javascript),处理负数
我在 JS 中编写了调车场算法,几乎适用于所有场景,但是如果我有一个负数场景,那么它会失败,例如,如果我给这个表达式 9-(3*(-6)) 那么它赢了'不给出结果...任何提示将不胜感激...我不想使用正则表达式。我已经编写了自己的表达式解析器。
我的代码:-
c - 处理一元运算符的后缀算法的中缀
算法的 I/p 将是这样的表达式:
即标准C 编译器支持的任何表达式。
现在我已经将输入格式化为令牌流,令牌包含信息,无论是运算符还是操作数。该算法应该考虑到这一点,并给我一个我可以评估的后缀表达式。
如果我使用标准转换算法,我无法区分一元和二元运算。就像 a*(-b) 会给我 ab-* ,这会以错误的方式评估。
parsing - 将中缀转换为 RPN(调车场)
这是我使用调车场将中缀转换为 RPN 的代码。我知道算法如何运作良好,对此我没有任何问题,但是当我运行它时,什么也没有发生。当我调试它时,堆栈初始化行出现未知错误。
objective-c - 在 iOS 中计算非整数指数
我一直在研究我的数学解析器,我开始意识到我正在使用的一些代码无法处理非整数指数。我正在使用的那段代码似乎适用于 a int
,但不适用于 a double
。
' 使用 Objective-C,我如何正确评估 5^5.5 之类的东西?(6987.71242969)
c# - 从表达式中获取负数
我正在尝试在字符串表达式上分隔标记。表达式如下所示:
这是我正在使用的正则表达式:
这给我带来了这些比赛:
我期待:
任何想法如何将负数与运营商区分开来?
c++ - 调车场算法实现
我一直在尝试实现调车场算法。代码从用户那里得到一个输入,在它被另一个函数评估之后(这已经完成了),它将被转换为后缀符号,然后传递给计算。下面的代码仅适用于算法本身。ie 是由用户输入生成的标记向量。该代码对我来说很有意义,但无法编译,但无法弄清楚哪里不太正确。
java - 这是调车场的错还是我自己的错?
给定表达式:
它到达表达式的末尾并尝试先将 4 和 5 相乘,这是错误的,因为它开始从堆栈中弹出。我不一定要做RPN,而只是在现场进行评估。我怎样才能防止这种情况?
在这一点上,我开始弹出操作符和操作。由于乘法和除法具有相同的存在,它们从乘法开始。
一个痕迹:
javascript - 调车场算法的问题
编辑:具有交互性的完整代码:http: //jsfiddle.net/LDEGe/2/
我是一名高中 CS 入门学生,作为与课堂无关的副项目,我正在尝试使用 Shunting-Yard 算法创建一个简单的数学方程解析器。我理解这里的伪代码,但我无法将其转换为 Javascript 代码。我在这里创建了一个堆栈和队列对象
首先,我只是使用简单的数学运算符,+ - * / ^
并通过在每个运算符周围放置一个空格来标记字符串,然后拆分它,并将每个标记转换为具有类型、优先级和关联性的对象,就像这样
要将其转换为对象,我通过此函数运行它,该函数仅查看输入是什么,然后为其分配优先级、关联性、名称和类型
最后,我有分流算法,我认为它遵循了这里的伪代码
当我标记和分流一些简单的东西时,比如1+1
,它会返回预期的1 1 +
. 但是,当我给它时1+1+1
,它会陷入无限循环。它也很难识别右括号,并且不会删除所有括号标记。例如,当我输入 时(1+1)
,它会给出["1", "1", "("]
. 谁能指出算法中的错误在哪里,并给我一些解决方法的提示?我已经检查了好几次,但我看不出处理括号的错误在哪里。
谢谢
algorithm - 处理调车场算法的一元减号
在将中缀表达式转换为后缀表达式时,是否有更好的方法来处理一元“-”?
显而易见的是,每个一元“-”都带有 0 前缀。有人知道更好的实现吗?谢谢!