diff options
author | c+1 | 2023-11-17 18:58:54 -0500 |
---|---|---|
committer | c+1 | 2023-11-17 18:58:54 -0500 |
commit | 2cc68205a1c0b746ad405607940e7183c4fb09b0 (patch) | |
tree | dd16a65479194da364929c71a22d6fb01b58f36a /src/include/tree.h | |
parent | 7be0923d486cd6ed2e304d3673146563ad677ea7 (diff) |
Cleaned up.
Diffstat (limited to 'src/include/tree.h')
-rw-r--r-- | src/include/tree.h | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/src/include/tree.h b/src/include/tree.h index fa64fce..b878852 100644 --- a/src/include/tree.h +++ b/src/include/tree.h @@ -3,8 +3,10 @@ #include "util.h" +/* The Abstract Syntax Tree (AST) structure. */ typedef struct TREE { enum TREE_TYPE { + TREE_TYPE_BLOCK, TREE_TYPE_LINT, TREE_TYPE_LSTR, TREE_TYPE_TAG, @@ -15,44 +17,51 @@ typedef struct TREE { } type; union TREE_DATA{ + /* Block. */ + struct TREE_DATA_BLOCK { + /* The first expression in the block. */ + struct TREE* val; + /* The next expression in the block. If it's'nt a block, end the block. */ + struct TREE* nxt; + } block; - /* literal integer */ + /* Literal integer. */ struct TREE_DATA_LINT { int val; } lint; - /* literal string */ + /* Literal string. */ struct TREE_DATA_LSTR { size_t len; char* val; } lstr; - /* tags */ + /* Tags. */ struct TREE_DATA_TAG { char* val; struct TREE_DATA_TAG* nxt; } tag; - /* definition arguments */ + /* Definition arguments. */ struct TREE_DATA_DARG { struct TREE_DATA_TAG* tag; struct TREE_DATA_DARG* nxt; } darg; - /* call arguments */ + /* Call arguments. */ struct TREE_DATA_CARG { struct TREE* val; struct TREE_DATA_CARG* nxt; } carg; - /* definitions */ + /* Definitions. */ struct TREE_DATA_DEF { struct TREE_DATA_TAG* tag; struct TREE_DATA_DARG* arg; struct TREE* val; } def; - /* calls */ + /* Calls. */ struct TREE_DATA_CAL { char* target; struct TREE_DATA_CARG* arg; @@ -61,13 +70,24 @@ typedef struct TREE { } data; } tree_t; +/* Create a new AST. */ tree_t* tree_init(int type); +/* Destroy the AST. */ void tree_destroy(tree_t* tree); -/* TODO: +/* TODO: Implement a better target organization structure that's better for searching. */ +typedef struct TREE_TARG { + tree_t* tree; + struct TREE_TARG* nxt; +} tree_targ_t; - Array of targets, for now just linear but implement something better in the future - tree_targ_t struct contains pointer to a tree_t +/* Create a new target. */ +tree_targ_t* tree_targ_init(tree_t* tree); +/* + Destroy a target. + - Frees all subsequent targets in `nxt`. + - Does not free the `tree`. */ +void tree_targ_destroy(tree_targ_t* targ); #endif |