X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fcic_textual_parser%2FcicTextualLexer.mll;fp=helm%2Focaml%2Fcic_textual_parser%2FcicTextualLexer.mll;h=d35a466952206dfc9f6374a25111f5f1b1a42836;hb=0195d58340f7dbc852d380a8fee897e1c1f7da03;hp=0000000000000000000000000000000000000000;hpb=d4b17db6764be4e7f693dab982ac66a54a5920eb;p=helm.git diff --git a/helm/ocaml/cic_textual_parser/cicTextualLexer.mll b/helm/ocaml/cic_textual_parser/cicTextualLexer.mll new file mode 100644 index 000000000..d35a46695 --- /dev/null +++ b/helm/ocaml/cic_textual_parser/cicTextualLexer.mll @@ -0,0 +1,62 @@ +{ + 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 } +{}