2 module EP = RecommParser
24 let str c = String.make 1 c
26 let nl lexbuf = Lexing.new_line lexbuf
28 let is_uppercase_ascii s =
30 if i < 0 then true else
31 if 'a' <= s.[i] && s.[i] <= 'z' then false else
34 aux (String.length s - 1)
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
43 if !debug then Printf.eprintf "lezer: %s\n" s
46 if !debug then Printf.eprintf "lexer: %S\n" s
49 if !debug then Printf.eprintf "lexer: %C\n" c
59 let WF = ['A'-'Z' 'a'-'z']
60 let WB = ['A'-'Z' 'a'-'z' '_' '-']*
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 }