代码之家  ›  专栏  ›  技术社区  ›  Jason Yu

WebAssembly是“反向波兰符号”计算器吗?

  •  2
  • Jason Yu  · 技术社区  · 7 年前

    正如我所知,有两种堆栈机器,即RPN和PN,那么WebAssembly是“反向波兰符号”计算器吗?

    1 回复  |  直到 7 年前
        1
  •  5
  •   Daniel Näslund    7 年前

    堆栈机器和反向波兰符号(RPN)或波兰符号(PN)之间没有直接联系。您必须区分 语法 语义学 .

    你可以用你的 语法 操作员应该在( add 3 5 ),介于( 3 add 5 )或之后( 添加3 5 )它们的操作数和这些语法的语言看起来会有所不同。A. stack oriented language 可以使用任何前缀/中缀/后缀形式来指定参数,我想从这个意义上讲,它们可以归类为PN或RPN语言。

    这个 语义学 语言的语法-表达式被计算时发生的事情-与语言的语法分离。WebAssembly规范使用抽象堆栈机器来规定这些语义:对于每一条指令,它表示消耗了多少堆栈项,又添加了多少堆栈项。用于生成WebAssembly代码的语言可以是前缀、中缀或后缀形式。

    WebAssembly文本格式使用S表达式前缀表示法。但它也可以使用中缀或后缀符号来编写。我猜选择S表达式是因为它们易于解析,而且编译器/语言人员比postfix/stackoriented语言更常见。