Spec-Zone.ru › OCaml

Модуль Parse

module Parse: sig .. end

Точки входа в парсер

Предупреждение: этот модуль нестабилен и является частью compiler-libs.

val implementation : Lexing.lexbuf -> Parsetree.structure
val interface : Lexing.lexbuf -> Parsetree.signature
val toplevel_phrase : Lexing.lexbuf -> Parsetree.toplevel_phrase
val use_file : Lexing.lexbuf -> Parsetree.toplevel_phrase list
val core_type : Lexing.lexbuf -> Parsetree.core_type
val expression : Lexing.lexbuf -> Parsetree.expression
val pattern : Lexing.lexbuf -> Parsetree.pattern
val module_type : Lexing.lexbuf -> Parsetree.module_type
val module_expr : Lexing.lexbuf -> Parsetree.module_expr

Ниже приведены функции, которые можно использовать для безопасного разбора Longident.

val longident : Lexing.lexbuf -> Longident.t

Функция longident гарантированно анализирует все подклассы Longident.t, используемые в OCaml: значения, конструкторы, простые или расширенные пути модулей, а также типы или типы модулей.

Однако эта функция принимает входные данные, которые не принимаются компилятором, потому что они комбинируют применения фанкторов и инфиксные операторы. В допустимом синтаксисе OCaml только идентификаторы на уровне значений могут оканчиваться инфиксными операторами Foo.( + ). Кроме того, в идентификаторах на уровне значений путь модуля Foo должен быть простым (M.N вместо F(X)): применения фанкторов могут появляться только в идентификаторах на уровне типов. Вследствие этого, такой путь, как F(X).( + ) не является допустимым идентификатором OCaml; но он принимается этой функцией.

Следующие функции специализированы для подкласса Longident.t

val val_ident : Lexing.lexbuf -> Longident.t

Эта функция анализирует синтаксически допустимый путь для значения. Например, x, M.x, и (+.) допустимы. Напротив, M.A, F(X).x, и true отклоняются.

Longident для значений OCaml не может содержать применение фанкторов. Последний компонент Longident.t не записывается с большой буквы, но может быть оператором A.Path.To.(.%.%.(;..)<-)

val constr_ident : Lexing.lexbuf -> Longident.t

Эта функция анализирует синтаксически допустимый путь для конструктора варианта. Например, A, M.A и M.(::) допустимы, но оба M.a и F(X).A отклоняются.

Longident для конструкторов вариантов OCaml не может содержать применение фанкторов. Последний компонент Longident.t записывается с большой буквы, или это может быть один из специальных конструкторов: true,false,(),[],(::). Из этих специальных конструкторов только (::) может иметь в префиксе путь модуля (A.B.C.(::)).

val simple_module_path : Lexing.lexbuf -> Longident.t

Эта функция анализирует синтаксически допустимый путь для модуля. Например, A, и M.A допустимы, но оба M.a и F(X).A отклоняются.

Longident для модулей OCaml не может содержать применения фанкторов. Последний компонент Longident.t записывается с большой буквы.

val extended_module_path : Lexing.lexbuf -> Longident.t

Эта функция анализирует синтаксически допустимый путь для расширенного модуля. Например, A.B и F(A).B допустимы. Напротив, (.%()) или [] отклоняются.

Последний компонент Longident.t записывается с большой буквы.

val type_ident : Lexing.lexbuf -> Longident.t

Эта функция анализирует синтаксически допустимый путь для типа или типа модуля. Например, A, t, M.t и F(X).t допустимы. Напротив, (.%()) или [] отклоняются.

В путях для типов и типов модулей отклоняются только операторы и специальные конструкторы.

© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/compilerlibref/Parse.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API