-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathast_emitter.hpp
86 lines (67 loc) · 2.62 KB
/
ast_emitter.hpp
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
#pragma once
#include <ostream>
#include <string>
#include <cstdint>
#include "visitor.hpp"
#include "expr.hpp"
#include "stmt.hpp"
#include "stmt_ins.hpp"
#include "control_word.hpp"
#include "ast.hpp"
namespace dsp {
namespace ast {
struct emitter_error_t : std::runtime_error
{
emitter_error_t(const std::string& msg)
: std::runtime_error(msg)
{ }
};
struct emitter_t : visitor_t<uint32_t>
{
emitter_t(variables_t& variables)
: variables(variables) {}
variables_t& variables;
uint32_t visit(const binary_t * binary) const;
uint32_t visit(const grouping_t * grouping) const;
uint32_t visit(const identifier_t * identifier) const;
uint32_t visit(const literal_t * literal) const;
uint32_t visit(const unary_t * unary) const;
uint32_t visit(const op::andl_t * andl) const;
uint32_t visit(const op::orl_t * orl) const;
uint32_t visit(const op::xorl_t * xorl) const;
uint32_t visit(const op::add_t * add) const;
uint32_t visit(const op::sub_t * sub) const;
uint32_t visit(const op::ad2_t * ad2) const;
uint32_t visit(const op::sr_t * sr) const;
uint32_t visit(const op::rr_t * rr) const;
uint32_t visit(const op::sl_t * sl) const;
uint32_t visit(const op::rl_t * rl) const;
uint32_t visit(const op::rl8_t * rl8) const;
uint32_t visit(const op::mov_ram_x_t * mov_ram_x) const;
uint32_t visit(const op::mov_mul_p_t * mov_mul_p) const;
uint32_t visit(const op::mov_ram_p_t * mov_ram_p) const;
uint32_t visit(const op::mov_ram_y_t * mov_ram_y) const;
uint32_t visit(const op::clr_a_t * clr_a) const;
uint32_t visit(const op::mov_alu_a_t * mov_alu_a) const;
uint32_t visit(const op::mov_ram_a_t * mov_ram_a) const;
uint32_t visit(const op::mov_imm_d1_t * mov_imm_d1) const;
uint32_t visit(const op::mov_ram_d1_t * mov_ram_d1) const;
uint32_t visit(const op::control_word_t * control_word) const;
uint32_t visit(const load::mvi_t * mvi) const;
uint32_t visit(const load::mvi_cond_t * mvi_cond) const;
uint32_t visit(const dma::src_d0_imm_t * src_d0_imm) const;
uint32_t visit(const dma::d0_dst_imm_t * d0_dst_imm) const;
uint32_t visit(const dma::src_d0_ram_t * src_d0_ram) const;
uint32_t visit(const dma::d0_dst_ram_t * d0_dst_ram) const;
uint32_t visit(const jump::jmp_t * jmp) const;
uint32_t visit(const jump::jmp_cond_t * jmp_cond) const;
uint32_t visit(const loop::btm_t * btm) const;
uint32_t visit(const loop::lps_t * lps) const;
uint32_t visit(const end::end_t * end) const;
uint32_t visit(const end::endi_t * endi) const;
uint32_t visit(const nop::nop_t * nop) const;
uint32_t visit(const assign_t * assign) const;
uint32_t visit(const label_t * label) const;
};
}
}