据我所知,有两种堆栈机器是RPN和PN,WebAssembly也是“反向波兰表示法”计算器吗?
答案 0 :(得分:5)
堆栈计算机与反向波兰表示法(RPN)或波兰表示法(PN)之间没有直接连接。您必须区分 语法 和 语义 。
您可以在 语法 中说明运算符应该在(add 3 5
)之间,(3 add 5
之间)或之后({{1他们的操作数和那些语法的语言看起来会有所不同。 stack oriented language可以使用任何前缀/中缀/后缀形式来指定参数,我猜在这个意义上它们可以被归类为PN或RPN语言。
语言的 semanctics - 评估表达式时会发生什么 - 与语言的语法分开。 WebAssembly规范使用抽象堆栈机器来指示那些语义:对于每条指令,它表示消耗了多少堆栈项以及添加了多少堆栈项。用于生成WebAssembly代码的语言可以是前缀,中缀或后缀形式。
WebAssembly文本格式使用S表达式前缀表示法。但它也可以使用中缀或后缀表示法编写。我猜选择S表达式是因为它们易于解析,并且比后缀/面向堆栈的语言更容易被编译器/语言人员遇到。