new parser

This commit is contained in:
2025-10-13 16:13:49 +03:00
parent ca82fdc94c
commit de4cecd4c4

View File

@@ -5,6 +5,7 @@ typedef struct {
char* left; char* left;
char* right; char* right;
symbols node; symbols node;
size_t cursor;
size_t prec; size_t prec;
} ASTNode; } ASTNode;
@@ -33,7 +34,8 @@ void construct_nodes(ASTTree* a, Token t){
a->nodes[nc].node = TOKEN_PLUS; a->nodes[nc].node = TOKEN_PLUS;
a->nodes[nc].left = t.text[i-1]; a->nodes[nc].left = t.text[i-1];
a->nodes[nc].right = t.text[i+1]; a->nodes[nc].right = t.text[i+1];
// add precedense later for large tree construction a->nodes[nc].prec = 1;
a->nodes[nc].cursor = nc;
nc++; nc++;
break; break;
case TOKEN_MINUS: case TOKEN_MINUS:
@@ -41,6 +43,8 @@ void construct_nodes(ASTTree* a, Token t){
a->nodes[nc].node = TOKEN_MINUS; a->nodes[nc].node = TOKEN_MINUS;
a->nodes[nc].left = t.text[i-1]; a->nodes[nc].left = t.text[i-1];
a->nodes[nc].right = t.text[i+1]; a->nodes[nc].right = t.text[i+1];
a->nodes[nc].prec = 1;
a->nodes[nc].cursor = nc;
nc++; nc++;
break; break;
case TOKEN_DIV: case TOKEN_DIV:
@@ -48,6 +52,8 @@ void construct_nodes(ASTTree* a, Token t){
a->nodes[nc].node = TOKEN_DIV; a->nodes[nc].node = TOKEN_DIV;
a->nodes[nc].left = t.text[i-1]; a->nodes[nc].left = t.text[i-1];
a->nodes[nc].right = t.text[i+1]; a->nodes[nc].right = t.text[i+1];
a->nodes[nc].prec = 2;
a->nodes[nc].cursor = nc;
nc++; nc++;
break; break;
case TOKEN_MUL: case TOKEN_MUL:
@@ -55,10 +61,11 @@ void construct_nodes(ASTTree* a, Token t){
a->nodes[nc].node = TOKEN_MUL; a->nodes[nc].node = TOKEN_MUL;
a->nodes[nc].left = t.text[i-1]; a->nodes[nc].left = t.text[i-1];
a->nodes[nc].right = t.text[i+1]; a->nodes[nc].right = t.text[i+1];
a->nodes[nc].prec = 2;
a->nodes[nc].cursor = nc;
nc++; nc++;
break; break;
default: default:
break; break;
} }
} }