SML '97:标准语法究竟是什么?

时间:2014-02-08 13:28:18

标签: standards sml

当我想检查一些关于仿函数声明的语法时,我遇到了这个问题。我提出了两个相互矛盾的语法定义,而标准ML '97的语法,正如其名称所暗示的那样,应该是标准的一部分,在“标准ML的定义 - 修订”中定义。

从书中

“The definition of Standard ML — Revised”, by R. Milner, page 14, on Google Books说:

fundec ::= functor funbinf
funbind ::= funid (strid : sigexp) = strexp <and funbind>

我把它读成“一个仿函数只有一个参数,不能说与签名相符”。

来自另一个可靠的来源

“Standard ML syntax summary”, by L. Paulson, page 2, on PDF说(架构大致使用与SML '97定义中相同的表示法重新表达):

FunctorDeclaration ::= functor FunctorBinding <and FunctorBinding>
FunctorBinding ::= Ident ( FunctorArguments ) : Signature = Structure
FunctorArguments ::= Ident : Signature | Specification

我把它读作“一个仿函数可能会得到多个参数,可以说是与签名匹配”。

问题

这两个文件说的不同,所以我很困惑。标准ML '97的真正定义是什么?或者我只是错过阅读标准定义?

1 个答案:

答案 0 :(得分:2)

定义的第2章和第3章仅提供该语言的简单语法。这是通过附录A中定义的“派生形式”(即语法糖)进行扩展,其中包括funid (spec)形式(funid (X : sig spec end)的缩写形式,其中X在RHS上打开)

请参阅here以获取完整的SML语法,包括所有派生形式。