{ module S = String module O = Options module TP = TextParser let trim s = S.sub s 1 (S.length s - 2) let out s = if !O.debug_lexer then prerr_endline s } let SPC = ['\r' '\n' '\t' ' ']+ let QT = '"' let STR = QT [^'"']* QT let NUM = ['0'-'9']+ rule token = parse | SPC { token lexbuf } | STR as s { out s; TP.TEXT (trim s) } | NUM as s { out s; TP.NUM (int_of_string s) } | "{" { out "{"; TP.OC } | "}" { out "}"; TP.CC } | "[" { out "["; TP.OB } | "]" { out "]"; TP.CB } | "*" { out "*"; TP.SR } | "+" { out "+"; TP.PS } | "name" { out "name"; TP.NAME } | "table" { out "table"; TP.TABLE } | "class" { out "class"; TP.CSS } | "(*" { block lexbuf; token lexbuf } | eof { TP.EOF } and block = parse | "*)" { () } | "(*" { block lexbuf; block lexbuf } | STR { block lexbuf } | _ { block lexbuf }