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
是有效的。相反,(.%())
或 []
均被拒绝。
在类型和模块类型的路径中,只拒绝运算符和特殊构造函数。