Skip to content

Commit b40a8c1

Browse files
committed
Updated Parser
1 parent df2a2d0 commit b40a8c1

File tree

2 files changed

+44
-35
lines changed

2 files changed

+44
-35
lines changed

src/Parser.cpp

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -87,32 +87,7 @@ namespace FPL {
8787
return false;
8888
}
8989

90-
91-
bool Parser::PrintStat() {
92-
auto parseStart = mCurrentToken; // std::vector<Token>::iterator
93-
auto PeutEtreInstruction = CheckerIdentifiant();
94-
if (PeutEtreInstruction.has_value()) {
95-
if (PeutEtreInstruction->mText == "envoyer") {
96-
auto ChaineEnter = CheckerChaineLitteral();
97-
if (ChaineEnter.has_value()) {
98-
std::string printContent = ChaineEnter->mText;
99-
std::replace(printContent.begin(), printContent.end(), '"', ' ');
100-
std::cout << printContent;
101-
std::cout << std::endl;
102-
return true;
103-
} else {
104-
std::cerr
105-
<< "Vous devez mettre des \" pour ouvrir et fermer l'instruction que si le type est texte."
106-
<< std::endl;
107-
mCurrentToken = parseStart;
108-
}
109-
}
110-
}
111-
return false;
112-
}
113-
11490
bool Parser::VariableDeclaration() {
115-
--mCurrentToken;
11691
auto parseStart = mCurrentToken; // std::vector<Token>::iterator
11792
auto PeutEtreInstruction = CheckerIdentifiant();
11893
if (PeutEtreInstruction.has_value() && PeutEtreInstruction->mText == "variable") {
@@ -131,6 +106,11 @@ namespace FPL {
131106
variable.VariableValue = VarValue->StatementName;
132107

133108
mVariables[variable.VariableName] = variable;
109+
110+
std::cout << "La variable '"
111+
<< mVariables[variable.VariableName].VariableName << "' a pour valeur "
112+
<< mVariables[variable.VariableName].VariableValue << std::endl;
113+
134114
return true;
135115
} else {
136116
throw std::runtime_error("Vous devez donner une valeur qui est de même type que la variable.");
@@ -139,23 +119,50 @@ namespace FPL {
139119
throw std::runtime_error("Vous devez donner une valeur a la variable qui correspond au type.");
140120
}
141121
} else {
142-
throw std::runtime_error("Vous devez utiliser les symboles '->' pour donner une valeur à la variable.");
122+
std::cerr << "Vous devez utiliser les symboles '->' pour donner une valeur à la variable." << std::endl;
123+
mCurrentToken = parseStart;
143124
}
144125
} else {
145-
throw std::runtime_error("Vous devez utiliser les symboles '->' pour donner une valeur à la variable.");
126+
std::cerr << "Vous devez utiliser les symboles '->' pour donner une valeur à la variable." << std::endl;
127+
mCurrentToken = parseStart;
146128
}
147129
} else {
148-
throw std::runtime_error("Vous devez indiquer un nom à la variable.");
130+
std::cerr << "Vous devez indiquer un nom à la variable." << std::endl;
131+
mCurrentToken = parseStart;
149132
}
150133
} else {
151-
throw std::runtime_error("Vous devez indiquer une type pour la variable.");
134+
std::cerr << "Vous devez indiquer une type pour la variable." << std::endl;
135+
mCurrentToken = parseStart;
136+
}
137+
}
138+
return false;
139+
}
140+
141+
142+
bool Parser::Print() {
143+
auto parseStart = mCurrentToken; // std::vector<Token>::iterator
144+
auto PeutEtreInstruction = CheckerIdentifiant();
145+
if (PeutEtreInstruction.has_value()) {
146+
if (PeutEtreInstruction->mText == "envoyer") {
147+
auto ChaineEnter = CheckerChaineLitteral();
148+
if (ChaineEnter.has_value()) {
149+
std::string printContent = ChaineEnter->mText;
150+
std::replace(printContent.begin(), printContent.end(), '"', ' ');
151+
std::cout << printContent << std::endl;
152+
return true;
153+
} else {
154+
mCurrentToken = parseStart;
155+
std::cerr << "Vous devez mettre des \" pour ouvrir et fermer l'instruction que si le type est texte." << std::endl;
156+
}
157+
} else {
158+
mCurrentToken = parseStart;
152159
}
153160
}
154-
++mCurrentToken;
155161
return false;
156162
}
157163

158164

165+
159166
void Parser::parse(std::vector<Token> &tokens) {
160167
mEndToken = tokens.end();
161168
mCurrentToken = tokens.begin();
@@ -165,17 +172,18 @@ namespace FPL {
165172

166173
}
167174

168-
if (PrintStat()) {
169-
++mCurrentToken;
175+
if (Print()) {
176+
170177
}
171178

172179
if (VariableDeclaration()) {
173-
++mCurrentToken;
180+
174181
} else {
175182
if (mCurrentToken->mText.empty()) {
176183
continue;
177184
}
178-
std::cerr << "Identifier inconnu : " << Parser::mCurrentToken->mText << std::endl;
185+
186+
std::cerr << "Identifier inconnu : " << mCurrentToken->mText << std::endl;
179187
++mCurrentToken;
180188
}
181189
}

src/Parser.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@ namespace FPL {
3333

3434

3535
// Print :
36-
bool PrintStat();
36+
bool Print();
3737

3838
// Variable :
3939
bool VariableDeclaration();
4040
std::map<std::string, VariableDefinition> mVariables;
41+
bool isVariable(std::string &name);
4142

4243
// Fonctions :
4344
bool FunctionChecker();

0 commit comments

Comments
 (0)