From 2e7cab34d22a0174909030942671e95d5a3c769f Mon Sep 17 00:00:00 2001 From: hachem Date: Sun, 30 Aug 2026 03:38:46 +0200 Subject: add: top level data declarations --- src/parser/parser.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/parser/parser.c') 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"); -- cgit v1.3