-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathiscanner.mll
24 lines (23 loc) · 967 Bytes
/
iscanner.mll
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{ open Iparser }
rule token = parse
(*[' '] { token lexbuf }*)
| "/*" { comment lexbuf }
| [^'$''"'] as lxm { CHAR_LITERAL(lxm) }
| '$' { let buffer = Buffer.create 1 in OPEN (imp buffer lexbuf) }
| '"' { let buffer = Buffer.create 1 in STRING_LITERAL (stringl buffer lexbuf) }
| eof { EOF }
and stringl buffer = parse
| '"' { Buffer.contents buffer }
| "\\t" { Buffer.add_char buffer '\t'; stringl buffer lexbuf }
| "\\n" { Buffer.add_char buffer '\\'; Buffer.add_char buffer 'n'; stringl buffer lexbuf }
| '\\' '"' { Buffer.add_char buffer '"'; stringl buffer lexbuf }
| '\\' '\\' { Buffer.add_char buffer '\\'; stringl buffer lexbuf }
| eof { raise End_of_file }
| _ as char { Buffer.add_char buffer char; stringl buffer lexbuf }
and comment = parse
"*/" { token lexbuf }
| _ { comment lexbuf }
and imp buffer = parse
| '$' { Buffer.contents buffer }
| eof { raise End_of_file }
| _ as char { Buffer.add_char buffer char; imp buffer lexbuf }