{ open CicTextualParser;; module L = Lexing;; module U = UriManager;; let indtyuri_of_uri uri = let index_sharp = String.index uri '#' in let index_num = index_sharp + 3 in (UriManager.uri_of_string (String.sub uri 0 index_sharp), int_of_string (String.sub uri index_num (String.length uri - index_num)) - 1 ) ;; let indconuri_of_uri uri = let index_sharp = String.index uri '#' in let index_div = String.rindex uri '/' in let index_con = index_div + 1 in (UriManager.uri_of_string (String.sub uri 0 index_sharp), int_of_string (String.sub uri (index_sharp + 3) (index_div - index_sharp - 3)) - 1, int_of_string (String.sub uri index_con (String.length uri - index_con)) ) ;; } let num = ['1'-'9']['0'-'9']* | '0' let ident = ['A'-'Z' 'a'-'z' '_' '-']* let baseuri = '/'(ident '/')* ident '.' let conuri = baseuri ("con" | "var") let indtyuri = baseuri "ind#1/" num let indconuri = baseuri "ind#1/" num "/" num let blanks = [' ' '\t' '\n'] rule token = parse blanks { token lexbuf } (* skip blanks *) | "alias" { ALIAS } | "Case" { CASE } | "Fix" { FIX } | "CoFix" { COFIX } | "Set" { SET } | "Prop" { PROP } | "Type" { TYPE } | ident { ID (L.lexeme lexbuf) } | conuri { CONURI (U.uri_of_string ("cic:" ^ L.lexeme lexbuf)) } | indtyuri { INDTYURI (indtyuri_of_uri ("cic:" ^ L.lexeme lexbuf)) } | indconuri { INDCONURI (indconuri_of_uri("cic:" ^ L.lexeme lexbuf)) } | num { NUM (int_of_string (L.lexeme lexbuf)) } | '?' num { META (int_of_string (L.lexeme lexbuf)) } | ":>" { CAST } | ":=" { LETIN } | '?' { IMPLICIT } | '(' { LPAREN } | ')' { RPAREN } | '{' { LCURLY } | '}' { RCURLY } | ';' { SEMICOLON } | '\\' { LAMBDA } | '!' { PROD } | ':' { COLON } | '.' { DOT } | eof { EOF } {}