@@ -78,7 +78,7 @@ namespace FPL {
7878 return false ;
7979 }
8080
81- bool Parser::VariableInstruction (auto parseStart ) {
81+ bool Parser::VariableInstruction () {
8282 auto VarType = CheckerType ();
8383 if (VarType.has_value ()) {
8484 auto VarName = CheckerIdentifiant ();
@@ -89,56 +89,155 @@ namespace FPL {
8989 }
9090
9191 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;
98162 VariableDefinition variable;
99163 variable.VariableName = VarName->mText ;
100164 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;
102176
103177 mVariables [variable.VariableName ] = variable;
104178 return true ;
105179 } 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;
107181 }
108182 } 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;
110184 }
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+ }
126227 } 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;
128229 }
129- } else {
130- std::cerr << " Merci de signifier la fin de la déclaration de la variable avec '|'." << std::endl;
131230 }
132231 }
232+ } else {
233+ std::cerr << " Vous devez donner une valeur a la variable qui correspond au type." << std::endl;
133234 }
134235 } 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;
136237 }
137238 } else {
138239 std::cerr << " Vous devez utiliser les symboles '->' pour donner une valeur à la variable." << std::endl;
139240 }
140- } else {
141- std::cerr << " Vous devez utiliser les symboles '->' pour donner une valeur à la variable." << std::endl;
142241 }
143242 } else {
144243 std::cerr << " Vous devez indiquer un nom à la variable." << std::endl;
@@ -147,7 +246,7 @@ namespace FPL {
147246 return false ;
148247 }
149248
150- bool Parser::ChangerInstruction (auto parseStart ) {
249+ bool Parser::ChangerInstruction () {
151250 auto VarName = CheckerIdentifiant ();
152251 if (VarName.has_value ()) {
153252 if (isVariable (VarName->mText )) {
@@ -187,15 +286,37 @@ namespace FPL {
187286 bool Parser::PrintInstruction (auto parseStart) {
188287 auto Value = CheckerValue ();
189288 if (Value.has_value ()) {
190- if (CheckerOperateur (" ;" ).has_value ()) {
289+ --mCurrentToken ;
290+ while (!CheckerOperateur (" ;" ).has_value ()) {
291+ auto Value = CheckerValue ();
191292 if (Value->StatementType .mType == STRING) {
192293 std::replace (Value->StatementName .begin (), Value->StatementName .end (), ' "' , ' ' );
193294 }
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+ }
198317 }
318+ std::cout << std::endl;
319+ return true ;
199320 } else {
200321 mCurrentToken = parseStart;
201322 ++mCurrentToken ;
@@ -224,9 +345,9 @@ namespace FPL {
224345 if (PeutEtreInstruction->mText == " envoyer" ) {
225346 if (PrintInstruction (parseStart)) { return true ; } else { return false ; }
226347 } else if (PeutEtreInstruction->mText == " variable" ) {
227- if (VariableInstruction (parseStart )) { return true ; } else { return false ; }
348+ if (VariableInstruction ()) { return true ; } else { return false ; }
228349 } else if (PeutEtreInstruction->mText == " changer" ) {
229- if (ChangerInstruction (parseStart )) { return true ; } else { return false ; }
350+ if (ChangerInstruction ()) { return true ; } else { return false ; }
230351 } else if (PeutEtreInstruction->mText == " definir" ) {
231352 if (FunctionChecker (parseStart)) {return true ;} else {return false ;}
232353 } else {
0 commit comments