Caml1999I031..Stdlib__Genlex%tokenC8@@#Kwd &stringO@@@@@*genlex.mli{  {  @@A%Ident @@@@@|  |  *@@&B#Int#intA@@@@@} + - } + 9@@6C%Float%floatD@@@@@/~ : <0~ : L@@FD&String?@@@@@= M O> M a@@TE$Char$charB@@@@@M@ b dN@ b r@@dF@@A@@@@@Qz  @@@@g@A@*make_lexerD@$listIg@@@@@@@&Stdlib&Stream!t+@@@@@@&Stream!t@@@@@@@@@@@B t tB t @@G@@M=.Stdlib__Genlex0+31kjo^.Stdlib__Stream0Q x0u8&Stdlib0yӶ~*8CamlinternalFormatBasics0cEXy] -> 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 ]} One should notice that the use of the [parser] keyword and associated notation for streams are only available through camlp4 extensions. This means that one has to preprocess its sources {i e. g.} by using the ["-pp"] command-line switch of the compilers. *genlex.mliP77n@@@@@@0@@@@@@%arrayH8@@M@A@A@@@@@@8@@@$boolE8@@%false^@@B@$true_@@H@@@A@@@@@I@A@$charB8@@@A@@@@@M@A@#exnG8@@AA@@@@@Q@@@5extension_constructorP8@@@A@@@@@U@@@%floatD8@@@A@@@@@Y@@@*floatarrayQ8@@@A@@@@@]@@@#intA8@@@A@@@@@a@A@%int32L8@@@A@@@@@e@@@%int64M8@@@A@@@@@i@@@&lazy_tN8@@O@A@A@Y@@@@@r@@@$listI8@@P@A"[]a@@@"::b@@@Q@@@ @@A@Y@@@@@@@@)nativeintK8@@@A@@@@@@@@&optionJ8@@S@A$Nonec@@@$Somed@@@@@A@Y@@@@@@@@&stringO8@@@A@@@@@@@@$unitF8@@"()`@@@@@A@@@@@@A@ .Assert_failure\ p@@@@Jm@@@@@@V@@A͠=ocaml.warn_on_literal_patternѐ@@0Division_by_zeroY @@@Aנ  @+End_of_fileX !@@@Aߠ@'FailureU )@%@@A蠰@0Invalid_argumentT 2@.@@A񠰠$#@-Match_failureR ;@:67@@\@@A21@ )Not_foundV I@@@A: 9 @-Out_of_memoryS Q@@@ABA@.Stack_overflowZ Y@@@AJI@.Sys_blocked_io[ a@@@AR"Q"@)Sys_errorW i@e@@A([+Z+@:Undefined_recursive_module] r@qmn@@c@@A6i9h9@ %bytesC8@@@A@@@@@=@@@&Stdlib@A6-ocaml.warning~ : C@@гq%float~ : Gr@@x3s@@@@u@qq  M Q  M W@@гs&string M [t@@zCu@@@@w@ss@ b f@ b j@@гu$char$@ b nv@@|Sw@@@@y@@A@us@#ux@*make_lexer*/B t x0B t @б@гϠ$list:B t ;B t @г&stringDB t EB t @@ @@@0FEEFFFFF@E@A@@@ @@@ @@б@г%&Stream!t]B t ^B t @г%$chargB t hB t @@ @@@#@@@@@@( @@гD&Stream!t|B t }B t @г-%tokenB t B t @@ @@@B@@@@@@G @@@&@@J-@@@J@@MS@@@B t 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.C  K  @@@@@@@G@,@`@VPA@@@0@e@A@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt E44E4@ H FF@ H Copyright 1996 Institut National de Recherche en Informatique et GG@ H en Automatique. HHg@ H IhhIh@ H All rights reserved. This file is distributed under the terms of JJ@ H the GNU Lesser General Public License version 2.1, with the KKN@ H special exception on linking described in the file LICENSE. LOOLO@ H MM@ H************************************************************************NN5@ * A generic lexical analyzer. This module implements a simple 'standard' lexical analyzer, presented as a function from character streams to token streams. It implements roughly the lexical conventions of OCaml, but is parameterized by the set of keywords of your language. Example: 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 ]} One should notice that the use of the [parser] keyword and associated notation for streams are only available through camlp4 extensions. This means that one has to preprocess its sources {i e. g.} by using the ["-pp"] command-line switch of the compilers.  0 ignore deprecation warning about module Stream  p p @ * The type of tokens. The lexical classes are: [Int] and [Float] 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); and [Kwd] for keywords (either identifiers or single 'special characters' such as [(], [}], etc). P <* 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.n@D)../ocamlc0-strict-sequence(-absname"-w8+a-4-9-41-42-44-45-48-70"-g+-warn-error"+A*-bin-annot)-nostdlib*-principal,-safe-string/-strict-formats"-o2stdlib__Genlex.cmi"-c"# 2/home/barsac/ci/builds/workspace/sanitizers/stdlib @0n! 2HB0&%%&&&&&@$@@8CamlinternalFormatBasics0cEXy