}
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 }
| "not" { out "NOT" ; NOT }
| "or" { out "OR" ; OR }
| "pattern" { out "PAT" ; PAT }
- | "ptoperty" { out "PROP" ; PROP }
+ | "property" { out "PROP" ; PROP }
| "ref" { out "REF" ; REF }
| "refof" { out "REFOF" ; REFOF }
| "relation" { out "REL" ; REL }