From d6e8c277b13ee5a9878c78dd7d0104699202a161 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 16 Jun 2024 15:43:19 +0200 Subject: Remove redundant function name and update precedence naming --- src/main.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/main.c b/src/main.c index bce0a55..c321d7c 100644 --- a/src/main.c +++ b/src/main.c @@ -102,7 +102,7 @@ typedef struct Parser { typedef enum { PREC_NONE = 0, - PREC_ASSIGNMENT, // = FIXME: this may not happen in our lang? + PREC_LOW, // lowest precedence PREC_OR, // || PREC_AND, // && PREC_EQUALITY, // == != @@ -111,7 +111,7 @@ typedef enum { PREC_FACTOR, // * / PREC_UNARY, // ! - PREC_CALL, // . () - PREC_PRIMARY + PREC_PRIMARY // highest precedence } ParsePrecedence; typedef void (*ParseFn)(Parser *); @@ -122,7 +122,7 @@ typedef struct { ParsePrecedence precedence; } ParseRule; -void parse_expr(Parser *parser); +void parse_expr(Parser *parser, ParsePrecedence precedence); void parse_advance(Parser *parser); void parse_grouping(Parser *parser); @@ -172,8 +172,8 @@ parse_consume(Parser *parser, TokenKind kind, Str msg) { parse_emit_err(parser, parser->current, msg); } -static void -parse_prec(Parser *parser, ParsePrecedence precedence) { +void +parse_expr(Parser *parser, ParsePrecedence precedence) { parse_advance(parser); ParseFn prefix = parse_rules[parser->previous.kind].prefix; if (prefix == NULL) { @@ -202,7 +202,7 @@ parse_unary(Parser *parser) { print_token(prev); #endif TokenKind kind = parser->previous.kind; - parse_expr(parser); + parse_expr(parser, PREC_LOW); // TODO: ... switch (kind) { // case TOKEN_MINUS: emitByte(OP_NEGATE); break; @@ -219,7 +219,7 @@ parse_binary(Parser *parser) { #endif TokenKind kind = prev.kind; ParseRule rule = parse_rules[kind]; - parse_prec(parser, rule.precedence + 1); + parse_expr(parser, rule.precedence + 1); Node *node; switch (kind) { @@ -256,16 +256,10 @@ parse_grouping(Parser *parser) { print("parsing group "); print_token(parser->previous); #endif - parse_expr(parser); + parse_expr(parser, PREC_LOW); parse_consume(parser, TOK_RPAREN, cstr("expected ')' after expression")); } -void -parse_expr(Parser *parser) { - // Can this be prec_none instead? - parse_prec(parser, PREC_ASSIGNMENT); -} - void graph_node(Node *node) { if (node == NULL) { @@ -348,7 +342,7 @@ process_file(Str path) { array_init(parser.nodes, 256, parser.storage); parse_advance(&parser); while (parser.current.kind != TOK_EOF) { - parse_expr(&parser); + parse_expr(&parser, PREC_LOW); } if (parser.err) { goto stop; -- cgit v1.2.1