minor implementation
basic expr parsing (not complex like compound, lambda)
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
|
||||
#include "globals.h"
|
||||
|
||||
|
||||
void ast_node_add_child(ASTNode *parent, ASTNode *child);
|
||||
|
||||
void ast_node_free(ASTNode *node);
|
||||
@@ -33,4 +32,30 @@ ASTNode *ast_node_type_star(Token tok_star);
|
||||
|
||||
ASTNode *ast_node_type_void();
|
||||
|
||||
ASTNode *ast_node_id(Token id);
|
||||
ASTNode *ast_node_id(Token id);
|
||||
|
||||
ASTNode *ast_node_num(Token num);
|
||||
|
||||
ASTNode *ast_node_str(Token str);
|
||||
|
||||
ASTNode *ast_node_star(Token star);
|
||||
|
||||
ASTNode *ast_node_andref(Token andref);
|
||||
|
||||
ASTNode *ast_node_expr(Token caller);
|
||||
|
||||
ASTNode *ast_node_param_list(Token tok_lparen);
|
||||
|
||||
ASTNode *ast_node_param(Token id, ASTNode *type);
|
||||
|
||||
ASTNode *ast_node_compound(Token tok_lcurly);
|
||||
|
||||
ASTNode *ast_node_lambda(ASTNode *param_list, ASTNode *body);
|
||||
|
||||
ASTNode *ast_node_stmt_return(Token tok_return, ASTNode *expr);
|
||||
|
||||
ASTNode *ast_node_stmt_expr(ASTNode *expr);
|
||||
|
||||
ASTNode *ast_node_stmt_if(Token tok_if, ASTNode *condition, ASTNode *then_branch, ASTNode *else_branch);
|
||||
|
||||
ASTNode *ast_node_stmt_set(Token tok_dollar, ASTNode *id, ASTNode *expr);
|
||||
|
||||
@@ -33,11 +33,10 @@ typedef enum {
|
||||
EOF_TOKEN,
|
||||
ERROR,
|
||||
// for parser use
|
||||
|
||||
|
||||
PARSER_USE,
|
||||
|
||||
VOID,
|
||||
|
||||
|
||||
} TokenType;
|
||||
|
||||
@@ -67,8 +66,12 @@ typedef enum {
|
||||
NODE_TYPE_STAR,
|
||||
|
||||
NODE_EXPR,
|
||||
NODE_NUM,
|
||||
|
||||
NODE_ID,
|
||||
NODE_NUM,
|
||||
NODE_STR,
|
||||
NODE_STAR,
|
||||
NODE_ANDREF,
|
||||
|
||||
NODE_PARAM_LIST,
|
||||
NODE_PARAM,
|
||||
@@ -78,9 +81,9 @@ typedef enum {
|
||||
|
||||
NODE_STMT_RETURN,
|
||||
NODE_STMT_EXPR,
|
||||
NODE_STMT_SET,
|
||||
NODE_STMT_IF,
|
||||
|
||||
|
||||
|
||||
} NodeKind;
|
||||
|
||||
typedef struct ASTNode {
|
||||
|
||||
Reference in New Issue
Block a user