-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathast.h
96 lines (89 loc) · 1.63 KB
/
ast.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#ifndef AST_H
#define AST_H
typedef struct {
uint32_t first_line;
uint32_t first_column;
uint32_t last_line;
uint32_t last_column;
int is_generated;
} ast_node_location;
typedef enum {
ASSIGNMENT_NODE=1,
IDENTIFIER_NODE,
INT_NODE,
REAL_NODE,
EXPRESSIONS_NODE,
FOR_NODE,
CALL_NODE,
EMPTY_NODE,
ARR_LIT_NODE,
FUNC_NODE,
PARAMS_NODE,
PARAM_NODE,
STR_COMPS_NODE,
STR_COMP_IMM_NODE,
STR_COMP_EXPANSION_NODE,
STR_COMP_SPLAT_EXPANSION_NODE,
NULL_NODE,
TRUE_NODE,
FALSE_NODE,
IF_NODE,
ASSIGN_DEFAULT_NODE,
WHILE_NODE,
ARGS_NODE,
ARG_NODE,
LOCAL_NODE,
UPVAR_NODE,
GLOBAL_NODE,
HASH_LIT_NODE,
INDEX_NODE,
FIELD_NODE,
NS_NODE,
RETURN_NODE,
AND_NODE,
OR_NODE,
TAND_NODE,
TOR_NODE,
ARR_SPLAT_NODE,
HASH_SPLAT_NODE,
GUARD_NODE,
TRY_CATCH_NODE,
THROW_NODE,
COMMANDS_PIPELINE_NODE,
COMMANDS_PIPE_NODE,
COMMAND_NODE,
BREAK_NODE,
CONTINUE_NODE,
REDIR_NODE,
SWITCH_NODE,
SUPER_NODE,
REGEXP_NODE,
SET_NS_NODE,
GET_NS_NODE,
SECTION_NODE,
NUMBER_OF_AST_NODE_TYPES,
} ast_node_type;
typedef struct ast_node {
ast_node_type type;
char *name;
char *warning;
// MAYBE TODO: make it int but store parsed long int values somewhere else
long int number;
void *data;
// Children
struct ast_node *first_child;
struct ast_node *last_child;
struct ast_node *next_sibling;
ast_node_location location;
} ast_node;
typedef enum {
SWITCH_NODE_SWITCH = 2,
SWITCH_NODE_ESWITCH = 3,
SWITCH_NODE_MATCH = 4,
SWITCH_NODE_EMATCH = 5,
SWITCH_NODE_COND = 6,
SWITCH_NODE_ECOND = 7,
} switch_node_subtype;
extern char *NGS_AST_NODE_TYPES_NAMES[NUMBER_OF_AST_NODE_TYPES];
void print_ast(ast_node *node, int level);
#endif