diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-02-23 12:42:20 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-02-23 12:42:20 +0330 |
commit | 20f403c5e603cb7df92c67370eaa3a6119d3a166 (patch) | |
tree | d21ab8bf0009153e3f5e4a4b4055de85275936d9 /src/compiler/parser.c | |
parent | 1bd43564b2edda3358e1b0ad9b83b64dfb59c0d9 (diff) |
add += -= *= /= %=
Diffstat (limited to 'src/compiler/parser.c')
-rw-r--r-- | src/compiler/parser.c | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/src/compiler/parser.c b/src/compiler/parser.c index fad6e07..a47869d 100644 --- a/src/compiler/parser.c +++ b/src/compiler/parser.c @@ -123,7 +123,11 @@ static constexpr ParserOrder PARSER_ORDER[] = { }, { .ltr = false, - ORDER_ARRAY(LEXER_TOKEN_SYMBOL_ASSIGN, ), + ORDER_ARRAY(LEXER_TOKEN_SYMBOL_ASSIGN, LEXER_TOKEN_SYMBOL_SUM_ASSIGN, + LEXER_TOKEN_SYMBOL_SUB_ASSIGN, + LEXER_TOKEN_SYMBOL_MULTIPLY_ASSIGN, + LEXER_TOKEN_SYMBOL_DIVIDE_ASSIGN, + LEXER_TOKEN_SYMBOL_MODULO_ASSIGN, ), }, { .ltr = true, @@ -314,6 +318,11 @@ void parserNodePrint(const ParserNode *node, int indent) { } goto RETURN_SUCCESS; case PARSER_TOKEN_OPERATOR_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: +case PARSER_TOKEN_OPERATOR_MULTIPLY_ASSIGN: +case PARSER_TOKEN_OPERATOR_DIVIDE_ASSIGN: +case PARSER_TOKEN_OPERATOR_MODULO_ASSIGN: case PARSER_TOKEN_OPERATOR_SUM: case PARSER_TOKEN_OPERATOR_SUB: case PARSER_TOKEN_OPERATOR_MULTIPLY: @@ -485,6 +494,11 @@ void parserNodeDelete(ParserNode *node) { } goto RETURN_SUCCESS; case PARSER_TOKEN_OPERATOR_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: +case PARSER_TOKEN_OPERATOR_MULTIPLY_ASSIGN: +case PARSER_TOKEN_OPERATOR_DIVIDE_ASSIGN: +case PARSER_TOKEN_OPERATOR_MODULO_ASSIGN: case PARSER_TOKEN_OPERATOR_SUM: case PARSER_TOKEN_OPERATOR_SUB: case PARSER_TOKEN_OPERATOR_MULTIPLY: @@ -677,6 +691,21 @@ ParserNode *parseNode(LexerNode *node, LexerNode *begin, LexerNode *end, case LEXER_TOKEN_SYMBOL_ASSIGN: return parserBinaryOperator(node, begin, end, parent, PARSER_TOKEN_OPERATOR_ASSIGN); + case LEXER_TOKEN_SYMBOL_SUM_ASSIGN: + return parserBinaryOperator(node, begin, end, parent, + PARSER_TOKEN_OPERATOR_SUM_ASSIGN); + case LEXER_TOKEN_SYMBOL_SUB_ASSIGN: + return parserBinaryOperator(node, begin, end, parent, + PARSER_TOKEN_OPERATOR_SUB_ASSIGN); + case LEXER_TOKEN_SYMBOL_MULTIPLY_ASSIGN: + return parserBinaryOperator(node, begin, end, parent, + PARSER_TOKEN_OPERATOR_MULTIPLY_ASSIGN); + case LEXER_TOKEN_SYMBOL_DIVIDE_ASSIGN: + return parserBinaryOperator(node, begin, end, parent, + PARSER_TOKEN_OPERATOR_DIVIDE_ASSIGN); + case LEXER_TOKEN_SYMBOL_MODULO_ASSIGN: + return parserBinaryOperator(node, begin, end, parent, + PARSER_TOKEN_OPERATOR_MODULO_ASSIGN); case LEXER_TOKEN_SYMBOL_SUM: return parserBinaryOperator(node, begin, end, parent, PARSER_TOKEN_OPERATOR_SUM); @@ -1125,6 +1154,11 @@ ParserNode *parserFunction(LexerNode *node, LexerNode *begin, LexerNode *end, case PARSER_TOKEN_SYMBOL_PARENTHESIS: case PARSER_TOKEN_SYMBOL_COMMA: case PARSER_TOKEN_OPERATOR_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: +case PARSER_TOKEN_OPERATOR_MULTIPLY_ASSIGN: +case PARSER_TOKEN_OPERATOR_DIVIDE_ASSIGN: +case PARSER_TOKEN_OPERATOR_MODULO_ASSIGN: case PARSER_TOKEN_OPERATOR_PLUS: case PARSER_TOKEN_OPERATOR_MINUS: case PARSER_TOKEN_OPERATOR_SUM: @@ -1456,6 +1490,11 @@ bool isExpression(ParserNode *node) { case PARSER_TOKEN_KEYWORD_PRINT_U64: case PARSER_TOKEN_KEYWORD_RETURN: case PARSER_TOKEN_OPERATOR_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: +case PARSER_TOKEN_OPERATOR_MULTIPLY_ASSIGN: +case PARSER_TOKEN_OPERATOR_DIVIDE_ASSIGN: +case PARSER_TOKEN_OPERATOR_MODULO_ASSIGN: case PARSER_TOKEN_OPERATOR_PLUS: case PARSER_TOKEN_OPERATOR_MINUS: case PARSER_TOKEN_OPERATOR_SUM: @@ -1537,6 +1576,11 @@ bool isType(ParserNode *node) { case PARSER_TOKEN_KEYWORD_PRINT_U64: case PARSER_TOKEN_KEYWORD_RETURN: case PARSER_TOKEN_OPERATOR_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: +case PARSER_TOKEN_OPERATOR_MULTIPLY_ASSIGN: +case PARSER_TOKEN_OPERATOR_DIVIDE_ASSIGN: +case PARSER_TOKEN_OPERATOR_MODULO_ASSIGN: case PARSER_TOKEN_OPERATOR_PLUS: case PARSER_TOKEN_OPERATOR_MINUS: case PARSER_TOKEN_OPERATOR_SUM: @@ -1566,6 +1610,11 @@ bool isValue(ParserNode *node) { case PARSER_TOKEN_VALUE_BOOL: case PARSER_TOKEN_IDENTIFIER: case PARSER_TOKEN_OPERATOR_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUM_ASSIGN: +case PARSER_TOKEN_OPERATOR_SUB_ASSIGN: +case PARSER_TOKEN_OPERATOR_MULTIPLY_ASSIGN: +case PARSER_TOKEN_OPERATOR_DIVIDE_ASSIGN: +case PARSER_TOKEN_OPERATOR_MODULO_ASSIGN: case PARSER_TOKEN_OPERATOR_PLUS: case PARSER_TOKEN_OPERATOR_MINUS: case PARSER_TOKEN_OPERATOR_SUM: |