42 lines
776 B
C
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
|