summaryrefslogtreecommitdiff
path: root/src/compiler/parser.c
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-23 12:42:20 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-02-23 12:42:20 +0330
commit20f403c5e603cb7df92c67370eaa3a6119d3a166 (patch)
treed21ab8bf0009153e3f5e4a4b4055de85275936d9 /src/compiler/parser.c
parent1bd43564b2edda3358e1b0ad9b83b64dfb59c0d9 (diff)
add += -= *= /= %=
Diffstat (limited to 'src/compiler/parser.c')
-rw-r--r--src/compiler/parser.c51
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: