diff options
Diffstat (limited to 'lib/lexer.mll')
-rw-r--r-- | lib/lexer.mll | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/lexer.mll b/lib/lexer.mll new file mode 100644 index 0000000..e8a7a73 --- /dev/null +++ b/lib/lexer.mll @@ -0,0 +1,27 @@ +{ +open Parser + +exception SyntaxError of string +} + +let digit = ['0'-'9'] +let frac = '.' digit* +let exp = ['e' 'E'] ['-' '+']? digit+ +let float = digit* frac? exp? +let white = [' ' '\t']+ +let newline = '\r' | '\n' | "\r\n" +let id = ['a'-'z' 'A'-'Z' '_']* + + +rule read = + parse + | white { read lexbuf } + | id { IDENTIFIER (Lexing.lexeme lexbuf) } + | "uuidv4" { UUIDV4 } + | "name" { NAME } + | ":" { COLON } + | "," { COMMA } + | "\n" { NEWLINE } + | "." { DOT } + | eof { EOF } + | _ as c { failwith (Printf.sprintf "unexpected character: %C" c) } |