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
此函數解析值的語法有效路徑。例如,x
、M.x
和 (+.)
是有效的。相反地,M.A
、F(X).x
和 true
會被拒絕。
OCaml 值的 Longident 不能包含函子應用。Longident.t
的最後一個組成部分不是大寫,但可以是運算符 A.Path.To.(.%.%.(;..)<-)
val constr_ident : Lexing.lexbuf -> Longident.t
此函數解析變體建構子的語法有效路徑。例如,A
、M.A
和 M.(::)
是有效的,但 M.a
和 F(X).A
都會被拒絕。
OCaml 變體建構子的 Longident 不能包含函子應用。Longident.t
的最後一個組成部分是大寫的,或者它可以是特殊建構子之一:true
、false
、()
、[]
、(::)
。在這些特殊建構子中,只有 (::)
可以用模組路徑作為前綴 (A.B.C.(::)
)。
val simple_module_path : Lexing.lexbuf -> Longident.t
此函數解析模組的語法有效路徑。例如,A
和 M.A
是有效的,但 M.a
和 F(X).A
都會被拒絕。
OCaml 模組的 Longident 不能包含函子應用。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
是有效的。相反地,(.%())
或 []
都會被拒絕。
在類型和模組類型的路徑中,只有運算符和特殊建構子會被拒絕。