diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-04-05 15:09:23 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-04-05 15:09:23 +0330 |
commit | b5772e1c6961dd4b99b91b060b57584d4868aa2b (patch) | |
tree | 0b2d3c4f9b4d58981439e027423129ff0f427572 /src/compiler/parser.c | |
parent | 5d43a23a42725d9e88be76ce04260dbd4b57d370 (diff) |
working on access operator
Diffstat (limited to 'src/compiler/parser.c')
-rw-r--r-- | src/compiler/parser.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/compiler/parser.c b/src/compiler/parser.c index 2c7e6a6..ad06a7f 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -74,6 +74,7 @@ const char *PARSER_TOKEN_STRINGS[] = { "PARSER_TOKEN_OPERATOR_POINTER", "PARSER_TOKEN_OPERATOR_ADDRESS", "PARSER_TOKEN_OPERATOR_DEREFERENCE", + "PARSER_TOKEN_OPERATOR_ACCESS", "PARSER_TOKEN_FUNCTION_DEFINITION", @@ -113,7 +114,8 @@ static constexpr ParserOrder PARSER_ORDER[] = { }, { .ltr = true, - ORDER_ARRAY(LEXER_TOKEN_SYMBOL_DEREFERENCE, ), + ORDER_ARRAY(LEXER_TOKEN_SYMBOL_DEREFERENCE, + LEXER_TOKEN_SYMBOL_ACCESS, ), }, { .ltr = false, @@ -343,6 +345,7 @@ void parserNodePrint(const ParserNode *node, int indent) { printf(" "); } goto RETURN_SUCCESS; + case PARSER_TOKEN_OPERATOR_ACCESS: case PARSER_TOKEN_OPERATOR_ASSIGN: case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: @@ -536,6 +539,7 @@ void parserNodeDelete(ParserNode *node) { free(metadata); } goto RETURN_SUCCESS; + case PARSER_TOKEN_OPERATOR_ACCESS: case PARSER_TOKEN_OPERATOR_ASSIGN: case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: @@ -786,6 +790,9 @@ ParserNode *parseNode(LexerNode *node, LexerNode *begin, LexerNode *end, case LEXER_TOKEN_SYMBOL_SMALLER_OR_EQUAL: return parserBinaryOperator(node, begin, end, parent, PARSER_TOKEN_OPERATOR_SMALLER_OR_EQUAL); + case LEXER_TOKEN_SYMBOL_ACCESS: + return parserBinaryOperator(node, begin, end, parent, + PARSER_TOKEN_OPERATOR_ACCESS); case LEXER_TOKEN_SYMBOL_PLUS: { ParserNode *result = parserBinaryOrLeftOperator(node, begin, end, parent, PARSER_TOKEN_OPERATOR_PLUS, @@ -1227,6 +1234,7 @@ ParserNode *parserFunction(LexerNode *node, LexerNode *begin, LexerNode *end, case PARSER_TOKEN_SYMBOL_CURLY_BRACKET: case PARSER_TOKEN_SYMBOL_PARENTHESIS: case PARSER_TOKEN_SYMBOL_COMMA: + case PARSER_TOKEN_OPERATOR_ACCESS: case PARSER_TOKEN_OPERATOR_ASSIGN: case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: @@ -1654,6 +1662,7 @@ bool isExpression(ParserNode *node) { case PARSER_TOKEN_FUNCTION_CALL: case PARSER_TOKEN_KEYWORD_PRINT_U64: case PARSER_TOKEN_KEYWORD_RETURN: + case PARSER_TOKEN_OPERATOR_ACCESS: case PARSER_TOKEN_OPERATOR_ASSIGN: case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: @@ -1738,6 +1747,7 @@ bool isType(ParserNode *node) { case PARSER_TOKEN_OPERATOR_POINTER: case PARSER_TOKEN_SYMBOL_CURLY_BRACKET: case PARSER_TOKEN_KEYWORD_STRUCT: + case PARSER_TOKEN_OPERATOR_ACCESS: return true; case PARSER_TOKEN_OPERATOR_ADDRESS: case PARSER_TOKEN_KEYWORD_NULL: @@ -1788,6 +1798,7 @@ bool isValue(ParserNode *node) { case PARSER_TOKEN_VALUE_FLOAT: case PARSER_TOKEN_VALUE_BOOL: case PARSER_TOKEN_IDENTIFIER: + case PARSER_TOKEN_OPERATOR_ACCESS: case PARSER_TOKEN_OPERATOR_ASSIGN: case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: |