问题标签 [postfix-notation]

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 回答
569 浏览

parsing - ANTLR 表达式列表冲突

这是简单嵌套表达式的基本结构...

如果我想创建这些表达式的列表,我可以使用以下...

这里我们使用“,”作为分隔符。

我希望能够构建一个没有任何分隔符的表达式列表。

因此,如果我有字符串4 5 2+3 1 6,我希望能够将其解释为(4) (5) ^(+ 2 3) (1) (6)

问题是两者都4具有2+3相同的第一个符号(INT),所以我有冲突。我试图弄清楚如何解决这个问题。

编辑

我几乎想通了,只是在为某种条件想出正确的重写时遇到了麻烦……

这将解析1+2+3++4+5+^(+ ^(+ 1 2) 3) (+) (+) ^(+ 4 5) (+),这就是我想要的。

现在我正在尝试完成我的重写规则,以便++1+2将其解析为(+) (+) ^(+ 1 2). 总的来说,我想要一个标记列表并找到所有中缀表达式,并将其余的保留为列表。

0 投票
3 回答
7201 浏览

java - 推送和评估堆栈

第一次发帖,请告诉我如何改进。

我正在开发一个将中缀表示法转换为后缀然后进行评估的程序。我对后缀的转换进展顺利,但我的评估遇到了一些问题。在下面的代码中,当我尝试将操作数转换为双变量“数字”时,它们不会保持它们的值(参见下面的运行时输出)。这是有问题的方法的一部分(打印语句仅用于调试)。

---在运行时--- 1

数字 = 49.000000

8

数字 = 56.000000

+

val1:56.000000

val2:49.000000

val3 = 105.000000

105.0

0 投票
4 回答
3984 浏览

algorithm - 从中缀更改为后缀有什么好处?

我今天看书了。它介绍了从中缀到后缀的算法。有什么好处?提前致谢。

0 投票
4 回答
4858 浏览

c# - 后缀计算器

用 C 语言制作一个控制台应用程序,通过利用堆栈来解决后缀表示法中的表达式,例如:

表达式:43+2* 答案:14

到目前为止我所做的:

对于 if 语句,我可以使用什么作为条件来检查 x 是否为操作数?

0 投票
1 回答
1013 浏览

c# - 逆波兰表示法:计算指数

我目前正在使用反向波兰表示法。我能够执行除指数数学之外的所有操作。我知道 C# sharps 执行指数数学运算,Math.Pow但在我的代码中使用它会给我一个错误'System.Collections.Generic.Stack<T>.Push(T)' is a 'method', which is not valid in the given contextif else您可以在最后一条语句中找到具体问题。知道如何正确纠正或创建执行指数数学的方法吗?

代码

0 投票
1 回答
5203 浏览

java - 使用堆栈了解 Java 代码中的后缀表达式求值

我得到了一段代码来破译、解释并提供任何改进建议。有人告诉我它可以工作,我们无法运行代码来测试它。我非常了解它,但只需要由某人运行它以确保我对它的理解是正确的,请在解释我不理解的内容时获得任何帮助。我一直在做大量的研究,但仍然有一些问题。

该代码用于读取仅使用乘法和加法的后缀表达式。然后评估表达式,同时将结果保存到堆栈中。然后它打印出结果。操作数被压入堆栈,然后当它读取一个运算符时,它会从堆栈中弹出顶部的 2 个操作数来执行计算并将结果存储回堆栈中。

该程序假定整数和运算符由某种字符(如空格或其他字符)分隔,但根本不检查输入的合法性。

后修复表达式示例:2 3 5 + * = 16

当谈到最后一个 if 语句和 while 循环时,我感到很困惑。

所以第一次推送一个 0-9 数字字符时,它将存储一个 #0,然后弹出该 0,将其乘以 10 并将其添加到下一个转换为 int 的数字字符(如果有的话)和将结果推回堆栈?如果是这样,为什么将 0 压入堆栈?

它不应该将第一个 0-9 编号的字符转换为 int 数据类型,将其压入堆栈然后进入 while 循环吗?

然后在 While 循环中,读取数组并继续将 0-9 编号的字符转换为 int 数据类型并将它们推入堆栈,直到读取到不同的字符?

我也看不到它在 while 循环中增加 int i 的位置,还是跳出 while 循环以前进到下一个字符?

0 投票
1 回答
1087 浏览

c - 编译我的 C 程序时出现警告(char 格式,不同类型的 arg)

我还没有学过指针,所以当有人问同样的问题时,我不知道其他答案在说什么:S ...

它是一个程序,用于执行与具有有限堆栈的后缀相同的操作。其他功能一切正常。当我在 Visual Studio 上编译和运行时,它可以正常工作,但是当我在 linux(用于测试我的程序)上运行它时,它就不起作用了。它只是给了我:“c:52:警告:char 格式,不同类型的 arg(arg 2)”。

我假设它是导致问题的 scanf 或 atoi 函数......

有没有什么方法可以通过更改几个字母来轻松修复这个程序?

0 投票
2 回答
4144 浏览

algorithm - 评估前缀表达式的算法?

我有一个前缀表达式,它只有 4 个二元运算符(+、-、*、/)。评估此类表达式的直接方法是将其转换为后缀表达式,然后评估该表达式。但是我正在寻找一种直接执行此操作而不将其转换为任何其他表达式的算法?

0 投票
4 回答
2774 浏览

java - 在 Java/c# 中以不同于 C 中的后缀增量向自身添加变量

如果我这样做,在 Java 和 C# 中:

j 是 3,即它转换为 1+2 并在加法之前增加 i。

然而,在 C 中 j 是 2,即它转换为 1+1 然后增加 i。

C 和 Java/C# 中导致表达式存在差异的内部机制是什么?

(后修复也是如此。Java/C# 变为 4,C 变为 3。)

谢谢。

顺便说一句,最初我认为这将是 C 的答案,因此对 Java/C# 结果感到困惑。

0 投票
0 回答
86 浏览

java - 堆栈实现问题/不打印某些字符

我正在尝试为后缀计算器编写中缀。我正在读取包含以下内容的文件:

(4>3)+(3=4)+2

当我运行我的代码时,我应该得到一个包含输入的后缀表示法的字符串,但是我什么也没得到。我的代码似乎没有达到最终的打印声明。同样,当我修改代码以使其至少打印时(尽管符号不正确),它只打印数字而不是运算符(+、-、& 等)。我无法弄清楚为什么会这样!我在下面的代码中标记了打印语句的位置: