反向抛光符号的意义是什么?


21

我向18岁的孩子教授计算机。在向他们解释了反波兰符号后,有人问为什么它足够重要才能参加公开考试。我解释了70年代计算器的历史意义,但这未能真正解决这个问题。RPN也有并发的实际或理论应用。


3
我已经进行了将近十年的编程工作,并且已经完成了CS方面的硕士学位,但是我认为我从未见过或在任何严重的情况下使用过反向抛光。您确定它相关的,尤其是对于教学生吗?
拉斐尔

这是使用后缀表示法的正则表达式引擎的实现:swtch.com/~rsc/regexp/regexp1.html#thompson。肯·汤普森(Ken Thompson)在他的第一个实现中也使用了它。另外,它是一种在运行时评估表达式的流行技术(如果正在构建编译器)。
saadtaame 2012年

在RPN中,您无需使用方括号即可写下任何表达式。
Seg Fault

3
RPN上的维基百科文章涵盖了很多内容。逻辑文本在解释可以从证明中省略为纯“语法糖”的内容时,有时会用波兰语表示法(因为它没有括号)。但是,RPN很重要,因为它与堆栈紧密相关。了解堆栈对于交互式调试很重要,因为著名的“回溯”通常只是堆栈转储。纯粹的功能语言仍在努力提供与堆栈转储相当的功能来进行调试,即使这样它们也将提供更多详细的信息(如果可以表示的话)。
Thomas Klimpel 2012年

我必须部分撤回我以前的评论。我已经看到有人使用后缀表示法来对树进行字符串转储。阅读起来很恐怖,但是编写起来却很容易。因此,在非常特定的用例中,RP可能有用,但是我不确定这是否适用于教育(总体而言)。我猜您可以使用它来显示语法不是固定的。
拉斐尔

Answers:


9

我已经多次使用RPN进行快速原型制作,例如必须读取和解释用户提供的数学表达式的程序。

常规的数学符号至少需要一个递归解析器(例如括号,运算符顺序等),而RPN解析器基本上是具有switch-like语句的堆栈。我想正是这种简单性与表达能力的结合促使惠普最初使用它。

但是,这通常是为了快速制作原型和方便起见。我永远不会假设用户可以或想要了解RPN。


8

只是为了扩展前面的答案/评论:请不要忘记RPN仍然存在并且形式良好 ...实际上,它目前已在Java虚拟机等堆栈计算机中使用。

来自维基百科:“ ...堆栈计算机使用寄存器实现堆栈。算术逻辑单元(ALU)的操作数始终是堆栈的顶部两个寄存器,并且ALU的结果存储在堆栈的顶部寄存器中。“堆栈机”通常是指使用后进先出堆栈在执行单个程序语句时保存短暂的临时值的计算机,指令集使用后缀反向波兰表示法操作执行大多数ALU操作,这些操作包括仅适用于表达式堆栈,不适用于数据寄存器或主存储单元...”

这种方法的优点/缺点也维基百科的文章中介绍


嗯,看着字节码,您本身看不到RPN。当然,这些指令以“后缀”顺序显示,但在算术中看起来不像RPN,其原因很清楚。注册机必须以相同的方式进行:加载值,然后合并。
拉斐尔

5

Forth和PostScript(因此IIRC以PostScript的子集的二进制编码形式开始的PDF)是HP袖珍计算器所熟知的postfix语言。

然后,在简单的编译器中作为中间表示也是相对普遍的选择。

简单的VM往往也具有后缀“机器”语言。


附带地,短语“简单VM”包括JVM。RPN有趣的是它是最简单的有用的堆栈计算机。堆栈机是真正有趣,有用和相关的东西。
别名2014年

4

关于计算器:请参阅什么是RPN?

  • 好处:RPN节省时间和按键。在进行计算时,请避免使用和跟踪括号。该过程类似于您在纸上学习数学的方式。

  • 您可以在执行计算时看到中间结果,而不仅仅是最后的答案。这对于学习逻辑非常有帮助。数学老师正在使用此功能来提高学生对数学的理解。

  • 中间结果使用户可以更轻松地检查答案并更正错误。遵循计算流程更容易。用户定义操作员的优先级。

  • RPN是合乎逻辑的,因为用户首先给出数字,然后告诉该怎么做。


3

顾名思义,反向波兰符号或直接波兰符号是符号。它们是表示事物的语法,如果考虑内存需求,它们实际上是有效的语法。它们代表的是根树,可以是公式树,抽象语法树(AST)和其他类型的实体,任何人都有权享有绝对无用的宪法权利。

有时,必须将此类实体存储在文件中。例如,有些系统可能将程序编辑或转换为AST,并且可能需要存储此类表示。波兰表格很方便。它对人类(尤其是大树)的可读性有限,但是对于机器而言却是非常方便的表示形式。

它的另一个方面是,我相信对树木及其基本用途和表示以及相关设备(堆栈)的研究在教学上是有用的,可作为对更高级概念(语法,解析,逻辑,语言学)的未来研究的介绍。 ,...)。

它还具有在概念上相当简单并且易于在纸上进行实验的优点。这也是讨论语法以及语法是表示形式的事实的好时机,表示形式可能会有所不同,而表示相同的事物,并且可以根据需要满足使用不同的表示形式(空间优化,轻松修改,可读性,计算机可读性,...)。

但是令我惊讶的是,这个问题及其答案只考虑了RPN,而没有人考虑直接使用波兰语表示法。

学生们问的当然很棒。但是回答这样的问题总是有不同的方面。它对知识本身有用吗?我认为是这样。它作为教学活动有用吗?我认为是的,但这在很大程度上取决于目标受众,只有老师才能评估它能够理解的内容。了解一些概念性问题是否有用?我认为是的,但这又取决于老师对可以向学生解释哪些概念的评估。


2

你的学生是绝对正确的。波兰语反向符号在计算机科学中的意义还不足以值得在其上花费非常有限的课堂时间。取而代之的是,您可以教过许多其他奇妙的概念性想法,并带有深刻的智力想法:稳定的婚姻,切蛋糕,对角线化和无法确定停顿问题,交互式证明和零知识证明等,等等,是的,所有这些都可以让18岁的儿童使用。

而且,我确实希望您称赞您的学生勇于提出问题!他们不得不站在窗台上提出这个问题。他们对您提出这个问题感到很舒服,这很适合您的教学风格。


1
波兰语表示法几乎不需要时间来教授。鉴于大容量存储通常是顺序访问而不是随机访问,因此标准结构(例如树)的线性化也很重要。您可能还希望有效地存储它,或者了解如何全部或部分检索它。它连接树木,树木漫步,嵌入式结构和下推式建筑。抽象地讲,它讲述了如何对数据进行Gödel编码。与LR和LL解析以及其他垃圾技术所代表的时间和精力的巨大浪费相比,我什至要说花在波兰记法上的时间是花在时间上的。
babou 2015年

“在计算机科学中不够重要” –令人难以置信的是
Dmitri Zaitsev

1

波兰语反向表示法是我教育中了解语法树和一般树数据结构的一个很好的工具。如果任何人对使用Lisp语言的任何系列(Clojure,emacs-lisp,scheme等)进行编程完全有兴趣,这也很有用。


为什么选择Lisp和Scheme?它们充满了括号。
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.