#include #include #ifndef __AST_H__ #define __AST_H__ extern const char* ASTTypeText[]; typedef enum ASTType { AST_PROGRAM, AST_CALL_EXPRESSION, AST_NUMBER_LITERAL, AST_STRING_LITERAL, AST_NONE } ASTType; typedef sl_vec(struct ASTNode) ASTVec; typedef struct ASTNode { ASTType type; const char* name; const char* value; ASTVec body; ASTVec params; } ASTNode; ASTNode ast_parse(TokenVec* tokens); ASTNode ast_walk(TokenVec* tokens); void ast_print(ASTNode node, int indent); ASTNode ast_create_empty(ASTType type); ASTNode ast_create_program(ASTVec body); ASTNode ast_create_call_expression(const char* name, ASTVec params); ASTNode ast_create_number_literal(const char* value); ASTNode ast_create_string_literal(const char* value); #endif