【问题标题】:SML '97: what is exactly the standard syntax?SML '97:标准语法到底是什么?
【发布时间】:2014-02-08 22:23:09
【问题描述】:

当我想检查有关函子声明的语法时,我提出了这个问题。我遇到了两个相互矛盾的语法定义,而 Standard 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

我把它读作“一个函子可能有多个参数,可以说是匹配一个签名”。

问题

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

【问题讨论】:

    标签: standards sml


    【解决方案1】:

    定义的第 2 章和第 3 章只给出了语言的基本语法。这通过附录 A 中定义的“派生形式”(即语法糖)进行了扩展,其中包括 funid (spec) 形式(funid (X : sig spec end) 的缩写,X 在 RHS 上打开)。

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

    【讨论】:

    • 好的,谢谢。我不怀疑函子也有派生形式。
    • 是的,可能是因为奇怪的是,附录 B 包含核心语言的“完整语法”,但本书没有包含模块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2021-04-26
    • 2015-10-10
    • 1970-01-01
    相关资源
    最近更新 更多