Skip to content

Commit 9951d5b

Browse files
committed
Déclaration des variables.
1 parent 4de0d03 commit 9951d5b

File tree

5 files changed

+33
-64
lines changed

5 files changed

+33
-64
lines changed

main.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,9 @@ int main() {
1616
FPL::TokenBuilding t;
1717
std::vector<FPL::Token> tokens = t.parseToken(f_content);
1818

19-
/*
20-
for (auto &token : tokens) {
21-
token.DebugPrint();
22-
}
23-
*/
19+
for (auto &token : tokens) {
20+
//token.DebugPrint();
21+
}
2422

2523
FPL::Parser parser;
2624
parser.parse(tokens);

main.fpl

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
definir principal(texte arg, entier a) {
2-
variable entier a -> 10
3-
variable decimal b -> 10.5
4-
envoyer "Yo la compagnie."
5-
}
1+
variable entier a -> 1000
62

7-
envoyer "Yo la compagnie."
8-
9-
variable entier nombre -> 50
3+
envoyer "Yo la compagnie."

src/Parser.cpp

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -112,49 +112,46 @@ namespace FPL {
112112
}
113113

114114
bool Parser::VariableDeclaration() {
115+
--mCurrentToken;
115116
auto parseStart = mCurrentToken; // std::vector<Token>::iterator
116117
auto PeutEtreInstruction = CheckerIdentifiant();
117118
if (PeutEtreInstruction.has_value() && PeutEtreInstruction->mText == "variable") {
118-
auto pType = CheckerType();
119-
if (pType.has_value()) {
120-
if (pType->mType == VOID) {
121-
std::cerr << "Le type 'vide' n'est pas possible pour une variable." << std::endl;
122-
mCurrentToken = parseStart;
123-
}
124-
125-
auto pName = CheckerIdentifiant();
126-
if (pName.has_value()) {
127-
119+
auto VarType = CheckerType();
120+
if (VarType.has_value()) {
121+
auto VarName = CheckerIdentifiant();
122+
if (VarName.has_value()) {
128123
if (CheckerOperateur("-").has_value()) {
129124
if (CheckerOperateur(">").has_value()) {
130-
auto pValue = CheckerValue();
131-
if (pValue.has_value()) {
132-
//VariableDefinition variable(pName->mText, pType->mName, pType->mType);
133-
VariableDefinition variable;
134-
variable.VariableName = pName->mText;
135-
variable.VariableType = Type(pType->mName, pType->mType);
136-
variable.GiveValue(mCurrentToken->mText);
137-
138-
mVariables[variable.VariableName] = variable;
139-
return true;
125+
auto VarValue = CheckerValue();
126+
if (VarValue.has_value()) {
127+
if (VarValue->StatementType.mType == VarType->mType) {
128+
VariableDefinition variable;
129+
variable.VariableName = VarName->mText;
130+
variable.VariableType = Type(VarType->mName, VarType->mType);
131+
variable.VariableValue = VarValue->StatementName;
132+
133+
mVariables[variable.VariableName] = variable;
134+
return true;
135+
} else {
136+
throw std::runtime_error("Vous devez donner une valeur qui est de même type que la variable.");
137+
}
140138
} else {
141-
throw std::runtime_error("Vous devez donner une valeur a votre variable.");
139+
throw std::runtime_error("Vous devez donner une valeur a la variable qui correspond au type.");
142140
}
143141
} else {
144-
throw std::runtime_error("Pour donner la valeur à votre variable, merci d'utiliser '->'.");
142+
throw std::runtime_error("Vous devez utiliser les symboles '->' pour donner une valeur à la variable.");
145143
}
146144
} else {
147-
throw std::runtime_error("Pour donner la valeur à votre variable, merci d'utiliser '->'.");
145+
throw std::runtime_error("Vous devez utiliser les symboles '->' pour donner une valeur à la variable.");
148146
}
149147
} else {
150-
std::cerr << "Vous devez donner un nom à votre variable." << std::endl;
151-
mCurrentToken = parseStart;
148+
throw std::runtime_error("Vous devez indiquer un nom à la variable.");
152149
}
153150
} else {
154-
std::cerr << "Vous devez mettre le type de votre variable." << std::endl;
155-
mCurrentToken = parseStart;
151+
throw std::runtime_error("Vous devez indiquer une type pour la variable.");
156152
}
157153
}
154+
++mCurrentToken;
158155
return false;
159156
}
160157

@@ -169,11 +166,11 @@ namespace FPL {
169166
}
170167

171168
if (PrintStat()) {
172-
169+
++mCurrentToken;
173170
}
174171

175172
if (VariableDeclaration()) {
176-
173+
++mCurrentToken;
177174
} else {
178175
if (mCurrentToken->mText.empty()) {
179176
continue;

src/VariableDefinition.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,4 @@ namespace FPL {
66
StatementName = name;
77
StatementKind{kind};
88
}
9-
10-
void VariableDefinition::GiveValue(const std::string &value) {
11-
std::cout << VariableName << " de type " << VariableType.mName << " aura la valeur " << value;
12-
13-
if (VariableType.mType == ENTIER_LITERAL) {
14-
15-
} else if (VariableType.mType == DECIMAL_LITERAL) {
16-
17-
} else if (VariableType.mType == CHAINE_LITERAL) {
18-
19-
} else {
20-
21-
}
22-
}
239
}

src/VariableDefinition.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ namespace FPL {
2323

2424
class Statement {
2525
public:
26+
Statement();
2627
Statement(StatementKind kind, std::string name, Type type);
2728

2829
std::string StatementName;
@@ -32,15 +33,8 @@ namespace FPL {
3233

3334
class VariableDefinition {
3435
public:
35-
//VariableDefinition(std::string name, std::string typeName, enum BUILTIN_TYPE type) : VariableName(name), VariableType(Type(typeName, type)){};
36-
3736
std::string VariableName;
3837
Type VariableType;
39-
40-
int valueVarI; // Valeur si c'est un int
41-
double valueVarD; // Valeur si c'est un décimal
42-
std::string valueVarS; // Valeur si c'est une chaine de caractere (en FPL, texte)
43-
44-
void GiveValue(const std::string &value);
38+
std::string VariableValue;
4539
};
4640
}

0 commit comments

Comments
 (0)