}
let SPC = [' ' '\t' '\n']+
-let ALPHA = ['A'-'Z' 'a'-'z']
+let ALPHA = ['A'-'Z' 'a'-'z' '_']
let NUM = ['0'-'9']
let IDEN = ALPHA (NUM | ALPHA)*
let QSTR = [^ '"' '\\']+
rule comm_token = parse
- | "*)" { query_token lexbuf }
- | [^ '*']* { comm_token lexbuf }
+ | "(*" { comm_token lexbuf; comm_token lexbuf }
+ | "*)" { () }
+ | ['*' '('] { comm_token lexbuf }
+ | [^ '*' '(']* { comm_token lexbuf }
and string_token = parse
| '"' { DQ }
| '\\' _ { STR (String.sub (Lexing.lexeme lexbuf) 1 1) }
| QSTR { STR (Lexing.lexeme lexbuf) }
| eof { EOF }
and query_token = parse
- | "(*" { comm_token lexbuf }
+ | "(*" { comm_token lexbuf; query_token lexbuf }
| SPC { query_token lexbuf }
| '"' { let str = qstr string_token lexbuf in
out ("STR " ^ str); STR str }