]> matita.cs.unibo.it Git - helm.git/blob - matita/components/binaries/mac/lexer.mll
4068879ecd1b66e8055a4278f0a515c0072c10f5
[helm.git] / matita / components / binaries / mac / lexer.mll
1 {
2    module O = Options
3    
4    let out s = if !O.debug_lexer then prerr_endline s
5 }
6
7 let OL  = "(*"
8 let CL  = "*)" 
9 let UNI = ['\x80'-'\xBF']+
10 let SPC = ['\r' '\n' '\t' ' ']+
11 let QT  = '"'
12
13 rule token = parse
14    | OL     { out "COM"; block lexbuf; token lexbuf                     }
15    | QT     { out "STR"; O.count := !O.count + str lexbuf; token lexbuf }
16    | SPC    { out "SPC"; incr O.count; token lexbuf                     }
17    | UNI    { out "UNI"; token lexbuf                                   }
18    | _      { out "CHR"; incr O.count; token lexbuf                     }
19    | eof    { out "EOF"                                                 }
20 and str = parse
21    | QT     { 2 }
22    | "\\\"" { succ (str lexbuf)                                         }
23    | UNI    { str lexbuf                                                }
24    | _      { succ (str lexbuf)                                         }
25 and block = parse
26    | CL     { ()                                                        }
27    | OL     { block lexbuf; block lexbuf                                }
28    | QT     { let _ = str lexbuf in block lexbuf                        }
29    | _      { block lexbuf                                              }