-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtag.cpp
147 lines (140 loc) · 3.89 KB
/
tag.cpp
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <string>
#include <map>
#include "tag.h"
using std::map;
using std::string;
extern const map<string, Tag> KEYWORD_STR2TAG = {
{"int",Tag::kw_int},
{"void",Tag::kw_void},
{"if",Tag::kw_if},
{"else",Tag::kw_else},
{"while",Tag::kw_while},
{"return",Tag::kw_return},
};
extern const map<string, Tag> STR2TAG = {
{"epsilon" ,Tag::epsilon},
{"the_end" ,Tag::the_end},
{"id" ,Tag::id},
{"num" ,Tag::num},
{"+" ,Tag::sb_add},
{"-" ,Tag::sb_sub},
{"*" ,Tag::sb_time},
{"/" ,Tag::sb_divide},
{"=" ,Tag::sb_assign},
{"==" ,Tag::sb_equal},
{">" ,Tag::sb_g},
{">=" ,Tag::sb_ge},
{"<" ,Tag::sb_l},
{"<=" ,Tag::sb_le},
{"!=" ,Tag::sb_ne},
{";" ,Tag::sb_board},
{"," ,Tag::sb_separator},
{"(" ,Tag::sb_llb},
{")" ,Tag::sb_rlb},
{"{" ,Tag::sb_lbb},
{"}" ,Tag::sb_rbb},
{"int" ,Tag::kw_int},
{"void" ,Tag::kw_void},
{"if" ,Tag::kw_if},
{"else" ,Tag::kw_else},
{"while" ,Tag::kw_while},
{"return" ,Tag::kw_return},
{"program" ,Tag::program},
{"dec_list" ,Tag::dec_list},
{"dec" ,Tag::dec},
{"dec_type" ,Tag::dec_type},
{"func_dec" ,Tag::func_dec},
{"var_dec" ,Tag::var_dec},
{"params" ,Tag::params},
{"stat_block" ,Tag::stat_block},
{"param_list" ,Tag::param_list},
{"param" ,Tag::param},
{"pre_param" ,Tag::pre_param},
{"in_dec" ,Tag::in_dec},
{"stat_str" ,Tag::stat_str},
{"in_var_dec" ,Tag::in_var_dec},
{"pre_in_var_dec" ,Tag::pre_in_var_dec},
{"stat" ,Tag::stat},
{"if_stat" ,Tag::if_stat},
{"while_stat" ,Tag::while_stat},
{"return_stat" ,Tag::return_stat},
{"assign_stat" ,Tag::assign_stat},
{"expr" ,Tag::expr},
{"add_expr" ,Tag::add_expr},
{"comp_add_expr" ,Tag::comp_add_expr},
{"comp_operator" ,Tag::comp_operator},
{"term" ,Tag::term},
{"pre_term" ,Tag::pre_term},
{"factor" ,Tag::factor},
{"pre_factor" ,Tag::pre_factor},
{"func_type" ,Tag::func_type},
{"call" ,Tag::call},
{"argus" ,Tag::argus},
{"argu_list" ,Tag::argu_list},
{"pre_expr" ,Tag::pre_expr},
};
#ifdef DEBUG
extern const map<Tag, string> TAG2STR = {
{Tag::epsilon ,"epsilon"},
{Tag::the_end ,"the_end"},
{Tag::id ,"id"},
{Tag::num ,"num"},
{Tag::sb_add ,"+"},
{Tag::sb_sub ,"-"},
{Tag::sb_time ,"*"},
{Tag::sb_divide ,"/"},
{Tag::sb_assign ,"="},
{Tag::sb_equal ,"=="},
{Tag::sb_g ,">"},
{Tag::sb_ge ,">="},
{Tag::sb_l ,"<"},
{Tag::sb_le ,"<="},
{Tag::sb_ne ,"!="},
{Tag::sb_board ,";"},
{Tag::sb_separator ,","},
{Tag::sb_llb ,"("},
{Tag::sb_rlb ,")"},
{Tag::sb_lbb ,"{"},
{Tag::sb_rbb ,"}"},
{Tag::kw_int ,"int"},
{Tag::kw_void ,"void"},
{Tag::kw_if ,"if"},
{Tag::kw_else ,"else"},
{Tag::kw_while ,"while"},
{Tag::kw_return ,"return"},
{Tag::S0 ,"S0"},
{Tag::program ,"program"},
{Tag::dec_list ,"dec_list"},
{Tag::dec ,"dec"},
{Tag::dec_type ,"dec_type"},
{Tag::func_dec ,"func_dec"},
{Tag::var_dec ,"var_dec"},
{Tag::params ,"params"},
{Tag::stat_block ,"stat_block"},
{Tag::param_list ,"param_list"},
{Tag::param ,"param"},
{Tag::pre_param ,"pre_param"},
{Tag::in_dec ,"in_dec"},
{Tag::stat_str ,"stat_str"},
{Tag::in_var_dec ,"in_var_dec"},
{Tag::pre_in_var_dec,"pre_in_var_dec"},
{Tag::stat ,"stat"},
{Tag::if_stat ,"if_stat"},
{Tag::while_stat ,"while_stat"},
{Tag::return_stat ,"return_stat"},
{Tag::assign_stat ,"assign_stat"},
{Tag::expr ,"expr"},
{Tag::add_expr ,"add_expr"},
{Tag::comp_add_expr ,"comp_add_expr"},
{Tag::comp_operator ,"comp_operator"},
{Tag::term ,"term"},
{Tag::pre_term ,"pre_term"},
{Tag::factor ,"factor"},
{Tag::pre_factor ,"pre_factor"},
{Tag::func_type ,"func_type"},
{Tag::call ,"call"},
{Tag::argus ,"argus"},
{Tag::argu_list ,"argu_list"},
{Tag::pre_expr ,"pre_expr"},
};
#endif // DEBUG