37 lines
No EOL
835 B
C
37 lines
No EOL
835 B
C
#include <slibs/slibs.h>
|
|
#include <tokenizer.h>
|
|
|
|
#ifndef __AST_H__
|
|
#define __AST_H__
|
|
|
|
extern const char* ASTTypeText[];
|
|
|
|
typedef enum ASTType {
|
|
AST_PROGRAM,
|
|
AST_CALL_EXPRESSION,
|
|
AST_NUMBER_LITERAL,
|
|
AST_STRING_LITERAL
|
|
} 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(Token** token);
|
|
ASTNode* ast_walk(Token** token);
|
|
void ast_print(ASTNode* node, int indent);
|
|
void ast_step(Token** token);
|
|
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 |