Write a basic tree header file to hold the structure of the parsed code.
This commit is contained in:
parent
1a6a80d26b
commit
03f27bda18
76
include/tree.h
Normal file
76
include/tree.h
Normal file
|
@ -0,0 +1,76 @@
|
|||
#ifndef LIBABACUS_TREE_H
|
||||
#define LIBABACUS_TREE_H
|
||||
|
||||
#include "libabacus.h"
|
||||
#include "vec.h"
|
||||
|
||||
/**
|
||||
* Enum to represent the variant of a tree node.
|
||||
*/
|
||||
enum tree_variant {
|
||||
NONE,
|
||||
BASE,
|
||||
ID,
|
||||
STR,
|
||||
CHAR,
|
||||
NUM,
|
||||
BOOL,
|
||||
KW,
|
||||
OP,
|
||||
UNARY_OP,
|
||||
BLOCK,
|
||||
FUN,
|
||||
IF,
|
||||
WHILE,
|
||||
DOWHILE,
|
||||
FOR,
|
||||
CALL,
|
||||
RETURN
|
||||
};
|
||||
|
||||
/**
|
||||
* A tree node that has been parsed from the input tokens.
|
||||
*/
|
||||
struct tree {
|
||||
/**
|
||||
* The variant of tree node.
|
||||
*/
|
||||
enum tree_variant variant;
|
||||
/**
|
||||
* The string value of this tree, if applicable.
|
||||
*/
|
||||
char* string_value;
|
||||
/**
|
||||
* The int value of this tree, if applicable.
|
||||
*/
|
||||
int int_value;
|
||||
/**
|
||||
* The children of this tree node. This vector
|
||||
* will not be initialized if this tree node
|
||||
* type does not usually have children.
|
||||
*/
|
||||
vec children;
|
||||
|
||||
/**
|
||||
* The line on which this tree starts.
|
||||
*/
|
||||
size_t line;
|
||||
/**
|
||||
* The index in the string where this line begins.
|
||||
*/
|
||||
size_t line_from;
|
||||
/**
|
||||
* The beginning in the string of this tree.
|
||||
*/
|
||||
size_t from;
|
||||
/**
|
||||
* The index in the string of the next
|
||||
* thing that isn't part of this tree.
|
||||
*/
|
||||
size_t to;
|
||||
};
|
||||
|
||||
typedef enum tree_variant tree_variant;
|
||||
typedef struct tree tree;
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user