#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