X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_textual_parser%2FcicTextualLexer.mll;h=6db492ee1745319fe06cb400f4860adfc6066112;hb=bac72fcaa876137ab7a5630e0c1badc2a627dce8;hp=1be084795a11505eb80764da93da88e1ad79d5b6;hpb=2dc0733271cd251aaa3edaece8a883fe691775ab;p=helm.git diff --git a/helm/ocaml/cic_textual_parser/cicTextualLexer.mll b/helm/ocaml/cic_textual_parser/cicTextualLexer.mll index 1be084795..6db492ee1 100644 --- a/helm/ocaml/cic_textual_parser/cicTextualLexer.mll +++ b/helm/ocaml/cic_textual_parser/cicTextualLexer.mll @@ -31,35 +31,43 @@ 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 - ) + try + (UriManager.uri_of_string (String.sub uri 0 index_sharp), + int_of_string(String.sub uri index_num (String.length uri - index_num)) - 1 + ) + with + Failure msg -> + raise (CicTextualParser0.LexerFailure "Not an inductive URI") ;; 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)) - ) + try + (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)) + ) + with + Failure msg -> + raise (CicTextualParser0.LexerFailure "Not a constructor URI") ;; } let num = ['1'-'9']['0'-'9']* | '0' let alfa = ['A'-'Z' 'a'-'z' '_' ''' '-'] let ident = alfa (alfa | num)* let baseuri = '/'(ident '/')* ident '.' -let conuri = baseuri ("con" | "var") +let conuri = baseuri "con" +let varuri = baseuri "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 } @@ -68,6 +76,7 @@ rule token = | "Type" { TYPE } | ident { ID (L.lexeme lexbuf) } | conuri { CONURI (U.uri_of_string ("cic:" ^ L.lexeme lexbuf)) } + | varuri { VARURI (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)) }