问题标签 [rpn]

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 投票
1 回答
207 浏览

parsing - Antlr4 语法左递归错误

我现在对 antlr4 有很大的问题。
每当我尝试用这个 RPN 语法喂 antlr

antlr 会抛出一个错误,因为 plus,minus,mult 和 div 是相互左递归的。
我不知道如何解决。
(我知道会发生这种情况,因为这种语法“表达式”可以无限循环,我以前用另一种语法遇到过这个问题,但我可以自己解决这个问题)

我唯一的解决方案是通过以下方式限制语法

但这并不是我真正想要的,因为现在我可以最大程度地使用诸如

并且语法会比实际情况更复杂。
希望你们能帮助我

0 投票
2 回答
374 浏览

php - Apply distributive law on AST (or RPN) => disjunctive normal form

I have expressions like the following:

Allowed operators are OR and AND, expressions can be nested using parenthesis. I already managed to tokenize this string and to convert it to an abstract syntax tree (AST) using the Shunting Yard algorithm, implemented in PHP 5.3. The above expression results in the following:

When traversing this tree I want to output the final combinations of numbers a user can choose from. In the given representation this is not possible. What I need is actually the form, after the distributive law was applied:

I concluded, that the only nodes that are allowed to be &-operator nodes, are the last ones that carry the leafs. All others have to be |-operator nodes.

How to convert an arbitrary AST with the grammar explained above to one that represents all final permutations? Is it better to apply the distributive law on the tokens of the infix representation? Is it easier to work with the RPN representation instead of the tree?

Please also note, that there are more difficult examples possible like:

Which I'd like to result in:

For another (more complicated) example just switch left sub tree and right sub tree or add another &-node in place of 1003 => 1003 1009 &

What I already tried: Googling a lot, traversing the tree pre and post order, trying to find an algorithm with no success.

I am grateful for any hints and pointers into the right direction.

0 投票
2 回答
142 浏览

c - 初始化结构的访问冲突

我已经为 RPN 计算器编写了代码,它适用于基本运算符(+、*、/、^)以及浮点数和负数。它还计算表达式,如 (x^2 + x*4/-2) : 1 -> 5 :0.5(x 从 1 计算到 5,步长为 0.5)

我使用了一个字符堆栈。

现在,我想添加对 cos(x)、tan(x) 等函数的支持。为了达到这个目的,我需要构建一个char* 堆栈,在解析后存储诸如 sin、cos、sqrt 等单词。

问题是,在初始化堆栈时,我收到“访问冲突:地址 0x01 写入”错误。

我不知道具体为什么。会不会是 malloc() 的使用?

这些是使用堆栈的函数。

0 投票
0 回答
218 浏览

java - 带有一元运算符和括号的 RPN

我最近开始熟悉一些基本的 Java 编程,并试图完成导师为我设置的任务。基本上,该程序旨在接受一个可能包含任何运算符的方程+, * and #(我们没有被告知 # 表示的确切含义,只是它是一个优先级高于 * 的一元运算符);并将其转换为 RPN,以便稍后使用 LOAD 和 EXEC 命令进行解释和转换为基本机器代码(但这是以后的事情)。

我创建了基本的转换函数,似乎可以很好地处理 A+6 等基本方程,但是当它遇到括号时似乎有问题。

例如,如果我将以下等式传递给它:

我得到以下结果:

所以似乎只有括号妨碍了。我的问题是:

  • 我将如何最好地处理括号?
  • 就像从一开始就删除它们一样简单吗?
  • 一元运算符是否有任何需要额外特殊情况的影响?
0 投票
1 回答
68 浏览

ruby - 当项目在数组中时,Ruby 仅返回整数

我正在创建一个反向波兰符号计算器作为学校的“热身测试”。我几乎已经搞定了。我遇到的问题是当我自己运行它时,我只看到返回的整数(这是所需的)。当我将它插入学校的 RSpec 检查器时,它会以数组的形式返回我的数据,因此它被标记为不正确。

为了解决这个问题,我只是在最后构建了 queue.each 语句。我在几个不同的位置上试过这个,但这似乎并不重要。当评估返回答案时,是否有更大的概念可以从数组格式中提取我的答案?

提前感谢您的时间,

0 投票
1 回答
201 浏览

java - 反向波兰表示法和堆栈。valueOf 方法出错。爪哇

我必须计算这个表达式(5+7)*(9-4)+12,使用堆栈和 RPL (57+94-*12+)

我遍历给定数组中的每个元素。当它是一个数字时,我将它压入堆栈。当它是一个运算符时,我从堆栈中弹出两个数字,进行计算,然后将结果推回。

所以,这是我的代码。但是使用 valueOf 方法的第 33、34 和 53 行存在错误 ( Integer 类型中的方法 valueOf(String) 不适用于参数 (Object)

你能帮助我吗?谢谢!

0 投票
1 回答
69 浏览

c - 带标题的RPN,为什么不起作用?

我做了一个 RPN,但没有显示结果和步骤,在出现之前,我不明白发生了什么,编译器也没有抛出错误。

我总是做这个例子:

3.2 1.8 - 10 / 2 + 。

4 步 = 2.14

我真的不知道怎么了...

0 投票
1 回答
198 浏览

java - Antlr4 RPN 计算;堆栈上的最终结果丢失

免责声明:这是针对课程作业的,这也是我的第一篇 SO 帖子,因为通常我的问题之前一直被问到

在对 antlr 进行了简短的速成课程之后,我已尽力弄清楚如何最好地解决创建支持数字、逻辑和关系运算的 RPN 计算器的问题。只接受 int 和 boolean。

现在,虽然我的代码可能远不及标准的 antlr 质量,但除了我的“开始”规则匹配时,它都可以正常工作。我希望它从堆栈中打印出结果,但由于某种原因,匹配后堆栈始终为空。

例如 2 3 + ; 通过我的打印调试语句,我看到所有内容都被推送、弹出,并且 5 的结果按预期推送。但是一旦终止';',堆栈就会为空 匹配“开始”规则。

我敢肯定我在这里遗漏了一些基本的东西,因为我们只在课堂上和 antlr 一起度过了一天,但我无法弄清楚。我没有任何运气找到 antlr4 的调试器,它可以让我在代码运行时单步执行,但是在我进行的过程中确实打印出输入、弹出的项目和推送的项目,一切似乎直到“开始”

下面是我的代码示例,只有加法运算,没有布尔输入:

0 投票
2 回答
3826 浏览

c - C中的逆波兰表示法

我需要帮助来实现我的代码。这是 C 中的代码。我的任务是创建一个用于反向波兰符号的程序。这是我到目前为止所拥有的。我马上犯的一个错误是“控制可能到达非 void 函数的末尾”。错误发生后,我不确定从那里去哪里。任何帮助都会很有用。

0 投票
1 回答
139 浏览

c - C中的反向波兰表示法有错误

我需要帮助来实现我的代码。这是 C 中的代码。我的任务是创建一个用于反向波兰符号的程序。这是我到目前为止所拥有的。我看到的几个错误是“EXE_BAD_ACCESS(code=1,address=0x32)”任何帮助都会很有用。

我遇到错误的部分在这里。

和这里。