2024-03-31 21:10:56 +00:00
|
|
|
#ifndef SK_NODE_H
|
|
|
|
#define SK_NODE_H
|
|
|
|
|
|
|
|
#include "commons.h"
|
|
|
|
|
|
|
|
#define NODE_KIND(G) \
|
|
|
|
G(NODE_ROOT), \
|
2024-03-31 23:32:47 +00:00
|
|
|
G(NODE_INT), \
|
|
|
|
G(NODE_ADD), G(NODE_SUB), G(NODE_MUL),\
|
|
|
|
G(NODE_DIV), G(NODE_POW), G(NODE_MOD),\
|
2024-04-01 12:00:06 +00:00
|
|
|
G(NODE_USUB), G(NODE_ASSERT_EQ), \
|
|
|
|
G(NODE_BOOL), G(NODE_AND), G(NODE_OR), \
|
2024-04-01 21:33:43 +00:00
|
|
|
G(NODE_NOT), G(NODE_FLOAT), G(NODE_STRING), \
|
|
|
|
G(NODE_LT), G(NODE_LE), G(NODE_GT), G(NODE_GE), \
|
2024-04-02 15:33:31 +00:00
|
|
|
G(NODE_EQUAL), G(NODE_NOT_EQUAL), G(NODE_VAR_DECL), \
|
|
|
|
G(NODE_CONST_DECL), G(NODE_IDENT), G(NODE_ASSIGN), \
|
|
|
|
G(NODE_BLOCK)
|
2024-03-31 21:10:56 +00:00
|
|
|
|
|
|
|
SK_ENUM_H(NodeKind, NODE_KIND);
|
|
|
|
|
|
|
|
struct node
|
|
|
|
{
|
|
|
|
NodeKind kind;
|
|
|
|
struct vec children;
|
|
|
|
struct token* token;
|
|
|
|
};
|
|
|
|
|
|
|
|
void node_init(struct node* self,
|
|
|
|
NodeKind kind,
|
|
|
|
struct token* token);
|
|
|
|
void node_free(struct node* self);
|
|
|
|
|
|
|
|
void node_push_new_child(struct node* self, struct node* child);
|
|
|
|
|
|
|
|
void node_str(struct node* self, struct str* dest);
|
|
|
|
#endif
|