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-2026 INRIA.
https://ocaml.org/manual/5.5/api/compilerlibref/Parse.html

Spec-Zone.ru

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