模組 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 保證解析 OCaml 中使用的所有 Longident.t 的子類:值、建構子、簡單或擴展的模組路徑,以及類型或模組類型。

然而,此函數接受編譯器不接受的輸入,因為它們結合了函子應用和中綴運算符。在有效的 OCaml 語法中,只有值級別的識別符可以以中綴運算符結尾 Foo.( + )。此外,在值級別的識別符中,模組路徑 Foo 必須是簡單的(M.N 而不是 F(X)):函子應用只能出現在類型級別的識別符中。因此,諸如 F(X).( + ) 之類的路徑不是有效的 OCaml 識別符;但此函數會接受它。

下一個函數專門用於 Longident.t 的子類

val val_ident : Lexing.lexbuf -> Longident.t

此函數解析值的語法有效路徑。例如,xM.x(+.) 是有效的。相反地,M.AF(X).xtrue 會被拒絕。

OCaml 值的 Longident 不能包含函子應用。Longident.t 的最後一個組成部分不是大寫,但可以是運算符 A.Path.To.(.%.%.(;..)<-)

val constr_ident : Lexing.lexbuf -> Longident.t

此函數解析變體建構子的語法有效路徑。例如,AM.AM.(::) 是有效的,但 M.aF(X).A 都會被拒絕。

OCaml 變體建構子的 Longident 不能包含函子應用。Longident.t 的最後一個組成部分是大寫的,或者它可以是特殊建構子之一:truefalse()[](::)。在這些特殊建構子中,只有 (::) 可以用模組路徑作為前綴 (A.B.C.(::))。

val simple_module_path : Lexing.lexbuf -> Longident.t

此函數解析模組的語法有效路徑。例如,AM.A 是有效的,但 M.aF(X).A 都會被拒絕。

OCaml 模組的 Longident 不能包含函子應用。Longident.t 的最後一個組成部分是大寫的。

val extended_module_path : Lexing.lexbuf -> Longident.t

此函數解析擴展模組的語法有效路徑。例如,A.BF(A).B 是有效的。相反地,(.%())[] 都會被拒絕。

Longident.t 的最後一個組成部分是大寫的。

val type_ident : Lexing.lexbuf -> Longident.t

此函數解析類型或模組類型的語法有效路徑。例如,AtM.tF(X).t 是有效的。相反地,(.%())[] 都會被拒絕。

在類型和模組類型的路徑中,只有運算符和特殊建構子會被拒絕。