diff options
| author | hachem <im@hachem.wtf> | 2026-08-30 03:38:46 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-08-30 03:38:46 +0200 |
| commit | 2e7cab34d22a0174909030942671e95d5a3c769f (patch) | |
| tree | fe2d5a54f20b7908936c8dc9151023e440168d46 /src/parser/parser.c | |
| parent | 5767110816ca9452ef77d15245d1a747bfdd896b (diff) | |
add: top level data declarations
Diffstat (limited to 'src/parser/parser.c')
| -rw-r--r-- | src/parser/parser.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/parser/parser.c b/src/parser/parser.c index 5845ad4..4fb85ef 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -58,6 +58,25 @@ static bool parse_const(struct Parser* parser, struct Program* program) return true; } +static bool parse_data(struct Parser* parser, struct Program* program) +{ + struct DataDecl decl; + + if (!consume(parser, TOKEN_IDENTIFIER, "expected data name after 'data'")) + return false; + decl.name = parser->previous; + + if (!consume(parser, TOKEN_EQUAL, "expected '=' after data name")) + return false; + + if (!consume(parser, TOKEN_STRING, "expected string value after '='")) + return false; + decl.value = parser->previous; + + add_data(program, decl); + return true; +} + bool parse_program(struct Lexer* lexer, struct Program* out) { struct Parser parser; @@ -75,6 +94,12 @@ bool parse_program(struct Lexer* lexer, struct Program* out) if (!parse_const(&parser, out)) return false; } + else if (check(&parser, TOKEN_DATA)) + { + advance_parser(&parser); + if (!parse_data(&parser, out)) + return false; + } else { error_at(&parser, parser.current, "expected a top-level declaration"); |
