diff options
Diffstat (limited to 'ast.h')
-rw-r--r-- | ast.h | 53 |
1 files changed, 53 insertions, 0 deletions
@@ -0,0 +1,53 @@ +#pragma once + + +typedef enum ASTtype{ + AST_LIST, + AST_WORD, + AST_NUMBER, + AST_SYMBOL, +} ASTtype; + + +typedef struct AST AST; + +typedef struct ASTlist{ + int len; + AST **nodes; +} ASTlist; + +typedef struct ASTword{ + char *word; +} ASTword; + +typedef struct ASTnumber{ + double num; +} ASTnumber; + +typedef struct ASTsymbol{ + char *name; + int symid; + //if you're not the interpreter: + // if you just allocated the ASTsymbol yourself, set symid to -1; + // else, leave symid alone. +} ASTsymbol; + +struct AST{ + ASTtype type; + union { + ASTlist l; + ASTword w; + ASTnumber n; + ASTsymbol s; + }; +}; + + +void ast_free(AST *ast); + +AST* ast_copy(const AST *ast); + +AST* ast_list(int len,AST **nodes); //these convenience functions DO NOT copy their arguments +AST* ast_word(char *word); +AST* ast_number(double num); +AST* ast_symbol(char *name); |