Модуль 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