Files
corelang/parser.h
2022-05-01 13:51:34 +02:00

51 lines
1.1 KiB
C

#pragma once
typedef struct Expr Expr;
typedef struct Scope Scope;
typedef struct AST_Node AST_Node;
typedef struct Parser_Error Parser_Error;
struct Parser_Error{
Parser_Error *next;
String message;
Token *token;
};
struct Scope{
Scope *next;
AST_Node *first;
AST_Node *last;
};
typedef struct Parser{
Arena main_arena;
Arena intern_table_arena;
Arena symbol_table_arena;
Scope *scope_free_list;
Scope *scope_stack;
Scope *global_scope;
S64 symbols_inserted;
AST_Node *symbols;
S64 symbols_count;
S64 interns_in_bytes;
S64 interns_inserted;
Intern_String *interns;
S64 interns_count;
U8 *first_keyword;
U8 *last_keyword;
Parser_Error *first_error;
Parser_Error *last_error;
Tokens tokens;
}Parser;
function Intern_String intern_string(Parser *p, String string);
function Token *token_get(Parser *p);
function B32 intern_compare(Intern_String a, Intern_String b);
function void parser_push_scope(Parser *p);
function AST_Node *symbol_register_basic_type(Parser *p, Intern_String string, SizeU size);
function void ast_copy_symbol(AST_Node *dst, AST_Node *src);