Files
c2/v0/parser/internal.h
T
seeseemelk ea55dedd07 Refactor AST and Parser into modular subdirectories
- Split ast.h into granular headers in v0/ast/
- Split parser.c into modular implementation files in v0/parser/
- Move and rename parser tests to v0/parser/test_*.c
- Update build system (include.mk) with modular sub-makefiles
- Maintain v0/ast.h and v0/parser.h as umbrella headers
2026-04-30 21:23:07 +02:00

38 lines
1.2 KiB
C

#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