about summary refs log tree commit diff
path: root/src/parser/Lexer.mll
diff options
context:
space:
mode:
authorMalte Voos <git@mal.tc>2024-06-23 23:31:59 +0200
committerMalte Voos <git@mal.tc>2024-06-24 00:16:55 +0200
commit5d227bcd0055d02e1d49a3dcd27e80a756923d5b (patch)
treeda468ad3a8f3caf709b731ca2678c86a5a015990 /src/parser/Lexer.mll
parent8d40541003736d5319ec981278338e8c8c66daf6 (diff)
downloadtoytt-5d227bcd0055d02e1d49a3dcd27e80a756923d5b.tar.gz
toytt-5d227bcd0055d02e1d49a3dcd27e80a756923d5b.zip
split code into smaller libraries and make a better repl
Diffstat (limited to 'src/parser/Lexer.mll')
-rw-r--r--src/parser/Lexer.mll37
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) }