diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-01-18 20:42:54 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-01-18 20:49:30 +0330 |
commit | 43392fc66ab207e53a6924a2edbcd7ca0acecea8 (patch) | |
tree | 5a064c4e144035d1a07f31f767417b9e44b2ebbf /src/compiler/ast-tree.h |
initial commit
Diffstat (limited to 'src/compiler/ast-tree.h')
-rw-r--r-- | src/compiler/ast-tree.h | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/compiler/ast-tree.h b/src/compiler/ast-tree.h new file mode 100644 index 0000000..758d113 --- /dev/null +++ b/src/compiler/ast-tree.h @@ -0,0 +1,64 @@ +#pragma once + +#include "compiler/parser.h" +#include <stddef.h> + +typedef enum AstTreeToken { + AST_TREE_TOKEN_FUNCTION, + AST_TREE_TOKEN_KEYWORD_PRINT, + AST_TREE_TOKEN_NONE, +} AstTreeToken; + +typedef struct AstTreeType { +} AstTreeType; + +typedef struct AstTree { + AstTreeToken token; + void *metadata; +} AstTree; + +typedef struct AstTreeVariable { + char *name_begin; + char *name_end; + AstTreeType type; + AstTree *value; +} AstTreeVariable; + +typedef struct AstTreeVariables { + AstTreeVariable **data; + size_t size; +} AstTreeVariables; + +typedef struct AstTreeRoot { + AstTreeVariables variables; +} AstTreeRoot; + +typedef struct AstTreeScope { + AstTreeVariable *variables; + size_t variables_size; + AstTree *expressions; + size_t expressions_size; +} AstTreeScope; + +extern const char *AST_TREE_TOKEN_STRINGS[]; + +void astTreePrint(const AstTree *tree,int indent); +void astTreeRootPrint(const AstTreeRoot *root); + +void astTreeDestroy(AstTree tree); +void astTreeDelete(AstTree *tree); +void astTreeRootDelete(AstTreeRoot *root); + +AstTree *newAstTree(AstTreeToken token, void *metadata); + +AstTreeRoot *makeAstTree(ParserNode *parsedRoot); + +void pushVariable(AstTreeVariables *variables, size_t *variables_size, + AstTreeVariable *variable); + +AstTree *astTreeParse(ParserNode *parserNode, AstTreeVariables *variables, + size_t variables_size); + +AstTree *astTreeParseFunction(ParserNode *parserNode, + AstTreeVariables *variables, + size_t variables_size); |