-
Notifications
You must be signed in to change notification settings - Fork 39
Expand file tree
/
Copy pathvisitor.h
More file actions
51 lines (43 loc) · 2.18 KB
/
Copy pathvisitor.h
File metadata and controls
51 lines (43 loc) · 2.18 KB
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
/* visitor.h - Visitor pattern interface for AST traversal */
#ifndef VISITOR_H
#define VISITOR_H
#include "ast.h"
/* Forward declarations */
typedef struct Visitor Visitor;
/* Visitor interface - base class for all visitors */
struct Visitor
{
/* Expression visitors - return void* for flexibility */
void *(*visit_int_literal)(Visitor *self, ASTNode *node);
void *(*visit_float_literal)(Visitor *self, ASTNode *node);
void *(*visit_double_literal)(Visitor *self, ASTNode *node);
void *(*visit_char_literal)(Visitor *self, ASTNode *node);
void *(*visit_short_literal)(Visitor *self, ASTNode *node);
void *(*visit_boolean_literal)(Visitor *self, ASTNode *node);
void *(*visit_string_literal)(Visitor *self, ASTNode *node);
void *(*visit_identifier)(Visitor *self, ASTNode *node);
void *(*visit_binary_operation)(Visitor *self, ASTNode *node);
void *(*visit_unary_operation)(Visitor *self, ASTNode *node);
void *(*visit_array_access)(Visitor *self, ASTNode *node);
void *(*visit_function_call)(Visitor *self, ASTNode *node);
void *(*visit_sizeof)(Visitor *self, ASTNode *node);
/* Statement visitors - return void */
void (*visit_declaration)(Visitor *self, ASTNode *node);
void (*visit_assignment)(Visitor *self, ASTNode *node);
void (*visit_if_statement)(Visitor *self, ASTNode *node);
void (*visit_for_statement)(Visitor *self, ASTNode *node);
void (*visit_while_statement)(Visitor *self, ASTNode *node);
void (*visit_do_while_statement)(Visitor *self, ASTNode *node);
void (*visit_switch_statement)(Visitor *self, ASTNode *node);
void (*visit_break_statement)(Visitor *self, ASTNode *node);
void (*visit_return_statement)(Visitor *self, ASTNode *node);
void (*visit_function_definition)(Visitor *self, ASTNode *node);
void (*visit_statement_list)(Visitor *self, ASTNode *node);
void (*visit_print_statement)(Visitor *self, ASTNode *node);
void (*visit_error_statement)(Visitor *self, ASTNode *node);
};
/* Generic AST traversal function */
void ast_accept(ASTNode *node, Visitor *visitor);
/* Helper function to traverse child nodes */
void visit_children(ASTNode *node, Visitor *visitor);
#endif /* VISITOR_H */