mrk/include/mrk/ast.h

42 lines
776 B
C

#ifndef MRK_AST
#define MRK_AST
#include <stdbool.h>
#include <stdlib.h>
#include "mrk/common.h"
#define MRK_AST_NODE_ARGS 4
typedef enum mrk_ast_node_type {
mrk_ast_node_type_none = 0,
mrk_ast_node_type_header,
mrk_ast_node_type_text,
mrk_ast_node_type_space,
} mrk_ast_node_type;
typedef struct mrk_ast_node {
struct {
struct mrk_ast_node **arr;
size_t len;
} children;
mrk_ast_node_type type;
struct {
void *ptr;
size_t num;
bool state;
} args[MRK_AST_NODE_ARGS];
} mrk_ast_node;
/**
* Initialize a new AST node struct.
*/
mrk_err mrk_ast_node_init(mrk_ast_node **out);
/**
* Allocate a new empty child node and return a pointer to it.
*/
mrk_err mrk_ast_node_child_append(mrk_ast_node **out, mrk_ast_node *parent);
#endif