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