From acd5e9781e9df37f202adfaf2df49d17b1ba6c71 Mon Sep 17 00:00:00 2001 From: LaEntropiaa Date: Tue, 24 Mar 2026 21:04:36 -0600 Subject: [PATCH] DAMN, i still don't get it, i really don't want to ask some AI to do it but damn, i'm finding it REALLY difficult, is like the 4th article i read, i hope this is the one and that i can get going for fucks sake --- include/parser.h | 8 ++++++-- src/parser.c | 38 +++++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/include/parser.h b/include/parser.h index b8f80f9..abb4061 100644 --- a/include/parser.h +++ b/include/parser.h @@ -9,9 +9,13 @@ typedef struct { size_t pos; } ASTNodeSlice; -ASTNode *nud(ASTNodeSlice *slice, size_t pos); -ASTNode *led(ASTNodeSlice *slice, size_t pos, size_t right_precedence); +ASTNode ASTNodeSlice_peek(ASTNodeSlice slice); +ASTNode ASTNodeSlice_next(ASTNodeSlice slice); + +ASTNode *nud(ASTNodeSlice *slice); +ASTNode *led(ASTNodeSlice *slice, size_t right_precedence); size_t node_lbp(ASTNode node); size_t node_rbp(ASTNode node); AST parse(ASTNodeArray arr); +AST parse_expr(ASTNodeSlice *arr); diff --git a/src/parser.c b/src/parser.c index 238cd0a..788e7de 100644 --- a/src/parser.c +++ b/src/parser.c @@ -2,8 +2,30 @@ #include "lexer.h" #include -size_t node_lbp(Operator op) { - switch (op) { +size_t node_lbp(ASTNode node) { + if (node.type == NODE_INTEGER) { + return 0; + } + + switch (node.data.binary.op) { + case OP_ADD: + case OP_SUB: + return 10; + break; + case OP_DIV: + case OP_MUL: + return 20; + default: + return 0; + } +} + +size_t node_rbp(ASTNode node) { + if (node.type == NODE_INTEGER) { + return 0; + } + + switch (node.data.binary.op) { case OP_ADD: case OP_SUB: return 10; @@ -14,14 +36,4 @@ size_t node_lbp(Operator op) { } } -size_t node_rbp(Operator op) { - switch (op) { - case OP_ADD: - case OP_SUB: - return 10; - break; - case OP_DIV: - case OP_MUL: - return 20; - } -} +