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