38 lines
1.0 KiB
C
38 lines
1.0 KiB
C
#ifndef RZ_NODE_H
|
|
#define RZ_NODE_H
|
|
|
|
#include "commons.h"
|
|
|
|
#define NODE_TYPE(G) \
|
|
G(NODE_MOD), \
|
|
G(NODE_NUM), G(NODE_BOOL), G(NODE_STR), \
|
|
G(NODE_ASSERT), \
|
|
G(NODE_EQ), G(NODE_NE), \
|
|
G(NODE_LT), G(NODE_LE), G(NODE_GT), G(NODE_GE), \
|
|
G(NODE_ADD), G(NODE_SUB), G(NODE_MUL), G(NODE_DIV), \
|
|
G(NODE_MODULO), G(NODE_POW), G(NODE_OPAR), G(NODE_CPAR)
|
|
|
|
RZ_ENUM_H(NodeType, NODE_TYPE);
|
|
|
|
typedef struct {
|
|
NodeType type;
|
|
str_t value;
|
|
int line;
|
|
|
|
struct {
|
|
struct node_t** data;
|
|
size_t size;
|
|
size_t cap;
|
|
} children;
|
|
} node_t;
|
|
|
|
void node_init(node_t* node, NodeType type, char* value, int line);
|
|
void node_free(node_t* node);
|
|
|
|
void node_add_new_child(node_t* node, node_t* child);
|
|
node_t* node_child(node_t* node, size_t index);
|
|
|
|
size_t node_str(node_t* node, char* buffer, size_t size);
|
|
|
|
#endif
|