@@ -78,7 +78,7 @@ namespace FPL {
78
78
return false ;
79
79
}
80
80
81
- bool Parser::VariableInstruction (auto parseStart ) {
81
+ bool Parser::VariableInstruction () {
82
82
auto VarType = CheckerType ();
83
83
if (VarType.has_value ()) {
84
84
auto VarName = CheckerIdentifiant ();
@@ -89,56 +89,155 @@ namespace FPL {
89
89
}
90
90
91
91
if (VarName.has_value ()) {
92
- if (CheckerOperateur (" -" ).has_value ()) {
93
- if (CheckerOperateur (" >" ).has_value ()) {
94
- auto VarValue = CheckerValue ();
95
- if (VarValue.has_value ()) {
96
- if (VarValue->StatementType .mType == VarType->mType ) {
97
- if (CheckerOperateur (" ;" )) {
92
+ if (VarName->mText == " saisir" ) {
93
+ VarName = CheckerIdentifiant ();
94
+ if (VarName.has_value ()) {
95
+ if (CheckerOperateur (" -" ).has_value ()) {
96
+ if (CheckerOperateur (" >" ).has_value ()) {
97
+ auto VarValue = CheckerValue ();
98
+ if (VarValue.has_value ()) {
99
+ if (CheckerOperateur (" ;" ).has_value ()) {
100
+ if (VarValue->StatementType .mType == STRING) {
101
+ std::replace (VarValue->StatementName .begin (), VarValue->StatementName .end (), ' "' , ' ' );
102
+ }
103
+ std::cout << VarValue->StatementName << std::endl;
104
+ if (VarType->mType == INT) {
105
+ int v;
106
+ std::cin >> v;
107
+ VariableDefinition variable;
108
+ variable.VariableName = VarName->mText ;
109
+ variable.VariableType = Type (VarType->mName , VarType->mType );
110
+ variable.VariableValue = std::to_string (v);
111
+
112
+ mVariables [variable.VariableName ] = variable;
113
+ return true ;
114
+ } else if (VarType->mType == DOUBLE) {
115
+ double v;
116
+ std::cin >> v;
117
+ VariableDefinition variable;
118
+ variable.VariableName = VarName->mText ;
119
+ variable.VariableType = Type (VarType->mName , VarType->mType );
120
+ variable.VariableValue = std::to_string (v);
121
+
122
+ mVariables [variable.VariableName ] = variable;
123
+ return true ;
124
+ } else if (VarType->mType == STRING) {
125
+
126
+ std::string v;
127
+ std::cin >> v;
128
+ VariableDefinition variable;
129
+ variable.VariableName = VarName->mText ;
130
+ variable.VariableType = Type (VarType->mName , VarType->mType );
131
+ variable.VariableValue = v;
132
+
133
+ mVariables [variable.VariableName ] = variable;
134
+ return true ;
135
+ } else {
136
+ std::cerr << " Le type est inexistant en F.P.L." << std::endl;
137
+ }
138
+ } else {
139
+ std::cerr << " Merci de signifier la fin de la déclaration de la variable avec ';'." << std::endl;
140
+ }
141
+ } else {
142
+ std::cerr << " Merci de signifier la fin de la déclaration de la variable avec ';'." << std::endl;
143
+ }
144
+ } else {
145
+ std::cerr << " Vous devez utiliser les symboles '->' pour donner une valeur." << std::endl;
146
+ }
147
+ } else {
148
+ if (CheckerOperateur (" ;" ).has_value ()) {
149
+ if (VarType->mType == INT) {
150
+ int v;
151
+ std::cin >> v;
152
+ VariableDefinition variable;
153
+ variable.VariableName = VarName->mText ;
154
+ variable.VariableType = Type (VarType->mName , VarType->mType );
155
+ variable.VariableValue = std::to_string (v);
156
+
157
+ mVariables [variable.VariableName ] = variable;
158
+ return true ;
159
+ } else if (VarType->mType == DOUBLE) {
160
+ double v;
161
+ std::cin >> v;
98
162
VariableDefinition variable;
99
163
variable.VariableName = VarName->mText ;
100
164
variable.VariableType = Type (VarType->mName , VarType->mType );
101
- variable.VariableValue = VarValue->StatementName ;
165
+ variable.VariableValue = std::to_string (v);
166
+
167
+ mVariables [variable.VariableName ] = variable;
168
+ return true ;
169
+ } else if (VarType->mType == STRING) {
170
+ std::string v;
171
+ std::cin >> v;
172
+ VariableDefinition variable;
173
+ variable.VariableName = VarName->mText ;
174
+ variable.VariableType = Type (VarType->mName , VarType->mType );
175
+ variable.VariableValue = v;
102
176
103
177
mVariables [variable.VariableName ] = variable;
104
178
return true ;
105
179
} else {
106
- std::cerr << " Merci de signifier la fin de la déclaration de la variable avec '|' ." << std::endl;
180
+ std::cerr << " Le type est inexistant en F.P.L ." << std::endl;
107
181
}
108
182
} else {
109
- std::cerr << " Vous devez donner une valeur qui est de même type que la variable ." << std::endl;
183
+ std::cerr << " Vous devez utiliser les symboles '->' pour donner une valeur ." << std::endl;
110
184
}
111
- } else if (CheckerIdentifiant ().has_value ()) {
112
- --mCurrentToken ;
113
- auto PossibleVariable = CheckerIdentifiant ();
114
- if (PossibleVariable.has_value ()) {
115
- if (isVariable (PossibleVariable->mText )) {
116
- if (CheckerOperateur (" ;" ).has_value ()) {
117
- auto OldVariable = mVariables [PossibleVariable->mText ];
118
- if (OldVariable.VariableType .mType == VarType->mType ) {
119
- VariableDefinition variable;
120
- variable.VariableName = VarName->mText ;
121
- variable.VariableType = Type (VarType->mName , VarType->mType );
122
- variable.VariableValue = OldVariable.VariableValue ;
123
-
124
- mVariables [variable.VariableName ] = variable;
125
- return true ;
185
+ }
186
+ } else {
187
+ std::cerr << " Vous devez indiquer un nom à la variable." << std::endl;
188
+ }
189
+ } else {
190
+ if (CheckerOperateur (" -" ).has_value ()) {
191
+ if (CheckerOperateur (" >" ).has_value ()) {
192
+ auto VarValue = CheckerValue ();
193
+ if (VarValue.has_value ()) {
194
+ if (VarValue->StatementType .mType == VarType->mType ) {
195
+ if (CheckerOperateur (" ;" )) {
196
+ VariableDefinition variable;
197
+ variable.VariableName = VarName->mText ;
198
+ variable.VariableType = Type (VarType->mName , VarType->mType );
199
+ variable.VariableValue = VarValue->StatementName ;
200
+
201
+ mVariables [variable.VariableName ] = variable;
202
+ return true ;
203
+ } else {
204
+ std::cerr << " Merci de signifier la fin de la déclaration de la variable avec ';'." << std::endl;
205
+ }
206
+ } else {
207
+ std::cerr << " Vous devez donner une valeur qui est de même type que la variable." << std::endl;
208
+ }
209
+ } else if (CheckerIdentifiant ().has_value ()) {
210
+ --mCurrentToken ;
211
+ auto PossibleVariable = CheckerIdentifiant ();
212
+ if (PossibleVariable.has_value ()) {
213
+ if (isVariable (PossibleVariable->mText )) {
214
+ if (CheckerOperateur (" ;" ).has_value ()) {
215
+ auto OldVariable = mVariables [PossibleVariable->mText ];
216
+ if (OldVariable.VariableType .mType == VarType->mType ) {
217
+ VariableDefinition variable;
218
+ variable.VariableName = VarName->mText ;
219
+ variable.VariableType = Type (VarType->mName , VarType->mType );
220
+ variable.VariableValue = OldVariable.VariableValue ;
221
+
222
+ mVariables [variable.VariableName ] = variable;
223
+ return true ;
224
+ } else {
225
+ std::cerr << " Vous devez donner une valeur a la variable qui correspond au type." << std::endl;
226
+ }
126
227
} else {
127
- std::cerr << " Vous devez donner une valeur a la variable qui correspond au type ." << std::endl;
228
+ std::cerr << " Merci de signifier la fin de la déclaration de la variable avec ';' ." << std::endl;
128
229
}
129
- } else {
130
- std::cerr << " Merci de signifier la fin de la déclaration de la variable avec '|'." << std::endl;
131
230
}
132
231
}
232
+ } else {
233
+ std::cerr << " Vous devez donner une valeur a la variable qui correspond au type." << std::endl;
133
234
}
134
235
} else {
135
- std::cerr << " Vous devez donner une valeur a la variable qui correspond au type ." << std::endl;
236
+ std::cerr << " Vous devez utiliser les symboles '->' pour donner une valeur à la variable." << std::endl;
136
237
}
137
238
} else {
138
239
std::cerr << " Vous devez utiliser les symboles '->' pour donner une valeur à la variable." << std::endl;
139
240
}
140
- } else {
141
- std::cerr << " Vous devez utiliser les symboles '->' pour donner une valeur à la variable." << std::endl;
142
241
}
143
242
} else {
144
243
std::cerr << " Vous devez indiquer un nom à la variable." << std::endl;
@@ -147,7 +246,7 @@ namespace FPL {
147
246
return false ;
148
247
}
149
248
150
- bool Parser::ChangerInstruction (auto parseStart ) {
249
+ bool Parser::ChangerInstruction () {
151
250
auto VarName = CheckerIdentifiant ();
152
251
if (VarName.has_value ()) {
153
252
if (isVariable (VarName->mText )) {
@@ -187,15 +286,37 @@ namespace FPL {
187
286
bool Parser::PrintInstruction (auto parseStart) {
188
287
auto Value = CheckerValue ();
189
288
if (Value.has_value ()) {
190
- if (CheckerOperateur (" ;" ).has_value ()) {
289
+ --mCurrentToken ;
290
+ while (!CheckerOperateur (" ;" ).has_value ()) {
291
+ auto Value = CheckerValue ();
191
292
if (Value->StatementType .mType == STRING) {
192
293
std::replace (Value->StatementName .begin (), Value->StatementName .end (), ' "' , ' ' );
193
294
}
194
- std::cout << Value->StatementName << std::endl;
195
- return true ;
196
- } else {
197
- std::cerr << " Vous devez mettre le symbole ';' pour mettre fin à l'instruction." << std::endl;
295
+
296
+ if (CheckerOperateur (" [" ).has_value ()) {
297
+ auto var = CheckerIdentifiant ();
298
+ if (isVariable (var->mText )) {
299
+ if (CheckerOperateur (" ]" ).has_value ()) {
300
+ std::cout << mVariables [var->mText ].VariableValue ;
301
+ std::cout << " " ;
302
+ } else {
303
+ std::cerr << " Ces operateurs sont utilises dans cette instruction pour introduire une variable, merci de cloturer l'insertion avec ']'." << std::endl;
304
+ return false ;
305
+ }
306
+ } else {
307
+ std::cerr << " La variable n'existe pas." << std::endl;
308
+ }
309
+ }
310
+
311
+ std::cout << Value->StatementName ;
312
+ std::cout << " " ;
313
+
314
+ if (CheckerOperateur (" ;" ).has_value ()) {
315
+ break ;
316
+ }
198
317
}
318
+ std::cout << std::endl;
319
+ return true ;
199
320
} else {
200
321
mCurrentToken = parseStart;
201
322
++mCurrentToken ;
@@ -224,9 +345,9 @@ namespace FPL {
224
345
if (PeutEtreInstruction->mText == " envoyer" ) {
225
346
if (PrintInstruction (parseStart)) { return true ; } else { return false ; }
226
347
} else if (PeutEtreInstruction->mText == " variable" ) {
227
- if (VariableInstruction (parseStart )) { return true ; } else { return false ; }
348
+ if (VariableInstruction ()) { return true ; } else { return false ; }
228
349
} else if (PeutEtreInstruction->mText == " changer" ) {
229
- if (ChangerInstruction (parseStart )) { return true ; } else { return false ; }
350
+ if (ChangerInstruction ()) { return true ; } else { return false ; }
230
351
} else if (PeutEtreInstruction->mText == " definir" ) {
231
352
if (FunctionChecker (parseStart)) {return true ;} else {return false ;}
232
353
} else {
0 commit comments