diff options
author | Bad Diode <bd@badd10de.dev> | 2024-06-16 15:43:19 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2024-06-16 15:43:19 +0200 |
commit | d6e8c277b13ee5a9878c78dd7d0104699202a161 (patch) | |
tree | 2ec1218618b6f9760d1ab45a8f4b603c3f9cace6 /src/main.c | |
parent | e9e051992c86f10fbc6c131415bb5776147884c6 (diff) | |
download | bdl-d6e8c277b13ee5a9878c78dd7d0104699202a161.tar.gz bdl-d6e8c277b13ee5a9878c78dd7d0104699202a161.zip |
Remove redundant function name and update precedence naming
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 24 |
1 files changed, 9 insertions, 15 deletions
@@ -102,7 +102,7 @@ typedef struct Parser { | |||
102 | 102 | ||
103 | typedef enum { | 103 | typedef 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 | ||
117 | typedef void (*ParseFn)(Parser *); | 117 | typedef void (*ParseFn)(Parser *); |
@@ -122,7 +122,7 @@ typedef struct { | |||
122 | ParsePrecedence precedence; | 122 | ParsePrecedence precedence; |
123 | } ParseRule; | 123 | } ParseRule; |
124 | 124 | ||
125 | void parse_expr(Parser *parser); | 125 | void parse_expr(Parser *parser, ParsePrecedence precedence); |
126 | void parse_advance(Parser *parser); | 126 | void parse_advance(Parser *parser); |
127 | 127 | ||
128 | void parse_grouping(Parser *parser); | 128 | void 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 | ||
175 | static void | 175 | void |
176 | parse_prec(Parser *parser, ParsePrecedence precedence) { | 176 | parse_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 | ||
263 | void | 263 | void |
264 | parse_expr(Parser *parser) { | ||
265 | // Can this be prec_none instead? | ||
266 | parse_prec(parser, PREC_ASSIGNMENT); | ||
267 | } | ||
268 | |||
269 | void | ||
270 | graph_node(Node *node) { | 264 | graph_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; |