diff options
author | Bad Diode <bd@badd10de.dev> | 2022-04-06 08:34:40 -0300 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-04-06 08:34:40 -0300 |
commit | 725ba80c048069d15b2668ad0fa0e123819ec410 (patch) | |
tree | 79469056bfda94ef9f6a960457c98f03129d8b64 /src | |
parent | a2274155bce516f904486e7f0ddf20d01093251b (diff) | |
download | bdl-725ba80c048069d15b2668ad0fa0e123819ec410.tar.gz bdl-725ba80c048069d15b2668ad0fa0e123819ec410.zip |
Prepare parse tree for return
Diffstat (limited to 'src')
-rw-r--r-- | src/parser.c | 24 | ||||
-rw-r--r-- | src/parser.h | 9 |
2 files changed, 25 insertions, 8 deletions
diff --git a/src/parser.c b/src/parser.c index 2c1c24f..ba063f1 100644 --- a/src/parser.c +++ b/src/parser.c | |||
@@ -3,17 +3,17 @@ | |||
3 | 3 | ||
4 | Token | 4 | Token |
5 | next_token(Parser *parser) { | 5 | next_token(Parser *parser) { |
6 | return parser->tokens[parser->current++]; | 6 | return parser->tokens[parser->current_token++]; |
7 | } | 7 | } |
8 | 8 | ||
9 | Token | 9 | Token |
10 | peek_token(Parser *parser) { | 10 | peek_token(Parser *parser) { |
11 | return parser->tokens[parser->current]; | 11 | return parser->tokens[parser->current_token]; |
12 | } | 12 | } |
13 | 13 | ||
14 | bool | 14 | bool |
15 | has_next(Parser *parser) { | 15 | has_next(Parser *parser) { |
16 | return parser->current < array_size(parser->tokens); | 16 | return parser->current_token < array_size(parser->tokens); |
17 | } | 17 | } |
18 | 18 | ||
19 | bool | 19 | bool |
@@ -408,12 +408,20 @@ parse_next(Parser *parser) { | |||
408 | } | 408 | } |
409 | } | 409 | } |
410 | 410 | ||
411 | void | 411 | ParseTree * |
412 | alloc_parsetree(void) { | ||
413 | ParseTree *parse_tree = malloc(sizeof(ParseTree)); | ||
414 | array_init(parse_tree->roots, 0); | ||
415 | return parse_tree; | ||
416 | } | ||
417 | |||
418 | ParseTree * | ||
412 | parse(Token *tokens) { | 419 | parse(Token *tokens) { |
413 | Parser parser = { | 420 | Parser parser = { |
414 | .tokens = tokens, | 421 | .tokens = tokens, |
415 | .current = 0, | 422 | .current_token = 0, |
416 | }; | 423 | }; |
424 | parser.parse_tree = alloc_parsetree(); | ||
417 | 425 | ||
418 | // DEBUG: TOKENS | 426 | // DEBUG: TOKENS |
419 | printf("-- tokens --\n"); | 427 | printf("-- tokens --\n"); |
@@ -423,9 +431,13 @@ parse(Token *tokens) { | |||
423 | while (has_next(&parser)) { | 431 | while (has_next(&parser)) { |
424 | Node *node = parse_next(&parser); | 432 | Node *node = parse_next(&parser); |
425 | if (node == NULL) { | 433 | if (node == NULL) { |
426 | return; | 434 | return NULL; |
427 | } | 435 | } |
436 | // DEBUG:... | ||
428 | print_node(node); | 437 | print_node(node); |
429 | printf("\n"); | 438 | printf("\n"); |
439 | |||
440 | array_push(parser.parse_tree->roots, node); | ||
430 | } | 441 | } |
442 | return parser.parse_tree; | ||
431 | } | 443 | } |
diff --git a/src/parser.h b/src/parser.h index 47316b9..4d871ad 100644 --- a/src/parser.h +++ b/src/parser.h | |||
@@ -4,12 +4,17 @@ | |||
4 | #include "lexer.h" | 4 | #include "lexer.h" |
5 | #include "nodes.h" | 5 | #include "nodes.h" |
6 | 6 | ||
7 | typedef struct ParseTree { | ||
8 | Node **roots; | ||
9 | } ParseTree; | ||
10 | |||
7 | typedef struct Parser { | 11 | typedef struct Parser { |
8 | Token *tokens; | 12 | Token *tokens; |
9 | size_t current; | 13 | size_t current_token; |
14 | ParseTree *parse_tree; | ||
10 | } Parser; | 15 | } Parser; |
11 | 16 | ||
12 | void parse(Token *tokens); | 17 | ParseTree * parse(Token *tokens); |
13 | Node * parse_next(Parser *parser); | 18 | Node * parse_next(Parser *parser); |
14 | 19 | ||
15 | #endif // BDL_PARSER_H | 20 | #endif // BDL_PARSER_H |