Genlex(3)
π NAME π
Genlex(3) from the OCaml library is literally your generic lexical analyzer bestie β the whole vibe is A generic lexical analyzer. Periodt. π
π§ Module π§
Module Genlex
π Documentation π
Module Genlex : sig end
Okay so this module is a generic lexical analyzer β like, a simple βstandardβ one, presented as a function from character streams to token streams. It implements roughly the lexical conventions of OCaml, but itβs parameterized by the set of keywords of your language. Slay. β¨
Example time, bestie: a lexer suitable for a desk calculator is obtained by
let lexer = make_lexer ["+"; "-"; "*"; "/"; "let"; "="; "("; ")"]
The associated parser would be a function from token stream to, for instance, int, and would have rules such as:
let rec parse_expr = parser
| [< n1 = parse_atom; n2 = parse_remainder n1 >] -> n2
and parse_atom = parser
| [< 'Int n >] -> n
| [< 'Kwd "("; n = parse_expr; 'Kwd ")" >] -> n
and parse_remainder n1 = parser
| [< 'Kwd "+"; n2 = parse_expr >] -> n1 + n2
| [< >] -> n1
π«Ά Heads up, bestie: one should notice that the use of theparserkeyword and associated notation for streams are only available throughcamlp4extensions. This means that one has to preprocess its sources e. g. by using the"-pp"command-line switch of the compilers. Iykyk. π
π The token type π
type token =
| Kwd of string
| Ident of string
| Int of int
| Float of float
| String of string
| Char of char
Thatβs the type of tokens. The lexical classes are:
IntandFloatβ for integer and floating-point numbers.Stringβ for string literals, enclosed in double quotes.Charβ for character literals, enclosed in single quotes.Identβ for identifiers (either sequences of letters, digits, underscores and quotes, or sequences of βoperator charactersβ such as+,*, etc).Kwdβ for keywords (either identifiers or single βspecial charactersβ such as(,}, etc).
π
make_lexer π
val make_lexer : string list -> char Stream.t -> token Stream.t
Construct the lexer function. The first argument is the list of keywords. An identifier s is returned as Kwd s if s belongs to this list, and as Ident s otherwise. A special character s is returned as Kwd s if s belongs to this list, and cause a lexical error (exception Stream.Error with the offending lexeme as its parameter) otherwise.
Blanks and newlines are skipped. Comments delimited by (* and *) are skipped as well, and can be nested. A Stream.Failure exception is raised if end of stream is unexpectedly reached. No cap. π
mwah π β this pageβs footer says OCamldoc, dated 2026-09-24, and itβs the Genlex(3) manual page. Byeee π«Ά
π¦ where this page comes from
- alpine 3.24: ocaml-doc 4.14.4-r0 Β· LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms