diff options
Diffstat (limited to 'src/parser/Lexer.mll')
-rw-r--r-- | src/parser/Lexer.mll | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/parser/Lexer.mll b/src/parser/Lexer.mll new file mode 100644 index 0000000..708bb64 --- /dev/null +++ b/src/parser/Lexer.mll @@ -0,0 +1,37 @@ +{ +open Grammar + +exception IllegalCharacter of char +} + +let whitespace = [' ' '\t' '\r' '\n']+ +let letter = ['a'-'z' 'A'-'Z'] +let ident = letter+ + +rule token = + parse + | whitespace { token lexbuf } + | "(" { LPR } + | ")" { RPR } + | "[" { LBR } + | "]" { RBR } + | "->" { ARROW } + | "*" { ASTERISK } + | "\\" { BACKSLASH } + | "::" { DOUBLE_COLON } + | ":" { COLON } + | "," { COMMA } + | "." { DOT } + | "=>" { FATARROW } + | "_" { UNDERSCORE } + | "at" { AT } + | "fst" { FST } + | "snd" { SND } + | "type" { TYPE } + | "bool" { BOOL } + | "true" { TRUE } + | "false" { FALSE } + | "bool-elim" { BOOL_ELIM } + | ident { IDENT (Lexing.lexeme lexbuf) } + | eof { EOF } + | (_ as illegal_char) { raise (IllegalCharacter illegal_char) } |