summaryrefslogtreecommitdiff
path: root/src/compiler/lexer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/lexer.c')
-rw-r--r--src/compiler/lexer.c69
1 files changed, 65 insertions, 4 deletions
diff --git a/src/compiler/lexer.c b/src/compiler/lexer.c
index 651f1df..b28bd48 100644
--- a/src/compiler/lexer.c
+++ b/src/compiler/lexer.c
@@ -10,12 +10,25 @@ const char *LEXER_TOKEN_STRINGS[] = {
"LEXER_TOKEN_SYMBOL_CLOSE_PARENTHESIS",
"LEXER_TOKEN_SYMBOL_CLOSE_BRACKET",
"LEXER_TOKEN_IDENTIFIER",
+ "LEXER_TOKEN_BUILTIN",
"LEXER_TOKEN_BUILTIN_CAST",
"LEXER_TOKEN_BUILTIN_TYPE_OF",
"LEXER_TOKEN_BUILTIN_IMPORT",
"LEXER_TOKEN_BUILTIN_IS_COMPTIME",
"LEXER_TOKEN_BUILTIN_STACK_ALLOC",
"LEXER_TOKEN_BUILTIN_HEAP_ALLOC",
+ "LEXER_TOKEN_BUILTIN_NEG",
+ "LEXER_TOKEN_BUILTIN_ADD",
+ "LEXER_TOKEN_BUILTIN_SUB",
+ "LEXER_TOKEN_BUILTIN_MUL",
+ "LEXER_TOKEN_BUILTIN_DIV",
+ "LEXER_TOKEN_BUILTIN_MOD",
+ "LEXER_TOKEN_BUILTIN_EQUAL",
+ "LEXER_TOKEN_BUILTIN_NOT_EQUAL",
+ "LEXER_TOKEN_BUILTIN_GREATER",
+ "LEXER_TOKEN_BUILTIN_SMALLER",
+ "LEXER_TOKEN_BUILTIN_GREATER_OR_EQUAL",
+ "LEXER_TOKEN_BUILTIN_SMALLER_OR_EQUAL",
"LEXER_TOKEN_KEYWORD_TYPE",
"LEXER_TOKEN_KEYWORD_VOID",
"LEXER_TOKEN_KEYWORD_I8",
@@ -175,13 +188,45 @@ static const size_t LEXER_KEYWORD_SIZE =
sizeof(LEXER_KEYWORD_TOKENS) / sizeof(*LEXER_KEYWORD_TOKENS);
static const char *LEXER_BUILTIN_STRINGS[] = {
- "cast", "typeOf", "import", "isComptime", "stackAlloc", "heapAlloc",
+ "cast",
+ "typeOf",
+ "import",
+ "isComptime",
+ "stackAlloc",
+ "heapAlloc",
+ "neg",
+ "add",
+ "sub",
+ "mul",
+ "div",
+ "mod",
+ "equal",
+ "notEqual",
+ "greater",
+ "smaller",
+ "greaterOrEqual",
+ "smallerOrEqual",
};
static const LexerToken LEXER_BUILTIN_TOKENS[] = {
- LEXER_TOKEN_BUILTIN_CAST, LEXER_TOKEN_BUILTIN_TYPE_OF,
- LEXER_TOKEN_BUILTIN_IMPORT, LEXER_TOKEN_BUILTIN_IS_COMPTIME,
- LEXER_TOKEN_BUILTIN_STACK_ALLOC, LEXER_TOKEN_BUILTIN_HEAP_ALLOC,
+ LEXER_TOKEN_BUILTIN_CAST,
+ LEXER_TOKEN_BUILTIN_TYPE_OF,
+ LEXER_TOKEN_BUILTIN_IMPORT,
+ LEXER_TOKEN_BUILTIN_IS_COMPTIME,
+ LEXER_TOKEN_BUILTIN_STACK_ALLOC,
+ LEXER_TOKEN_BUILTIN_HEAP_ALLOC,
+ LEXER_TOKEN_BUILTIN_NEG,
+ LEXER_TOKEN_BUILTIN_ADD,
+ LEXER_TOKEN_BUILTIN_SUB,
+ LEXER_TOKEN_BUILTIN_MUL,
+ LEXER_TOKEN_BUILTIN_DIV,
+ LEXER_TOKEN_BUILTIN_MOD,
+ LEXER_TOKEN_BUILTIN_EQUAL,
+ LEXER_TOKEN_BUILTIN_NOT_EQUAL,
+ LEXER_TOKEN_BUILTIN_GREATER,
+ LEXER_TOKEN_BUILTIN_SMALLER,
+ LEXER_TOKEN_BUILTIN_GREATER_OR_EQUAL,
+ LEXER_TOKEN_BUILTIN_SMALLER_OR_EQUAL,
};
static const size_t LEXER_BUILTIN_SIZE =
sizeof(LEXER_BUILTIN_TOKENS) / sizeof(*LEXER_BUILTIN_TOKENS);
@@ -319,6 +364,10 @@ LexerNodeArray lexer(char *str) {
RETURN_SUCCESS:
result.data = a404m_realloc(result.data, result.size * sizeof(*result.data));
+#ifdef PRINT_COMPILE_TREE
+ lexerNodeArrayPrint(result);
+#endif
+
return result;
}
@@ -430,6 +479,18 @@ lexerPushClear(LexerNodeArray *array, size_t *array_size, char *iter,
case LEXER_TOKEN_BUILTIN_IS_COMPTIME:
case LEXER_TOKEN_BUILTIN_STACK_ALLOC:
case LEXER_TOKEN_BUILTIN_HEAP_ALLOC:
+ case LEXER_TOKEN_BUILTIN_NEG:
+ case LEXER_TOKEN_BUILTIN_ADD:
+ case LEXER_TOKEN_BUILTIN_SUB:
+ case LEXER_TOKEN_BUILTIN_MUL:
+ case LEXER_TOKEN_BUILTIN_DIV:
+ case LEXER_TOKEN_BUILTIN_MOD:
+ case LEXER_TOKEN_BUILTIN_EQUAL:
+ case LEXER_TOKEN_BUILTIN_NOT_EQUAL:
+ case LEXER_TOKEN_BUILTIN_GREATER:
+ case LEXER_TOKEN_BUILTIN_SMALLER:
+ case LEXER_TOKEN_BUILTIN_GREATER_OR_EQUAL:
+ case LEXER_TOKEN_BUILTIN_SMALLER_OR_EQUAL:
case LEXER_TOKEN_SYMBOL_CLOSE_BRACKET:
case LEXER_TOKEN_SYMBOL_OPEN_BRACKET:
if (*array_size == array->size) {