open Closures_parser let regexp latin_indent = [ 'a'-'z' ] [ '_' 'a'-'z' '\'' '0'-'9' ]* (* let utf8 str = Array.fold_right (fun x regexp -> Ulex.seq (Ulex.chars (Cset.singleton x)) regexp) (Utf8.to_int_array) Ulex.eps *) let regexp alpha = [ 945 ] let regexp beta = [ 946 ] let regexp rho = [ 961 ] let regexp sigma = [ 963 ] let regexp tau = [ 964 ] let regexp lambda = [ 955 ] let regexp emptyset = [ 8709 ] let regexp pi = [ 960 ] let regexp high_0 = [ 8304 ] let regexp high_1 = [ 185 ] let regexp low_0 = [ 8320 ] let regexp low_1 = [ 8321 ] let regexp low_2 = [ 8322 ] let regexp arrow = [ 8594 ] let regexp greek_indent_begin = ( "\\alpha" | alpha | "\\beta" | beta | "\\rho" | rho | "\\sigma" | sigma | "\\tau" | tau ) let regexp greek_indent_end = [ '_' '\'' '0'-'9' ]* let to_greek = function | "\\alpha" -> "α" | "\\beta" -> "β" | "\\rho" -> "ρ" | "\\sigma" -> "σ" | "\\tau" -> "τ" | id -> id let rec lex = lexer | xml_blank -> lex lexbuf | latin_indent -> begin match Ulexing.utf8_lexeme lexbuf with | "let" -> LET | "in" -> IN | "pi0" -> PI true | "pi1" -> PI false | id -> LATIN_INDENT id end | greek_indent_begin -> let indent_begin = to_greek (Ulexing.utf8_lexeme lexbuf) in let indent_end = (lexer greek_indent_end -> Ulexing.utf8_lexeme lexbuf) lexbuf in GREEK_INDENT (indent_begin ^ indent_end) | "\\(" -> BACKQUOTE_LPAREN | lambda "(" -> LAMBDA_LPAREN | ":" -> COLON | "(" -> LPAREN | ")" -> RPAREN | "," -> COMMA | "[" -> LBRACKET | "]" -> RBRACKET | arrow | "->" -> ARROW | "*" -> STAR | emptyset -> EMPTYSET | "=" -> EQUAL | pi low_1 -> PI true | pi low_2 -> PI false | "^" -> CARET | "0" -> ZERO | "1" -> ONE | high_0 -> HIGH_ZERO | high_1 -> HIGH_ONE | eof -> EOF