-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvisitor.hpp
More file actions
50 lines (44 loc) · 1.44 KB
/
visitor.hpp
File metadata and controls
50 lines (44 loc) · 1.44 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
#pragma once
namespace func {
class binop_expression;
class unarop_expression;
class literal_expression;
class identifier_expression;
class function_call;
class subscript_expression;
class declaration;
class function;
class program;
class block_statement;
class return_statement;
class assign_statement;
class if_statement;
class while_statement;
class subscript_assign_statement;
class visitor_base {
public:
virtual void visit(const binop_expression&) = 0;
virtual void visit(const unarop_expression&) = 0;
virtual void visit(const literal_expression&) = 0;
virtual void visit(const identifier_expression&) = 0;
virtual void visit(const function_call&) = 0;
virtual void visit(const subscript_expression&) = 0;
virtual void visit(const program&) = 0;
virtual void visit(const block_statement&) = 0;
virtual void visit(const return_statement&) = 0;
virtual void visit(const assign_statement&) = 0;
virtual void visit(const if_statement&) = 0;
virtual void visit(const while_statement&) = 0;
virtual void visit(const declaration&) = 0;
virtual void visit(const function&) = 0;
virtual void visit(const subscript_assign_statement&) = 0;
virtual ~visitor_base() = default;
};
template <typename ReturnType> class visitor : public visitor_base {
public:
virtual ReturnType&& extract_result() = 0;
};
template <> class visitor<void> : public visitor_base {
// empty
};
} // namespace func