37 lines
1.2 KiB
C
37 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, TypeTree* expr);
|
|
bool parse_array_type_expression(Parser* p, TypeTree* expr);
|
|
bool parse_type_expression(Parser* p, TypeTree* expr);
|
|
bool parse_expression(Parser* p, ExpressionTree* expr);
|
|
|
|
// Declaration parsing
|
|
bool parse_import_declaration(Parser* p, ModuleTree* module, bool is_public);
|
|
bool parse_alias_declaration(Parser* p, ModuleTree* module, bool is_public);
|
|
bool parse_variable_declaration(Parser* p, ModuleTree* module, bool is_public, bool is_static, bool is_const);
|
|
|
|
// Module parsing
|
|
bool parse_module_declaration(Parser* p, ModuleTree* module);
|
|
|
|
#endif
|