larpcc/parse.h
2026-10-20 01:27:50 +02:00

53 lines
966 B
C

#ifndef PARSE_H
#define PARSE_H
#include "collection.h"
#include "preproc.h"
#include "resolve.h"
#include "sema.h"
typedef struct {
char ch;
bool is_term;
unsigned short val;
} KwNodeOpt;
typedef struct {
ARRAY_FIELD(KwNodeOpt, opts);
size_t idx;
} KwNode;
typedef struct {
TokStream* tokstream;
Arena arena;
ARRAY_FIELD(KwNode, nodes);
} KwMatcher;
void kwmatcher_init(KwMatcher* m, TokStream* tokstream);
void kwmatcher_deinit(KwMatcher* m);
Tok kwmatcher_next(KwMatcher* m);
typedef enum : unsigned int {
ParserFlags_ParsingTypedef = 1 << 0,
} ParserFlags;
typedef struct Parser {
KwMatcher kwmatcher;
Sema* sema;
Arena* arena;
Arena sym_arena;
OldSyms* old_syms;
Tok curr;
ParserFlags flags;
} Parser;
void parser_init(Parser* p, TokStream* tokstream, Sema* sema, Arena* arena);
void parser_deinit(Parser* p);
AstStmt* parser_parse_stmt(Parser* p);
bool parser_done(Parser* p);
#endif