summaryrefslogtreecommitdiff
path: root/src/frontend/node.h
blob: 71c8182361d424ee81fefc2183adc033dec82197 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#ifndef NODE_H
#define NODE_H

#include <stddef.h>

enum node_type{PROG, FUNC, STMT, EXPR, CONST};
enum node_op{COMP_SYM, NEG_SYM, PLUS_SYM, MINUS_SYM, MULT_SYM, DIV_SYM, MOD_SYM};

extern const char* node_types[];
extern const char* node_ops[];

typedef union {
  char *name;
  int val;
  enum node_op op;
} node_field;

typedef struct Node {
  enum node_type type;
  node_field field;
  struct Node **children;
  size_t num_children;
} Node;

Node *create_node(enum node_type type);
Node *create_function(char *name);
Node *create_expr(enum node_op op);
Node *create_const(int val);
void add_child(Node *parent, Node *child);
void free_node(Node *node);
void *print_node(Node *node, int indent);

#endif