summaryrefslogtreecommitdiff
path: root/include/lex.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lex.h')
-rw-r--r--include/lex.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/include/lex.h b/include/lex.h
new file mode 100644
index 0000000..a712204
--- /dev/null
+++ b/include/lex.h
@@ -0,0 +1,57 @@
+#ifndef LEX_H
+#define LEX_H
+
+#include <stddef.h>
+
+// Only to be used with compile-time known tokens.
+#define TOKEN(tt, me) (struct token){.type=tt,.lexeme=me,.length=sizeof(me) - 1}
+
+#define TOKEN_INVALID 1
+#define TOKEN_EOP 2
+#define TOKEN_NUMBER 3
+#define TOKEN_HEX 4
+#define TOKEN_BINARY 5
+#define TOKEN_SEMICOLON 6
+#define TOKEN_NEWLINE 7
+#define TOKEN_FUNCTION 8
+#define TOKEN_G8 9
+#define TOKEN_G16 10
+#define TOKEN_G32 11
+#define TOKEN_G64 12
+#define TOKEN_IDENTIFIER 13
+#define TOKEN_PACK 14
+#define TOKEN_BRACES_OPEN 15
+#define TOKEN_BRACES_CLOSE 16
+#define TOKEN_PARAN_OPEN 17
+#define TOKEN_PARAN_CLOSE 18
+#define TOKEN_RETURN 19
+#define TOKEN_EQUALSIGN 20
+#define TOKEN_PLUS 21
+#define TOKEN_MINUS 22
+#define TOKEN_STAR 23
+#define TOKEN_SLASH 24
+
+struct token {
+ int type;
+// size_t line;
+// size_t pos;
+ size_t length;
+ char *lexeme;
+};
+
+struct lex {
+ size_t pos;
+ size_t size;
+ char* buffer;
+ size_t line;
+};
+
+char lex_advance(struct lex *l);
+char lex_seek(struct lex *l, size_t o);
+
+struct token lex_number(struct lex *l);
+struct token lex_directive(struct lex *l);
+struct token lex_link_unit(struct lex *l);
+struct token lex_next(struct lex *l);
+
+#endif