#pragma once #include #include /** * Token Definitions */ typedef enum { PROGRAM, /* use for syntax */ LBRACK, RBRACK, LCURLY, RCURLY, LPAREN, RPAREN, SEMI, COMMA, ARROW, STAR, ANDREF, DOLLAR, COMMENT, ID, NUM, STRING_LITERAL, VAL, RETURN, IF, ELSE, EOF_TOKEN, ERROR } TokenType; typedef struct { size_t len; char *string; } TokenString; typedef struct { TokenType type; uint32_t line; TokenString data; } Token; /** * AST Node Definitions */ typedef enum NodeKind { NODE_PROGRAM, NODE_DEFN, NODE_TYPE, NODE_EXPR, NODE_ATOM, NODE_STMT, NODE_BLOCK, NODE_LAMBDA, NODE_COMPOUND, NODE_PARAMS } NodeKind; typedef struct ASTNode { NodeKind kind; Token token; struct ASTNode **children; size_t child_count; size_t capacity; } ASTNode;