#pragma once #include #include /** * Token Definitions */ typedef enum { LBRACK, RBRACK, LCURLY, RCURLY, LPAREN, RPAREN, SEMI, COMMA, ARROW, STAR, ANDREF, DOLLAR, COMMENT, ID, NUM, STRING_LITERAL, VAL, RETURN, IF, ELSE, EOF_TOKEN, ERROR, // for parser use PARSER_USE, VOID, } TokenType; typedef struct { size_t len; char *string; } TokenString; typedef struct { TokenType type; uint32_t line; TokenString data; } Token; /** * AST Node Definitions */ typedef enum { NODE_PROGRAM, NODE_DEFN, NODE_TYPE_SIMPLE, NODE_TYPE_COMPLEX, NODE_TYPE_PARAM, NODE_TYPE_OUT, NODE_TYPE_STAR, NODE_EXPR, NODE_NUM, NODE_ID, NODE_PARAM_LIST, NODE_PARAM, NODE_LAMBDA, NODE_COMPOUND, NODE_STMT_RETURN, NODE_STMT_EXPR, } NodeKind; typedef struct ASTNode { NodeKind kind; Token token; struct ASTNode **children; size_t count; size_t capacity; } ASTNode;