From 43392fc66ab207e53a6924a2edbcd7ca0acecea8 Mon Sep 17 00:00:00 2001 From: A404M Date: Sat, 18 Jan 2025 20:42:54 +0330 Subject: initial commit --- src/compiler/ast-tree.h | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/compiler/ast-tree.h (limited to 'src/compiler/ast-tree.h') 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 + +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); -- cgit v1.2.3