@@ -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 ;
0 commit comments