diff options
Diffstat (limited to 'src/compiler/parser.c')
-rw-r--r-- | src/compiler/parser.c | 117 |
1 files changed, 115 insertions, 2 deletions
diff --git a/src/compiler/parser.c b/src/compiler/parser.c index 8ca259f..6e8283a 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -18,6 +18,18 @@ const char *PARSER_TOKEN_STRINGS[] = { "PARSER_TOKEN_BUILTIN_IS_COMPTIME", "PARSER_TOKEN_BUILTIN_STACK_ALLOC", "PARSER_TOKEN_BUILTIN_HEAP_ALLOC", + "PARSER_TOKEN_BUILTIN_NEG", + "PARSER_TOKEN_BUILTIN_ADD", + "PARSER_TOKEN_BUILTIN_SUB", + "PARSER_TOKEN_BUILTIN_MUL", + "PARSER_TOKEN_BUILTIN_DIV", + "PARSER_TOKEN_BUILTIN_MOD", + "PARSER_TOKEN_BUILTIN_EQUAL", + "PARSER_TOKEN_BUILTIN_NOT_EQUAL", + "PARSER_TOKEN_BUILTIN_GREATER", + "PARSER_TOKEN_BUILTIN_SMALLER", + "PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL", + "PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL", "PARSER_TOKEN_VALUE_INT", "PARSER_TOKEN_VALUE_FLOAT", @@ -232,6 +244,18 @@ void parserNodePrint(const ParserNode *node, int indent) { case PARSER_TOKEN_BUILTIN_IS_COMPTIME: case PARSER_TOKEN_BUILTIN_STACK_ALLOC: case PARSER_TOKEN_BUILTIN_HEAP_ALLOC: + case PARSER_TOKEN_BUILTIN_NEG: + case PARSER_TOKEN_BUILTIN_ADD: + case PARSER_TOKEN_BUILTIN_SUB: + case PARSER_TOKEN_BUILTIN_MUL: + case PARSER_TOKEN_BUILTIN_DIV: + case PARSER_TOKEN_BUILTIN_MOD: + case PARSER_TOKEN_BUILTIN_EQUAL: + case PARSER_TOKEN_BUILTIN_NOT_EQUAL: + case PARSER_TOKEN_BUILTIN_GREATER: + case PARSER_TOKEN_BUILTIN_SMALLER: + case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL: + case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL: case PARSER_TOKEN_TYPE_TYPE: case PARSER_TOKEN_TYPE_VOID: case PARSER_TOKEN_TYPE_BOOL: @@ -521,6 +545,18 @@ void parserNodeDelete(ParserNode *node) { case PARSER_TOKEN_BUILTIN_IS_COMPTIME: case PARSER_TOKEN_BUILTIN_STACK_ALLOC: case PARSER_TOKEN_BUILTIN_HEAP_ALLOC: + case PARSER_TOKEN_BUILTIN_NEG: + case PARSER_TOKEN_BUILTIN_ADD: + case PARSER_TOKEN_BUILTIN_SUB: + case PARSER_TOKEN_BUILTIN_MUL: + case PARSER_TOKEN_BUILTIN_DIV: + case PARSER_TOKEN_BUILTIN_MOD: + case PARSER_TOKEN_BUILTIN_EQUAL: + case PARSER_TOKEN_BUILTIN_NOT_EQUAL: + case PARSER_TOKEN_BUILTIN_GREATER: + case PARSER_TOKEN_BUILTIN_SMALLER: + case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL: + case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL: case PARSER_TOKEN_TYPE_TYPE: case PARSER_TOKEN_TYPE_VOID: case PARSER_TOKEN_TYPE_BOOL: @@ -717,6 +753,9 @@ ParserNode *parserFromPath(const char *filePath ParserNode *parser(LexerNodeArray lexed) { ParserNode *root = newParserNode(PARSER_TOKEN_ROOT, NULL, NULL, NULL, NULL); if (parserNodeArray(lexed.data, lexed.data + lexed.size, root)) { +#ifdef PRINT_COMPILE_TREE + parserNodePrint(root, 0); +#endif return root; } else { free(root); @@ -811,6 +850,32 @@ ParserNode *parseNode(LexerNode *node, LexerNode *begin, LexerNode *end, return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_STACK_ALLOC); case LEXER_TOKEN_BUILTIN_HEAP_ALLOC: return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_HEAP_ALLOC); + case LEXER_TOKEN_BUILTIN_NEG: + return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_NEG); + case LEXER_TOKEN_BUILTIN_ADD: + return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_ADD); + case LEXER_TOKEN_BUILTIN_SUB: + return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_SUB); + case LEXER_TOKEN_BUILTIN_MUL: + return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_MUL); + case LEXER_TOKEN_BUILTIN_DIV: + return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_DIV); + case LEXER_TOKEN_BUILTIN_MOD: + return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_MOD); + case LEXER_TOKEN_BUILTIN_EQUAL: + return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_EQUAL); + case LEXER_TOKEN_BUILTIN_NOT_EQUAL: + return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_NOT_EQUAL); + case LEXER_TOKEN_BUILTIN_GREATER: + return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_GREATER); + case LEXER_TOKEN_BUILTIN_SMALLER: + return parserNoMetadata(node, parent, PARSER_TOKEN_BUILTIN_SMALLER); + case LEXER_TOKEN_BUILTIN_GREATER_OR_EQUAL: + return parserNoMetadata(node, parent, + PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL); + case LEXER_TOKEN_BUILTIN_SMALLER_OR_EQUAL: + return parserNoMetadata(node, parent, + PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL); case LEXER_TOKEN_KEYWORD_TYPE: return parserNoMetadata(node, parent, PARSER_TOKEN_TYPE_TYPE); case LEXER_TOKEN_KEYWORD_VOID: @@ -1547,8 +1612,20 @@ ParserNode *parserFunction(LexerNode *node, LexerNode *begin, LexerNode *end, case PARSER_TOKEN_BUILTIN_TYPE_OF: case PARSER_TOKEN_BUILTIN_IMPORT: case PARSER_TOKEN_BUILTIN_IS_COMPTIME: - case PARSER_TOKEN_BUILTIN_STACK_ALLOC: - case PARSER_TOKEN_BUILTIN_HEAP_ALLOC: + case PARSER_TOKEN_BUILTIN_STACK_ALLOC: + case PARSER_TOKEN_BUILTIN_HEAP_ALLOC: + case PARSER_TOKEN_BUILTIN_NEG: + case PARSER_TOKEN_BUILTIN_ADD: + case PARSER_TOKEN_BUILTIN_SUB: + case PARSER_TOKEN_BUILTIN_MUL: + case PARSER_TOKEN_BUILTIN_DIV: + case PARSER_TOKEN_BUILTIN_MOD: + case PARSER_TOKEN_BUILTIN_EQUAL: + case PARSER_TOKEN_BUILTIN_NOT_EQUAL: + case PARSER_TOKEN_BUILTIN_GREATER: + case PARSER_TOKEN_BUILTIN_SMALLER: + case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL: + case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL: case PARSER_TOKEN_VALUE_INT: case PARSER_TOKEN_VALUE_FLOAT: case PARSER_TOKEN_VALUE_BOOL: @@ -2015,6 +2092,18 @@ bool isExpression(ParserNode *node) { case PARSER_TOKEN_BUILTIN_IS_COMPTIME: case PARSER_TOKEN_BUILTIN_STACK_ALLOC: case PARSER_TOKEN_BUILTIN_HEAP_ALLOC: + case PARSER_TOKEN_BUILTIN_NEG: + case PARSER_TOKEN_BUILTIN_ADD: + case PARSER_TOKEN_BUILTIN_SUB: + case PARSER_TOKEN_BUILTIN_MUL: + case PARSER_TOKEN_BUILTIN_DIV: + case PARSER_TOKEN_BUILTIN_MOD: + case PARSER_TOKEN_BUILTIN_EQUAL: + case PARSER_TOKEN_BUILTIN_NOT_EQUAL: + case PARSER_TOKEN_BUILTIN_GREATER: + case PARSER_TOKEN_BUILTIN_SMALLER: + case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL: + case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL: case PARSER_TOKEN_CONSTANT: case PARSER_TOKEN_VARIABLE: case PARSER_TOKEN_SYMBOL_PARENTHESIS: @@ -2130,6 +2219,18 @@ bool isType(ParserNode *node) { case PARSER_TOKEN_BUILTIN_IS_COMPTIME: case PARSER_TOKEN_BUILTIN_STACK_ALLOC: case PARSER_TOKEN_BUILTIN_HEAP_ALLOC: + case PARSER_TOKEN_BUILTIN_NEG: + case PARSER_TOKEN_BUILTIN_ADD: + case PARSER_TOKEN_BUILTIN_SUB: + case PARSER_TOKEN_BUILTIN_MUL: + case PARSER_TOKEN_BUILTIN_DIV: + case PARSER_TOKEN_BUILTIN_MOD: + case PARSER_TOKEN_BUILTIN_EQUAL: + case PARSER_TOKEN_BUILTIN_NOT_EQUAL: + case PARSER_TOKEN_BUILTIN_GREATER: + case PARSER_TOKEN_BUILTIN_SMALLER: + case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL: + case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL: case PARSER_TOKEN_OPERATOR_ADDRESS: case PARSER_TOKEN_KEYWORD_NULL: case PARSER_TOKEN_KEYWORD_UNDEFINED: @@ -2192,6 +2293,18 @@ bool isValue(ParserNode *node) { case PARSER_TOKEN_BUILTIN_IS_COMPTIME: case PARSER_TOKEN_BUILTIN_STACK_ALLOC: case PARSER_TOKEN_BUILTIN_HEAP_ALLOC: + case PARSER_TOKEN_BUILTIN_NEG: + case PARSER_TOKEN_BUILTIN_ADD: + case PARSER_TOKEN_BUILTIN_SUB: + case PARSER_TOKEN_BUILTIN_MUL: + case PARSER_TOKEN_BUILTIN_DIV: + case PARSER_TOKEN_BUILTIN_MOD: + case PARSER_TOKEN_BUILTIN_EQUAL: + case PARSER_TOKEN_BUILTIN_NOT_EQUAL: + case PARSER_TOKEN_BUILTIN_GREATER: + case PARSER_TOKEN_BUILTIN_SMALLER: + case PARSER_TOKEN_BUILTIN_GREATER_OR_EQUAL: + case PARSER_TOKEN_BUILTIN_SMALLER_OR_EQUAL: case PARSER_TOKEN_OPERATOR_ACCESS: case PARSER_TOKEN_OPERATOR_ASSIGN: case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: |