问题标签 [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 回答
236 浏览

c - 在 C 中使用 MPC 库进行解析仅返回第一个数字

我正在尝试使用 C 的 MPC(微解析器组合器)库编写一个反向波兰表示法解析器。但是,我正在使用的语法问题或其他地方的另一个问题意味着它只输出第一个数字而不是完整的 AST。

语法:

解析:

输入:

输出:

任何此类输入仅读取初始数字(例如,'54 8 /' 仅输出 54)。有任何想法吗?

0 投票
1 回答
744 浏览

python - 调车码算法中的复杂表达式导致计算器错误

我已经实现了调车场算法,如下所示:

它适用于诸如“3 + 4”之类的简单表达式,但如果我输入任何复杂的东西,就会发生这种情况:

$ ./rpn.py

-> 4 - 5 * 6 + 3 ^ 2

(错误)太多的值

在此先感谢,感谢您的帮助!

0 投票
1 回答
140 浏览

c++ - 在运行时从 RPN 构造函数可调用对象

我正在设计一个对流数据执行某些操作的程序。操作由运行时提供的 RPN(反向波兰表示法)表达式定义。数据从文件源流式传输,一次一个固定大小的部分。操作引用了一些当前输入的数据部分,例如data[1]. 该程序对所有输入部分应用相同的操作(并输出结果)。

实现一个 RPN 解析器非常容易,它对数字和算术运算进行运算以给出结果。然而,使用这样的实现将意味着为每个数据部分重新解析 RPN。

我想要实现的是以某种方式构建一个对象,该对象将基于数据基本操作的字母表保存曾经解析过的 RPN 实现,程序将提供输入数据(或填写输入),调用对象的operator()获取并输出结果。

一个人将如何实现这样一个类(a callable expression)并使用“非现代”C++(否C++11C++14)构造这样一个对象?

0 投票
1 回答
118 浏览

scala - 如何在Scala中计算具有两种不同数据类型的RPN表达式?

下面的程序假设计算一个可能有两种不同数据类型的表达式,FloatRDD。我已经从中缀表达式创建了一个 RPN,现在我正在尝试对它们执行计算。注意:我还重载了 :+,-,/,* 用于对RDD和进行计算float

我知道这段代码很抱歉。我可以让它更短,但现在我需要让它工作,然后把它刷起来!所以在 ** 部分它适用于两个数字,但我添加了 *** 以使其也接受RDD。不知道它是否适用于FloatRDDEither另外,由于使用and 显然我遇到了以下错误,Left并且Right在这里没有帮助我!

我也试过Scalaz,但它使它更复杂。

0 投票
1 回答
392 浏览

c - K 和 R 逆波兰表示法

无法弄清楚函数是如何被调用的。

Input 1 2 3 + + [Enter] //注意输入之间有空格

输出 6 //这是正确的

1 -> 当程序编译时,while 语句调用函数 getop(s)。

2 -> 在 getop() 函数中,它将调用 getch() 函数,该函数又调用 getchar() 所以在这一步它将读取 1 作为输入并返回它。

3 - >现在它检查c是否为数字,这是真的,所以它会再次调用读取空间的getch(),返回它的值,现在它检查它是否是数字,它被评估为假,然后它移动到下一个声明。

4 -> 最后 ungetch() 将被执行,将 1 保存在其缓冲区中

在这一步,我无法弄清楚输入是如何被读取的,以及 getch 和 ungetch 的用途是什么

push 和 pop 函数的定义很简单所以我就不写了

0 投票
2 回答
321 浏览

haskell - 来自 F# 的 Haskell RPN 计算器

我是 Haskell 的新手,谁能建议我如何将 F# 中的以下程序重写为 Haskell,以便尽可能地相似。

不知道如何在 Haskell 中定义堆栈数据类型。

谢谢

想要有类似的东西:

0 投票
1 回答
483 浏览

.net - 如何正确组合多个布尔后缀表达式?

我已经整理了一些代码来在后缀和中缀之间转换并再次转换回来。现在我正在尝试采用单独的后缀表达式并将它们组合起来。

我的表达式只使用布尔运算符(NOT、XOR、AND、OR)。

请注意,表达式中的数字指的是最终被评估为真或假的规则。

目前,我在组合其中没有的表达式时遇到问题。

例如,我想使用 AND 将以下内容组合成一个后缀表达式:

目前我的输出如下所示:

但是当将其转换为中缀时,我(错误地)得到了这个(注意前导 &):

我不确定这是否是用于组合表达式的代码的不足,或者是后缀到中缀转换的不足。

上述前 4 个表达式的 AND 组合的正确后缀表达式是什么?

我怀疑我的问题是我没有在转换或组合例程(或两者)中正确处理 NOT 运算符。

下面是组合代码,后面是转换代码。

组合:

转换:

更新

以下是标记答案导致的代码更改(在转换例程中):

替换这个:

有了这个:

0 投票
2 回答
95 浏览

java - 中缀到后缀转换器,不输出正确答案

我有一个学校项目,我得到了以下信息:

我一直在做这些步骤,但我的输出只在某些时候正确。我想我在与运算符的 if 语句周围的某个地方想错了。我一直在调试2天,我只是找不到解决方案。

如果有人想检查我的代码,我会非常高兴。operatorCheck 函数用于解决这个问题:“我们使用子程序 p 来指定运算符的优先级:

. 这意味着与乘法和除法相比,加法和减法的优先级较低。”

代码: http: //pastebin.com/TA7UGiGc

谢谢!

0 投票
0 回答
123 浏览

java - 运算符 ins “从 Inx 转换为 RPN(后缀)” Java。没有堆栈,只有字符串操作

我使用了一个子程序来区分运算符的优先级:

我对代码做了一些工作。我应该遵循这种转变:转变。对于 i=1 到 m 如果 c_i 是操作数:将 c_i 传输到输出。

如果 c_i 是左括号:将 c_i 推到 temp。

如果 c_i 是右括号:从 temp 中弹出元素并将它们传输到输出,直到遇到左括号。弹出左括号。

如果 c_i 是一个运算符:让顶部的临时元素为 t。将元素从 temp 弹出并传输到输出,直到:p(t) < p(c_i) 或

t 是左括号或

温度为空。

将 c_i 推到温度。

将 temp 中的剩余元素传输到输出。

问题: 1-如果数字是运算符,我基本上被卡住了如何继续。我坚持上面列表中的第 3 步和第 4 步。2-带有两个星号的部分是我不知道该怎么做的地方!

该程序应将中缀转换为后缀。从 ((3 + 5 1)=8) 14 到 3 5 1 +8 = 14。

提前致谢!

备注和符号: -pop 操作在每次应用时删除字符串的第一个元素。字符串的顶部元素是字符串的第一个元素。push 操作在字符串的开头追加一个元素。

- 如果需要,您可以使用 Integer:parseInt(s) 和 Character:getNumericV alue(c) 方法将字符串 s 和字符 c 转换为整数值。

- 不允许使用字符串以外的数据结构来操作表达式。

0 投票
1 回答
541 浏览

java - 在 Postfix (RPN) Java 中评估数学表达式。没有堆栈,只有字符串

我正在尝试使用子程序来理解以下指令:

我 = 1

而我<= n

如果 v_i 是操作数:将 v_i 推送到 tmp2。

如果 v_i 是一个运算符:将 v_i 应用于 tmp2 的前两个元素。将这些替换为 tmp2 中的结果。

i = i + 1 tmp2 的输出结果。

所以基本上我正在尝试以后缀(RPN)形式计算一些表达式。在这里,我希望每当数字是要转移到 tmp2 的操作数(数字),并且当有运算符时,它会被 tmp2 中的值替换。例如 3 5 1 +8 / 14* = 14

其他问题:无论我写什么,我都会收到“线程“主”java.lang.StringIndexOutO ....中的异常”错误。v_i 是数字或运算符或括号。

提前致谢!

我的代码: