我最近在浏览有关数据结构的文档时遇到了这个问题。
“ 在时间和空间消耗方面,处理后缀符号的算法可能既困难又成本高”。
可以使用前缀表示法或后缀表示法来编写算术表达式,而无需更改表达式的本质或输出。 我担心的是:
对于给定的表达式,在以前缀表示法还是前缀或后缀表示法处理表达式时,在存储空间和处理时间方面有什么明显的区别吗?
通用编程语言如何处理中缀表达式?
i。他们是按原样直接处理它们,还是
ii。他们在处理它们之前是否先将它们转换为后缀/前缀表示法?如果是,为什么不能直接使用此转换功能,以使人们能够直接运行后缀和前缀表示法?
PS: 我试图通过在谷歌浏览器的v8 JavaScript控制台上为简单的算术表达式a + b运行前缀/后缀表示法,方法是先将变量a和b分配给整数值,然后将它们作为ab +和+ ab运行,最后我分别得到了SyntaxError和ReferenceError。我想知道引擎在显示结果之前是否对表达式进行自己的转换(在解释级别)。
答案 0 :(得分:0)
1)处理后缀表达式实际上比处理后缀表达式更快,并且使用的内存更少,但是这种差异并不明显。所需的代码也简单得多,但是通常也不重要。通常,如果某人正在为一种新语言编写编译器或解释器,那么他们应该应该能够有效地处理中缀表达式,并且该语言的语法应被设计为使其用途尽可能地有用,而不是为了使其用途。尽可能容易地进行编译或解释。
2)编程语言解释器可以直接处理中缀表达式。但是,所有编译器和大多数解释器都会将表达式和语句转换为另一种形式,该形式根本不是表达式,因为它不是文本。有时,这是一个中间表示(IR),可以再次转换为机器代码。中间表示可以是基于堆栈的,SSA或其他。同样,这不是文本,因此它没有表达式,也不需要解析。
https://en.wikipedia.org/wiki/Intermediate_representation https://en.wikipedia.org/wiki/Static_single_assignment_form