32
32
sets create_sets(string tab[], int size) {
34
for(int i = 0; i < size; i++) {
35
s.insert(get_set_code(tab[i]));
34
for(int i = 0; i < size; i++) {
35
s.insert(get_set_code(tab[i]));
42
for(int i = 0; i < type_length; i++) {
43
type_map[type[i]] = i;
42
for(int i = 0; i < type_length; i++) {
43
type_map[type[i]] = i;
49
regle1[get_set_code("fun")] = get_set_code("Fun");
50
regle1[get_set_code("skip")] = get_set_code("Skip");
51
regle1[get_set_code("return")] = get_set_code("Return");
52
regle1[get_set_code("set")] = get_set_code("Assignement");
53
regle1[get_set_code("if")] = get_set_code("If");
54
regle1[get_set_code("while")] = get_set_code("While");
55
regle1[get_set_code("Id")] = get_set_code("Call");
56
regle1[get_set_code("of")] = get_set_code("Block_arg");
57
regle1[get_set_code("midfix")] = get_set_code("Op");
58
regle1[get_set_code("lambda")] = get_set_code("Lambda");
60
/* Init rule 1.2 for blocks syntax */
61
element1_2[0] = get_set_code("Block_fun");
62
element1_2[1] =get_set_code("Block_instr");
64
regle1_2[get_set_code("Block_fun")] = get_set_code("Block_fun");
65
regle1_2[get_set_code("Block_instr")] = get_set_code("Block_instr");
49
regle1[get_set_code("fun")] = get_set_code("Fun");
50
regle1[get_set_code("skip")] = get_set_code("Skip");
51
regle1[get_set_code("return")] = get_set_code("Return");
52
regle1[get_set_code("set")] = get_set_code("Assignement");
53
regle1[get_set_code("if")] = get_set_code("If");
54
regle1[get_set_code("while")] = get_set_code("While");
55
regle1[get_set_code("Id")] = get_set_code("Call");
56
regle1[get_set_code("Object_id")] = get_set_code("Call");
57
regle1[get_set_code("of")] = get_set_code("Block_arg");
58
regle1[get_set_code("midfix")] = get_set_code("Op");
59
regle1[get_set_code("lambda")] = get_set_code("Lambda");
61
/* Init rule 1.2 for blocks syntax */
62
element1_2[0] = get_set_code("Block_fun");
63
element1_2[1] =get_set_code("Block_instr");
65
regle1_2[get_set_code("Block_fun")] = get_set_code("Block_fun");
66
regle1_2[get_set_code("Block_instr")] = get_set_code("Block_instr");
73
string tab1[] = {"Fun", "Block_fun"};
74
string tab2[] = {"fun"};
75
string tab3[] = {"Id"};
76
string tab4[] = {"Block_arg"};
77
string tab5[] = {"Instr", "Block_instr"};
78
string tab6[] = {"skip"};
79
string tab7[] = {"of"};
80
string tab8[] = {"set"};
81
string tab9[] = {"Expr"};
82
string tab10[] = {"if"};
83
string tab11[] = {"while"};
84
string tab12[] = {"return"};
85
string tab13[] = {"midfix"};
86
string tab14[] = {"lambda"};
74
string tab1[] = {"Fun", "Block_fun"};
75
string tab2[] = {"fun"};
76
string tab3[] = {"Id"};
77
string tab4[] = {"Block_arg"};
78
string tab5[] = {"Instr", "Block_instr"};
79
string tab6[] = {"skip"};
80
string tab7[] = {"of"};
81
string tab8[] = {"set"};
82
string tab9[] = {"Expr"};
83
string tab10[] = {"if"};
84
string tab11[] = {"while"};
85
string tab12[] = {"return"};
86
string tab13[] = {"midfix"};
87
string tab14[] = {"lambda"};
90
v1.push_back(Paire(-1, create_sets(tab1, 2)));
91
rule2[get_set_code("Programme")] = v1;
92
rule2[get_set_code("Block_fun")] = v1;
95
v2.push_back(Paire(1, create_sets(tab2, 1)));
96
v2.push_back(Paire(1, create_sets(tab3, 1)));
97
v2.push_back(Paire(1, create_sets(tab4, 1)));
98
v2.push_back(Paire(1, create_sets(tab5, 2)));
99
rule2[get_set_code("Fun")] = v2;
103
v3.push_back(Paire(1, create_sets(tab6,1)));
104
rule2[get_set_code("Skip")] = v3;
107
v4.push_back(Paire(1, create_sets(tab7,1)));
108
v4.push_back(Paire(0, create_sets(tab3,1)));
109
rule2[get_set_code("Block_arg")] = v4;
112
v5.push_back(Paire(-1, create_sets(tab5, 2)));
113
rule2[get_set_code("Block_instr")] = v5;
116
v6.push_back(Paire(1, create_sets(tab8, 1)));
117
v6.push_back(Paire(1, create_sets(tab3, 1)));
118
v6.push_back(Paire(1, create_sets(tab9, 1)));
119
rule2[get_set_code("Assignement")] = v6;
122
v7.push_back(Paire(1, create_sets(tab3, 1)));
123
v7.push_back(Paire(0, create_sets(tab9, 1)));
124
rule2[get_set_code("Call")] = v7;
127
v8.push_back(Paire(1, create_sets(tab10, 1)));
128
v8.push_back(Paire(1, create_sets(tab9, 1)));
129
v8.push_back(Paire(2, create_sets(tab5, 2)));
130
rule2[get_set_code("If")] = v8;
134
v9.push_back(Paire(1, create_sets(tab11, 1)));
135
v9.push_back(Paire(1, create_sets(tab9, 1)));
136
v9.push_back(Paire(1, create_sets(tab5, 2)));
137
rule2[get_set_code("While")] = v9;
141
v10.push_back(Paire(1, create_sets(tab12, 1)));
142
v10.push_back(Paire(1, create_sets(tab9, 1)));
143
rule2[get_set_code("Return")] = v10;
146
v11.push_back(Paire(1, create_sets(tab13, 1)));
147
v11.push_back(Paire(1, create_sets(tab9, 1)));
148
v11.push_back(Paire(1, create_sets(tab3, 1)));
149
v11.push_back(Paire(0, create_sets(tab9, 1)));
150
rule2[get_set_code("Op")] = v11;
153
v12.push_back(Paire(1, create_sets(tab14, 1)));
154
v12.push_back(Paire(1, create_sets(tab4, 1)));
155
v12.push_back(Paire(1, create_sets(tab5, 2)));
156
rule2[get_set_code("Lambda")] = v12;
91
v1.push_back(Paire(-1, create_sets(tab1, 2)));
92
rule2[get_set_code("Programme")] = v1;
93
rule2[get_set_code("Block_fun")] = v1;
96
v2.push_back(Paire(1, create_sets(tab2, 1)));
97
v2.push_back(Paire(1, create_sets(tab3, 1)));
98
v2.push_back(Paire(1, create_sets(tab4, 1)));
99
v2.push_back(Paire(1, create_sets(tab5, 2)));
100
rule2[get_set_code("Fun")] = v2;
104
v3.push_back(Paire(1, create_sets(tab6,1)));
105
rule2[get_set_code("Skip")] = v3;
108
v4.push_back(Paire(1, create_sets(tab7,1)));
109
v4.push_back(Paire(0, create_sets(tab3,1)));
110
rule2[get_set_code("Block_arg")] = v4;
113
v5.push_back(Paire(-1, create_sets(tab5, 2)));
114
rule2[get_set_code("Block_instr")] = v5;
117
v6.push_back(Paire(1, create_sets(tab8, 1)));
118
v6.push_back(Paire(1, create_sets(tab3, 1)));
119
v6.push_back(Paire(1, create_sets(tab9, 1)));
120
rule2[get_set_code("Assignement")] = v6;
123
v7.push_back(Paire(1, create_sets(tab3, 1)));
124
v7.push_back(Paire(0, create_sets(tab9, 1)));
125
rule2[get_set_code("Call")] = v7;
128
v8.push_back(Paire(1, create_sets(tab10, 1)));
129
v8.push_back(Paire(1, create_sets(tab9, 1)));
130
v8.push_back(Paire(2, create_sets(tab5, 2)));
131
rule2[get_set_code("If")] = v8;
135
v9.push_back(Paire(1, create_sets(tab11, 1)));
136
v9.push_back(Paire(1, create_sets(tab9, 1)));
137
v9.push_back(Paire(1, create_sets(tab5, 2)));
138
rule2[get_set_code("While")] = v9;
142
v10.push_back(Paire(1, create_sets(tab12, 1)));
143
v10.push_back(Paire(1, create_sets(tab9, 1)));
144
rule2[get_set_code("Return")] = v10;
147
v11.push_back(Paire(1, create_sets(tab13, 1)));
148
v11.push_back(Paire(1, create_sets(tab9, 1)));
149
v11.push_back(Paire(1, create_sets(tab3, 1)));
150
v11.push_back(Paire(0, create_sets(tab9, 1)));
151
rule2[get_set_code("Op")] = v11;
154
v12.push_back(Paire(1, create_sets(tab14, 1)));
155
v12.push_back(Paire(1, create_sets(tab4, 1)));
156
v12.push_back(Paire(1, create_sets(tab5, 2)));
157
rule2[get_set_code("Lambda")] = v12;
160
161
void initRewriteRule() {
161
string tab1[] = {"Instr", "Expr"};
162
string tab2[] = {"Instr"};
163
string tab3[] = {"Expr"};
164
string tab4[] = {"Id", "Expr"};
165
rewriteRule[get_set_code("Call")] = create_sets(tab1, 2);
166
rewriteRule[get_set_code("Op")] = create_sets(tab1, 2);
167
rewriteRule[get_set_code("Assignement")] = create_sets(tab1, 2);
169
rewriteRule[get_set_code("If")] = create_sets(tab2, 1);
170
rewriteRule[get_set_code("While")] = create_sets(tab2, 1);
171
rewriteRule[get_set_code("Skip")] = create_sets(tab2, 1);
172
rewriteRule[get_set_code("Return")] = create_sets(tab2, 1);
174
rewriteRule[get_set_code("string")] = create_sets(tab3, 1);
175
rewriteRule[get_set_code("float")] = create_sets(tab3, 1);
176
rewriteRule[get_set_code("int")] = create_sets(tab3, 1);
178
rewriteRule[get_set_code("Id")] = create_sets(tab4, 2);
179
rewriteRule[get_set_code("Lambda")] = create_sets(tab3, 1);
162
string tab1[] = {"Instr", "Expr"};
163
string tab2[] = {"Instr"};
164
string tab3[] = {"Expr"};
165
string tab4[] = {"Id", "Expr"};
166
rewriteRule[get_set_code("Call")] = create_sets(tab1, 2);
167
rewriteRule[get_set_code("Op")] = create_sets(tab1, 2);
168
rewriteRule[get_set_code("Assignement")] = create_sets(tab1, 2);
170
rewriteRule[get_set_code("If")] = create_sets(tab2, 1);
171
rewriteRule[get_set_code("While")] = create_sets(tab2, 1);
172
rewriteRule[get_set_code("Skip")] = create_sets(tab2, 1);
173
rewriteRule[get_set_code("Return")] = create_sets(tab2, 1);
175
rewriteRule[get_set_code("string")] = create_sets(tab3, 1);
176
rewriteRule[get_set_code("float")] = create_sets(tab3, 1);
177
rewriteRule[get_set_code("int")] = create_sets(tab3, 1);
179
rewriteRule[get_set_code("Id")] = create_sets(tab4, 2);
180
rewriteRule[get_set_code("Object_id")] = create_sets(tab4, 2);
181
rewriteRule[get_set_code("Lambda")] = create_sets(tab3, 1);
190
192
int get_set_code(string t) {
191
int result = type_map[t];
194
cout << "ERROR : type " << t << " unknown" << endl;
193
int result = type_map[t];
196
cout << "ERROR : type " << t << " unknown" << endl;
200
202
Paire::Paire(int nb, sets s) {
208
210
map<int, int> getRule1() {
211
213
map<int, int> getRule1_2() {
214
216
map<int, vector<Paire> > getRule2() {
217
219
map<int, sets> getRule3() {
221
223
int applyRule1_2(sets s) {
222
for(int i = 0; i < nb_element_block; i++) {
223
if(s.item(element1_2[i])) {
224
return element1_2[i];
224
for(int i = 0; i < nb_element_block; i++) {
225
if(s.item(element1_2[i])) {
226
return element1_2[i];