aboutsummaryrefslogtreecommitdiff
path: root/src/include/tree.h
diff options
context:
space:
mode:
authorc+12023-11-17 18:58:54 -0500
committerc+12023-11-17 18:58:54 -0500
commit2cc68205a1c0b746ad405607940e7183c4fb09b0 (patch)
treedd16a65479194da364929c71a22d6fb01b58f36a /src/include/tree.h
parent7be0923d486cd6ed2e304d3673146563ad677ea7 (diff)
Cleaned up.
Diffstat (limited to 'src/include/tree.h')
-rw-r--r--src/include/tree.h40
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