]> matita.cs.unibo.it Git - helm.git/blob - helm/software/components/binaries/transcript/v8Lexer.mll
0ef38a919b55604548d120eaf607004d2d961e52
[helm.git] / helm / software / components / binaries / transcript / v8Lexer.mll
1 {
2    module O = Options
3    module P = V8Parser
4    
5    let out t s = if !O.verbose_lexer then prerr_endline (t ^ " " ^ s)
6
7    let check s =
8       let c = Char.code s.[0] in
9       if c <= 127 then s else 
10       let escaped = Printf.sprintf "\\%3u\\" c in
11       begin 
12          if !O.verbose_escape then Printf.eprintf "ESCAPED: %s %s\n" s escaped;
13          escaped 
14       end
15 }
16
17 let QT    = '"'
18 let SPC   = [' ' '\t' '\n' '\r']+
19 let ALPHA = ['A'-'Z' 'a'-'z' '_']
20 let FIG   = ['0'-'9']
21 let ID    = ALPHA (ALPHA | FIG | "\'")*
22 let RAWID = QT [^ '"']* QT
23 let NUM   = "-"? FIG+
24             
25 rule token = parse
26    | "Let"         { let s = Lexing.lexeme lexbuf in out "LET" s; P.LET s    }
27    | "Remark"      { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s      }
28    | "Lemma"       { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s      }
29    | "Theorem"     { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s      }
30    | "Definition"  { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s      }
31    | "Fixpoint"    { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s      }
32    | "CoFixpoint"  { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s      }
33    | "Qed"         { let s = Lexing.lexeme lexbuf in out "QED" s; P.QED s    }
34    | "Save"        { let s = Lexing.lexeme lexbuf in out "QED" s; P.QED s    }
35    | "Defined"     { let s = Lexing.lexeme lexbuf in out "QED" s; P.QED s    }
36    | "Proof"       { let s = Lexing.lexeme lexbuf in out "PRF" s; P.PROOF s  }
37    | "Variable"    { let s = Lexing.lexeme lexbuf in out "VAR" s; P.VAR s    }
38    | "Variables"   { let s = Lexing.lexeme lexbuf in out "VAR" s; P.VAR s    }
39    | "Hypothesis"  { let s = Lexing.lexeme lexbuf in out "VAR" s; P.VAR s    } 
40    | "Hypotheses"  { let s = Lexing.lexeme lexbuf in out "VAR" s; P.VAR s    } 
41    | "Axiom"       { let s = Lexing.lexeme lexbuf in out "AX" s; P.AX s      }
42    | "Parameter"   { let s = Lexing.lexeme lexbuf in out "AX" s; P.AX s      }
43    | "Parameters"  { let s = Lexing.lexeme lexbuf in out "AX" s; P.AX s      }
44    | "Inductive"   { let s = Lexing.lexeme lexbuf in out "IND" s; P.IND s    }
45    | "CoInductive" { let s = Lexing.lexeme lexbuf in out "IND" s; P.IND s    }
46    | "Record"      { let s = Lexing.lexeme lexbuf in out "IND" s; P.IND s    }
47    | "Scheme"      { let s = Lexing.lexeme lexbuf in out "GEN" s; P.GEN s    }
48    | "Section"     { let s = Lexing.lexeme lexbuf in out "SEC" s; P.SEC s    }
49    | "End"         { let s = Lexing.lexeme lexbuf in out "END" s; P.END s    }
50    | "Hint"        { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s    }
51    | "Hints"       { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s    }
52    | "Unset"       { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s    }
53    | "Print"       { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s    }
54    | "Opaque"      { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s    }
55    | "Transparent" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s    }
56    | "Ltac"        { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s    }
57    | "Tactic"      { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s    }
58    | "Declare"     { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s    }
59    | "Require"     { let s = Lexing.lexeme lexbuf in out "REQ" s; P.REQ s    }
60    | "Export"      { let s = Lexing.lexeme lexbuf in out "XP" s; P.XP s      }
61    | "Import"      { let s = Lexing.lexeme lexbuf in out "XP" s; P.XP s      }
62    | "Load"        { let s = Lexing.lexeme lexbuf in out "LOAD" s; P.LOAD s  }
63    | "Set"         { let s = Lexing.lexeme lexbuf in out "SET" s; P.SET s    }
64    | "Reset"       { let s = Lexing.lexeme lexbuf in out "SET" s; P.SET s    }
65    | "Implicit"    { let s = Lexing.lexeme lexbuf in out "SET" s; P.SET s    }
66    | "Delimit"     { let s = Lexing.lexeme lexbuf in out "SET" s; P.SET s    }
67    | "Bind"        { let s = Lexing.lexeme lexbuf in out "SET" s; P.SET s    }
68    | "Arguments"   { let s = Lexing.lexeme lexbuf in out "SET" s; P.SET s    }
69    | "Open"        { let s = Lexing.lexeme lexbuf in out "SET" s; P.SET s    }
70    | "V7only"      { let s = Lexing.lexeme lexbuf in out "SET" s; P.SET s    }
71    | "Notation"    { let s = Lexing.lexeme lexbuf in out "NOT" s; P.NOT s    }
72    | "Reserved"    { let s = Lexing.lexeme lexbuf in out "NOT" s; P.NOT s    }
73    | "Infix"       { let s = Lexing.lexeme lexbuf in out "NOT" s; P.NOT s    }
74    | "Grammar"     { let s = Lexing.lexeme lexbuf in out "NOT" s; P.NOT s    }
75    | "Syntax"      { let s = Lexing.lexeme lexbuf in out "NOT" s; P.NOT s    }
76    | "Add" SPC "Morphism"
77       { let s = Lexing.lexeme lexbuf in out "MOR" s; P.MOR s }
78    | "Add"         { let s = Lexing.lexeme lexbuf in out "NOT" s; P.NOT s    }
79    | "Identity"    { let s = Lexing.lexeme lexbuf in out "ID" s; P.ID s      }
80    | "Coercion"    { let s = Lexing.lexeme lexbuf in out "CO" s; P.COERC s   }
81    | "let"         { let s = Lexing.lexeme lexbuf in out "ABBR" s; P.ABBR s  }
82    | "in"          { let s = Lexing.lexeme lexbuf in out "IN" s; P.IN s      }
83    | "with"        { let s = Lexing.lexeme lexbuf in out "WITH" s; P.WITH s  }
84    | SPC           { let s = Lexing.lexeme lexbuf in out "SPC" s; P.SPC s    }
85    | ID            { let s = Lexing.lexeme lexbuf in out "ID" s; P.IDENT s   }
86    | RAWID         { let s = Lexing.lexeme lexbuf in out "STR" s; P.STR s    }
87    | NUM           { let s = Lexing.lexeme lexbuf in out "INT" s; P.INT s    }
88    | ":="          { let s = Lexing.lexeme lexbuf in out "DEF" s; P.DEF s    }
89    | ":>"          { let s = Lexing.lexeme lexbuf in out "COE" s; P.COE s    }
90    | "." ID        { let s = Lexing.lexeme lexbuf in out "AC" s; P.AC s      }
91    | "." SPC       { let s = Lexing.lexeme lexbuf in out "FS" s; P.FS s      }
92    | "." eof       { let s = Lexing.lexeme lexbuf in out "FS" s; P.FS s      }
93    | "(*"          { let s = Lexing.lexeme lexbuf in out "OQ" s; P.OQ s      }
94    | "*)"          { let s = Lexing.lexeme lexbuf in out "CQ" s; P.CQ s      }
95    | "("           { let s = Lexing.lexeme lexbuf in out "OP" s; P.OP s      }
96    | ")"           { let s = Lexing.lexeme lexbuf in out "CP" s; P.CP s      }
97    | "{"           { let s = Lexing.lexeme lexbuf in out "OC" s; P.OC s      }
98    | "}"           { let s = Lexing.lexeme lexbuf in out "CC" s; P.CC s      }
99    | ";"           { let s = Lexing.lexeme lexbuf in out "SC" s; P.SC s      }
100    | ":"           { let s = Lexing.lexeme lexbuf in out "CN" s; P.CN s      }
101    | ","           { let s = Lexing.lexeme lexbuf in out "CM" s; P.CM s      }
102    | _             
103       { let s = check (Lexing.lexeme lexbuf) in out "SPEC" s; P.EXTRA s }
104    | eof           { let s = Lexing.lexeme lexbuf in out "EOF" s; P.EOF      }