Skip to content

Commit 9e8c8a2

Browse files
committed
Prints, Variables, Entrées claviers, Fixs.
1 parent 5871789 commit 9e8c8a2

File tree

1 file changed

+160
-39
lines changed

1 file changed

+160
-39
lines changed

src/Parser.cpp

Lines changed: 160 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)