]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/lambdadelta/bin/recomm/recommLexer.mll
21cca9c6c21529ea6a4a3b0d5f7e1ad387496d53
[helm.git] / matita / matita / contribs / lambdadelta / bin / recomm / recommLexer.mll
1 {
2   module EP = RecommParser
3
4   let debug = ref false
5
6   let keys = [|
7     "Note";
8   |]
9
10   let heads = [|
11     "Advanved";
12     "Basic";
13     "Constructions";
14     "Forward";
15     "Destructions";
16     "Eliminations";
17     "Eliminators";
18     "Inversion";
19     "Inversions";
20     "Main";
21     "Properties";
22   |]
23
24   let str c = String.make 1 c
25
26   let nl lexbuf = Lexing.new_line lexbuf
27
28   let is_uppercase_ascii s =
29     let rec aux i =
30        if i < 0 then true else
31        if 'a' <= s.[i] && s.[i] <= 'z' then false else
32        aux (pred i)  
33     in
34     aux (String.length s - 1)
35
36   let disambiguate_word s =
37     if is_uppercase_ascii s then EP.CW s else
38     if Array.mem s keys then EP.KW s else
39     if Array.mem s heads then EP.HW s else
40     EP.SW s
41
42   let log s =
43     if !debug then Printf.eprintf "lezer: %s\n" s
44
45   let log_s s =
46     if !debug then Printf.eprintf "lexer: %S\n" s
47
48   let log_c c =
49     if !debug then Printf.eprintf "lexer: %C\n" c
50 }
51
52 let CR = "\r"
53 let SP = " "
54 let NL = "\n"
55 let SR = "*"
56 let OP = "(*" SP*
57 let CP = SR* "*)"  
58 let PP = CP SP* OP
59 let WF = ['A'-'Z' 'a'-'z']
60 let WB = ['A'-'Z' 'a'-'z' '_' '-']*
61 let WD = WF WB
62
63 rule src_token = parse
64   | CR       { src_token lexbuf                   } 
65   | NL  as c { log "NL"; nl lexbuf; EP.NL (str c) }
66   | SP+ as s { log "SP"; EP.SP s                  }
67   | PP  as s { log "PP"; EP.PP s                  }
68   | OP  as s { log "OP"; EP.OP s                  }
69   | CP  as s { log "CP"; EP.CP s                  }
70   | SR  as c { log "SR"; EP.SR (str c)            }
71   | WD  as s { log_s s ; disambiguate_word s      }
72   | _   as c { log_c c ; EP.OT (str c)            }
73   | eof      { log "EF"; EP.EF                    }