Является ли объявление структуры объявлением на базовом языке или на языке модуля? - PullRequest
0 голосов
/ 02 мая 2020

In SML грамматика

Базовый язык

dec ::=   val ⟨var⟩(,) valbind value
          fun ⟨var⟩(,) funbind function
          type typbind type
          datatype datbind ⟨withtype typbind⟩ data type
          datatype id = datatype longid data type replication
          abstype datbind ⟨withtype typbind⟩ with dec end abstract type
          exception exnbind exception
          structure strbind structure (not allowed inside expressions)
          empty

Язык интерфейса

Программы

prog ::=   dec core declaration
           functor fctbind functor declaration
           signature sigbind signature declaration
           empty
           prog1 ⟨;⟩ prog2 sequence

fctbind ::= id1 ( id2 : sig ) ⟨:⟨>⟩ sig⟩ = str ⟨and fctbind⟩    plain
id ( spec ) ⟨:⟨>⟩ sig⟩ = str ⟨and fctbind⟩ opened
sigbind    ::= id = sig ⟨and sigbind⟩ signature

Являются ли структура, сигнатура и функтор всеми понятиями на языке модулей, а не на базовом языке?

Мне было интересно, почему объявление структуры structure strbind ввести программу как объявление dec через основной язык вместо языка модуля?

Другими словами, почему объявление структуры structure strbind классифицируется как объявление dec на основном языке вместо языка модуля, в отличие от объявлений подписей signature sigbind и объявлений функторов functor fctbind?

Спасибо.

1 Ответ

1 голос
/ 03 мая 2020

Структурные объявления являются частью системы модулей. Но они допускаются внутри структурных выражений, в отличие от объявлений функтора и подписи. Ни один из них не разрешен внутри базового уровня.

Технически, в действующей спецификации языка есть три уровня объявлений: базовый de c, структура de c, верхний уровень de c. Грамматика, на которую вы смотрите, немного упрощает, чтобы избежать слишком большого дублирования.

...