53 lines
966 B
C
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
|