4 let out t s = () (* prerr_endline (t ^ " " ^ s) *)
8 let SPC = [' ' '\t' '\n' '\r']+
9 let ALPHA = ['A'-'Z' 'a'-'z' '_']
11 let ID = ALPHA (ALPHA | FIG | "\'")*
12 let RAWID = QT [^ '"']* QT
16 | "Let" { let s = Lexing.lexeme lexbuf in out "LET" s; P.LET s }
17 | "Remark" { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s }
18 | "Lemma" { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s }
19 | "Theorem" { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s }
20 | "Definition" { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s }
21 | "Fixpoint" { let s = Lexing.lexeme lexbuf in out "TH" s; P.TH s }
22 | "Qed" { let s = Lexing.lexeme lexbuf in out "QED" s; P.QED s }
23 | "Defined" { let s = Lexing.lexeme lexbuf in out "QED" s; P.QED s }
24 | "Proof" { let s = Lexing.lexeme lexbuf in out "PRF" s; P.PROOF s }
25 | "Variable" { let s = Lexing.lexeme lexbuf in out "VAR" s; P.VAR s }
26 | "Variables" { let s = Lexing.lexeme lexbuf in out "VAR" s; P.VAR s }
27 | "Hypothesis" { let s = Lexing.lexeme lexbuf in out "VAR" s; P.VAR s }
28 | "Hypotheses" { let s = Lexing.lexeme lexbuf in out "VAR" s; P.VAR s }
29 | "Axiom" { let s = Lexing.lexeme lexbuf in out "AX" s; P.AX s }
30 | "Inductive" { let s = Lexing.lexeme lexbuf in out "IND" s; P.IND s }
31 | "Record" { let s = Lexing.lexeme lexbuf in out "IND" s; P.IND s }
32 | "Section" { let s = Lexing.lexeme lexbuf in out "SEC" s; P.SEC s }
33 | "End" { let s = Lexing.lexeme lexbuf in out "END" s; P.END s }
34 | "Hint" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
35 | "Unset" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
36 | "Print" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
37 | "Opaque" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
38 | "Transparent" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
39 | "Ltac" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
40 | "Tactic" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
41 | "Declare" { let s = Lexing.lexeme lexbuf in out "UNX" s; P.UNX s }
42 | "Require" { let s = Lexing.lexeme lexbuf in out "REQ" s; P.REQ s }
43 | "Export" { let s = Lexing.lexeme lexbuf in out "XP" s; P.XP s }
44 | "Import" { let s = Lexing.lexeme lexbuf in out "IP" s; P.IP s }
45 | "Load" { let s = Lexing.lexeme lexbuf in out "LOAD" s; P.LOAD s }
46 | "Set" { let s = Lexing.lexeme lexbuf in out "SET" s; P.SET s }
47 | "Implicit" { let s = Lexing.lexeme lexbuf in out "SET" s; P.SET s }
48 | "Notation" { let s = Lexing.lexeme lexbuf in out "NOT" s; P.NOT s }
49 | "Infix" { let s = Lexing.lexeme lexbuf in out "NOT" s; P.NOT s }
50 | "Identity" { let s = Lexing.lexeme lexbuf in out "ID" s; P.ID s }
51 | "Coercion" { let s = Lexing.lexeme lexbuf in out "CO" s; P.COERC s }
52 | "let" { let s = Lexing.lexeme lexbuf in out "ABBR" s; P.ABBR s }
53 | "in" { let s = Lexing.lexeme lexbuf in out "IN" s; P.IN s }
54 | SPC { let s = Lexing.lexeme lexbuf in out "SPC" s; P.SPC s }
55 | ID { let s = Lexing.lexeme lexbuf in out "ID" s; P.IDENT s }
56 | RAWID { let s = Lexing.lexeme lexbuf in out "STR" s; P.STR s }
57 | NUM { let s = Lexing.lexeme lexbuf in out "INT" s; P.INT s }
58 | ":=" { let s = Lexing.lexeme lexbuf in out "DEF" s; P.DEF s }
59 | ":>" { let s = Lexing.lexeme lexbuf in out "COE" s; P.COE s }
60 | "." ID { let s = Lexing.lexeme lexbuf in out "AC" s; P.AC s }
61 | "." SPC { let s = Lexing.lexeme lexbuf in out "FS" s; P.FS s }
62 | "." eof { let s = Lexing.lexeme lexbuf in out "FS" s; P.FS s }
63 | "(*" { let s = Lexing.lexeme lexbuf in out "OQ" s; P.OQ s }
64 | "*)" { let s = Lexing.lexeme lexbuf in out "CQ" s; P.CQ s }
65 | "(" { let s = Lexing.lexeme lexbuf in out "OP" s; P.OP s }
66 | ")" { let s = Lexing.lexeme lexbuf in out "CP" s; P.CP s }
67 | "{" { let s = Lexing.lexeme lexbuf in out "OC" s; P.OC s }
68 | "}" { let s = Lexing.lexeme lexbuf in out "CC" s; P.CC s }
69 | ";" { let s = Lexing.lexeme lexbuf in out "SC" s; P.SC s }
70 | ":" { let s = Lexing.lexeme lexbuf in out "CN" s; P.CN s }
71 | _ { let s = Lexing.lexeme lexbuf in out "SPEC" s; P.EXTRA s }
72 | eof { let s = Lexing.lexeme lexbuf in out "EOF" s; P.EOF }