#ifndef PARSER_INTERNAL_H #define PARSER_INTERNAL_H #include "../parser.h" #include "../token.h" #include "../ast.h" typedef struct { TokenStream* ts; Token token; } Parser; // Core functions void parser_next_token(Parser* p); bool parser_accept(Parser* p, TokenType token); bool parser_expect(Parser* p, TokenType token, const char* msg); bool parser_peek(Parser* p, TokenType token); bool parser_require(Parser* p, TokenType token, const char* msg); char* parser_to_text(Parser* p); bool parser_accept_primitive(Parser* p); // Base parsing (expressions, types) bool parse_primitive_type_expression(Parser* p, TypeExpression* expr); bool parse_array_type_expression(Parser* p, TypeExpression* expr); bool parse_type_expression(Parser* p, TypeExpression* expr); bool parse_expression(Parser* p, Expression* expr); void free_type_expression(TypeExpression* expr); // Declaration parsing bool parse_import_declaration(Parser* p, Module* module, bool is_public); bool parse_alias_declaration(Parser* p, Module* module, bool is_public); bool parse_variable_declaration(Parser* p, Module* module, bool is_public, bool is_static, bool is_const); // Module parsing bool parse_module_declaration(Parser* p, Module* module); #endif