Files
fz-lang/include/compiler/fzl_parser.h
T

66 lines
1.1 KiB
C

#ifndef FZL_PARSER_H
#define FZL_PARSER_H
#include <compiler/fzl_reader.h>
#include <compiler/fzl_token.h>
#include <stddef.h>
// AST node type
typedef enum
{
FZL_NODETYPE_BLOCK,
FZL_NODETYPE_CALL,
FZL_NODETYPE_LITERAL,
} fzl_nodetype_t;
// AST node descriptor
typedef struct fzl_node
{
fzl_nodetype_t type;
fzl_token_t *token;
struct fzl_node *parent;
struct fzl_node *next;
union
{
struct
{
struct fzl_node **entries;
size_t entry_count;
} list;
};
} fzl_node_t;
// Token sequence parser descriptor
typedef struct
{
fzl_reader_ll_t *first;
size_t token_count;
fzl_reader_ll_t *cursor;
fzl_node_t *root;
} fzl_parser_t;
// Allocate parser
fzl_parser_t *fzl_mkparser(fzl_reader_ll_t *first);
// Allocate new node
fzl_node_t *fzl_mknode(fzl_nodetype_t type, fzl_token_t *tok);
// Parse tokens
int fzl_parse(fzl_parser_t *parser);
// Get last parser error
char *fzl_parser_geterror();
// Free node
void fzl_freenode(fzl_node_t *node);
// Free entire AST going from root node
void fzl_freeast(fzl_node_t *root);
// Free parser
void fzl_freeparser(fzl_parser_t *parser);
#endif // FZL_PARSER_H