aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-06-16 15:43:19 +0200
committerBad Diode <bd@badd10de.dev>2024-06-16 15:43:19 +0200
commitd6e8c277b13ee5a9878c78dd7d0104699202a161 (patch)
tree2ec1218618b6f9760d1ab45a8f4b603c3f9cace6
parente9e051992c86f10fbc6c131415bb5776147884c6 (diff)
downloadbdl-d6e8c277b13ee5a9878c78dd7d0104699202a161.tar.gz
bdl-d6e8c277b13ee5a9878c78dd7d0104699202a161.zip
Remove redundant function name and update precedence naming
-rw-r--r--src/main.c24
1 files 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 {
102 102
103typedef enum { 103typedef enum {
104 PREC_NONE = 0, 104 PREC_NONE = 0,
105 PREC_ASSIGNMENT, // = FIXME: this may not happen in our lang? 105 PREC_LOW, // lowest precedence
106 PREC_OR, // || 106 PREC_OR, // ||
107 PREC_AND, // && 107 PREC_AND, // &&
108 PREC_EQUALITY, // == != 108 PREC_EQUALITY, // == !=
@@ -111,7 +111,7 @@ typedef enum {
111 PREC_FACTOR, // * / 111 PREC_FACTOR, // * /
112 PREC_UNARY, // ! - 112 PREC_UNARY, // ! -
113 PREC_CALL, // . () 113 PREC_CALL, // . ()
114 PREC_PRIMARY 114 PREC_PRIMARY // highest precedence
115} ParsePrecedence; 115} ParsePrecedence;
116 116
117typedef void (*ParseFn)(Parser *); 117typedef void (*ParseFn)(Parser *);
@@ -122,7 +122,7 @@ typedef struct {
122 ParsePrecedence precedence; 122 ParsePrecedence precedence;
123} ParseRule; 123} ParseRule;
124 124
125void parse_expr(Parser *parser); 125void parse_expr(Parser *parser, ParsePrecedence precedence);
126void parse_advance(Parser *parser); 126void parse_advance(Parser *parser);
127 127
128void parse_grouping(Parser *parser); 128void parse_grouping(Parser *parser);
@@ -172,8 +172,8 @@ parse_consume(Parser *parser, TokenKind kind, Str msg) {
172 parse_emit_err(parser, parser->current, msg); 172 parse_emit_err(parser, parser->current, msg);
173} 173}
174 174
175static void 175void
176parse_prec(Parser *parser, ParsePrecedence precedence) { 176parse_expr(Parser *parser, ParsePrecedence precedence) {
177 parse_advance(parser); 177 parse_advance(parser);
178 ParseFn prefix = parse_rules[parser->previous.kind].prefix; 178 ParseFn prefix = parse_rules[parser->previous.kind].prefix;
179 if (prefix == NULL) { 179 if (prefix == NULL) {
@@ -202,7 +202,7 @@ parse_unary(Parser *parser) {
202 print_token(prev); 202 print_token(prev);
203#endif 203#endif
204 TokenKind kind = parser->previous.kind; 204 TokenKind kind = parser->previous.kind;
205 parse_expr(parser); 205 parse_expr(parser, PREC_LOW);
206 // TODO: ... 206 // TODO: ...
207 switch (kind) { 207 switch (kind) {
208 // case TOKEN_MINUS: emitByte(OP_NEGATE); break; 208 // case TOKEN_MINUS: emitByte(OP_NEGATE); break;
@@ -219,7 +219,7 @@ parse_binary(Parser *parser) {
219#endif 219#endif
220 TokenKind kind = prev.kind; 220 TokenKind kind = prev.kind;
221 ParseRule rule = parse_rules[kind]; 221 ParseRule rule = parse_rules[kind];
222 parse_prec(parser, rule.precedence + 1); 222 parse_expr(parser, rule.precedence + 1);
223 223
224 Node *node; 224 Node *node;
225 switch (kind) { 225 switch (kind) {
@@ -256,17 +256,11 @@ parse_grouping(Parser *parser) {
256 print("parsing group "); 256 print("parsing group ");
257 print_token(parser->previous); 257 print_token(parser->previous);
258#endif 258#endif
259 parse_expr(parser); 259 parse_expr(parser, PREC_LOW);
260 parse_consume(parser, TOK_RPAREN, cstr("expected ')' after expression")); 260 parse_consume(parser, TOK_RPAREN, cstr("expected ')' after expression"));
261} 261}
262 262
263void 263void
264parse_expr(Parser *parser) {
265 // Can this be prec_none instead?
266 parse_prec(parser, PREC_ASSIGNMENT);
267}
268
269void
270graph_node(Node *node) { 264graph_node(Node *node) {
271 if (node == NULL) { 265 if (node == NULL) {
272 return; 266 return;
@@ -348,7 +342,7 @@ process_file(Str path) {
348 array_init(parser.nodes, 256, parser.storage); 342 array_init(parser.nodes, 256, parser.storage);
349 parse_advance(&parser); 343 parse_advance(&parser);
350 while (parser.current.kind != TOK_EOF) { 344 while (parser.current.kind != TOK_EOF) {
351 parse_expr(&parser); 345 parse_expr(&parser, PREC_LOW);
352 } 346 }
353 if (parser.err) { 347 if (parser.err) {
354 goto stop; 348 goto stop;