/* * Constructeur */ public Valeur_AfficheLaValeur_ENTEntier(int _UID, XmlNode _XMLDuBloc, __Bloc _blocPrécédent, __GroupeDeBlocs _groupeDeBlocs) : base(_UID, _XMLDuBloc, _blocPrécédent, _groupeDeBlocs) { // Déclarations // ------------ String nomDeLAttribut; // Traitements // ----------- // Analyse du Bloc d'instruction foreach (XmlNode XMLDUnNoeudFils in _XMLDuBloc) { nomDeLAttribut = ""; if (XMLDUnNoeudFils.Attributes["name"] != null) { nomDeLAttribut = XMLDUnNoeudFils.Attributes["name"].Value; } switch (nomDeLAttribut) { case "Valeur": __expression = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; } } // Liste les séquences du bloc // --------------------------- __séquences.Add((Séquence)Séquence_1); }
/* * Constructeur */ public Variable_IncrémenterUneVariable(int _UID, XmlNode _XMLDuBloc, __Bloc _blocPrécédent, __GroupeDeBlocs _groupeDeBlocs) : base(_UID, _XMLDuBloc, _blocPrécédent, _groupeDeBlocs) { // Déclarations // ------------ String nomDeLAttribut; // Traitements // ----------- // Analyse du Bloc d'instruction foreach (XmlNode XMLDUnNoeudFils in _XMLDuBloc) { nomDeLAttribut = ""; if (XMLDUnNoeudFils.Attributes["name"] != null) { nomDeLAttribut = XMLDUnNoeudFils.Attributes["name"].Value; } switch (nomDeLAttribut) { case "VAR": __nom = XMLDUnNoeudFils.FirstChild.InnerText; break; case "DELTA": switch (XMLDUnNoeudFils.ChildNodes.Count) { case 1: // Le Noeud fils contient seulement une balise <shadow> // C'est la balise <shadow> qui est sélectionnée avec XMLDUnNoeudFils.FirstChild __expression = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; case 2: // Le Noeud fils contient une balise <shadow> et une balise <block> // C'est la balise <block> qui est sélectionnée avec XMLDUnNoeudFils.LastChild __expression = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.LastChild, _blocPrécédent, _groupeDeBlocs); break; } break; } } __Variable.AjouteUneVariable(__nom); // Liste les séquences du bloc // --------------------------- __séquences.Add((Séquence)Séquence_1); }
/* * Constructeur */ public GroupeDInstructions_Boucle_Faire_TantQue_ENTCondition(int _UID, XmlNode _XMLDuBloc, __Bloc _blocPrécédent, __GroupeDeBlocs _groupeDeBlocs) : base(_UID, _XMLDuBloc, _blocPrécédent, _groupeDeBlocs) { // Déclarations // ------------ String nomDeLAttribut; XmlNode XMLInterne; // Initialisation des membres // -------------------------- // Il est possible de sortir de ce groupe, à l'aide du bloc SortDeLaBoucleFaire __bloc_SortDeLaBoucleFaire_Possible = true; // Traitements // ----------- // Analyse du Bloc d'instruction foreach (XmlNode XMLDUnNoeudFils in _XMLDuBloc.ChildNodes) { nomDeLAttribut = ""; if (XMLDUnNoeudFils.Attributes["name"] != null) { nomDeLAttribut = XMLDUnNoeudFils.Attributes["name"].Value; } switch (nomDeLAttribut) { case "Condition": __conditionDeBoucle = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; } } XMLInterne = _XMLDuBloc.SelectSingleNode("./statement"); if (XMLInterne != null) { __blocsInternes = new __BlocsInternes(UID + 1, XMLInterne.FirstChild, null, this); } // Liste les séquences du bloc // --------------------------- __séquences.Add((Séquence)Séquence_1); __séquences.Add((Séquence)Séquence_2); __séquences.Add((Séquence)Séquence_3); __nombreDeBlocsInternes = 1; }
/* * Constructeur */ public GroupeDInstructions_Si_ENTCondition_Alors_Sinon(int _UID, XmlNode _XMLDuBloc, __Bloc _blocPrécédent, __GroupeDeBlocs _groupeDeBlocs) : base(_UID, _XMLDuBloc, _blocPrécédent, _groupeDeBlocs, null, null, null) { // Déclarations // ------------ String nomDeLAttribut; XmlNode XMLInterne; // Traitements // ----------- // Analyse du Bloc d'instruction foreach (XmlNode XMLDUnNoeudFils in _XMLDuBloc.ChildNodes) { nomDeLAttribut = ""; if (XMLDUnNoeudFils.Attributes["name"] != null) { nomDeLAttribut = XMLDUnNoeudFils.Attributes["name"].Value; } switch (nomDeLAttribut) { case "Condition": __conditionDEntré = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; } } // Blocs internes au groupe // ------------------------ XMLInterne = _XMLDuBloc.SelectSingleNode("./statement[@name=\"BlocsInternes\"]"); if (XMLInterne != null) { __blocsInternes = new __BlocsInternes(UID + 1, XMLInterne.FirstChild, null, this); } XMLInterne = _XMLDuBloc.SelectSingleNode("./statement[@name=\"BlocsInternes_Sinon\"]"); if (XMLInterne != null) { if (__blocsInternes != null) { __blocsInternesSupplémentaires = new __BlocsInternes(UID + 1 + __blocsInternes.nombreDeSéquence, XMLInterne.FirstChild, null, this); } else { __blocsInternesSupplémentaires = new __BlocsInternes(UID + 1, XMLInterne.FirstChild, null, this); } } }
/* * Constructeur */ public Valeur_OpérateurLogique(int _UID, XmlNode _XMLDuBloc, __Bloc _blocPrécédent, __GroupeDeBlocs _groupeDeBlocs, int _opérationLogique) : base(_UID, _XMLDuBloc, _blocPrécédent, _groupeDeBlocs) { // Déclarations // ------------ String nomDeLAttribut; // Traitements // ----------- // Analyse du Bloc d'instruction foreach (XmlNode XMLDUnNoeudFils in _XMLDuBloc) { nomDeLAttribut = ""; if (XMLDUnNoeudFils.Attributes["name"] != null) { nomDeLAttribut = XMLDUnNoeudFils.Attributes["name"].Value; } switch (nomDeLAttribut) { case "Valeur1": __valeur1 = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; case "Valeur2": __valeur2 = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; } } switch (_opérationLogique) { case (int)__OPÉRATIONS_LOGIQUES.NOM.OU: __code = "(" + __valeur1.codePourLeSéquenceur + " or " + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__OPÉRATIONS_LOGIQUES.NOM.ET: __code = "(" + __valeur1.codePourLeSéquenceur + " and " + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__OPÉRATIONS_LOGIQUES.NOM.NON: __code = "not (" + __valeur1.codePourLeSéquenceur + ")"; break; } }
/* * Constructeur */ public Variable_DéfinirUneVariable(int _UID, XmlNode _XMLDuBloc, __Bloc _blocPrécédent, __GroupeDeBlocs _groupeDeBlocs) : base(_UID, _XMLDuBloc, _blocPrécédent, _groupeDeBlocs) { // Déclarations // ------------ String erreur; String nomDeLAttribut; // Traitements // ----------- // Analyse du Bloc d'instruction foreach (XmlNode XMLDUnNoeudFils in _XMLDuBloc) { nomDeLAttribut = ""; if (XMLDUnNoeudFils.Attributes["name"] != null) { nomDeLAttribut = XMLDUnNoeudFils.Attributes["name"].Value; } switch (nomDeLAttribut) { case "VAR": __nom = XMLDUnNoeudFils.FirstChild.InnerText; break; case "VALUE": __expression = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; } } if (__expression == null) { erreur = String.Format(Messages.Message((int)Messages.TYPE.VARIABLE_NON_INITIALISÉE), __nom); throw new Exception(erreur); } __Variable.AjouteUneVariable(__nom); // Liste les séquences du bloc // --------------------------- __séquences.Add((Séquence)Séquence_1); }
/* * Constructeur */ public Valeur_Booléen_ComparaisonNumériques_ENTEntier_SELComparaison_ENTEntier(int _UID, XmlNode _XMLDuBloc, __Bloc _blocPrécédent, __GroupeDeBlocs _groupeDeBlocs) : base(_UID, _XMLDuBloc, _blocPrécédent, _groupeDeBlocs) { // Déclarations // ------------ String nomDeLAttribut; // Traitements // ----------- // Analyse du Bloc d'instruction foreach (XmlNode XMLDUnNoeudFils in _XMLDuBloc) { nomDeLAttribut = ""; if (XMLDUnNoeudFils.Attributes["name"] != null) { nomDeLAttribut = XMLDUnNoeudFils.Attributes["name"].Value; } switch (nomDeLAttribut) { case "Valeur1": __valeur1 = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; case "Valeur2": __valeur2 = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; case "Comparaison": switch (XMLDUnNoeudFils.InnerText) { case "ÉGAL": __comparaison = (int)__COMPARAISONS_NUMÉRIQUES.NOM.ÉGAL; break; case "DIFFÉRENT": __comparaison = (int)__COMPARAISONS_NUMÉRIQUES.NOM.DIFFÉRENT; break; case "PLUS_GRAND": __comparaison = (int)__COMPARAISONS_NUMÉRIQUES.NOM.PLUS_GRAND; break; case "PLUS_PETIT": __comparaison = (int)__COMPARAISONS_NUMÉRIQUES.NOM.PLUS_PETIT; break; case "PLUS_GRAND_OU_ÉGAL": __comparaison = (int)__COMPARAISONS_NUMÉRIQUES.NOM.PLUS_GRAND_OU_ÉGAL; break; case "PLUS_PETIT_OU_ÉGAL": __comparaison = (int)__COMPARAISONS_NUMÉRIQUES.NOM.PLUS_PETIT_OU_ÉGAL; break; } break; } } switch (__comparaison) { case (int)__COMPARAISONS_NUMÉRIQUES.NOM.ÉGAL: __code = "(" + __valeur1.codePourLeSéquenceur + "==" + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__COMPARAISONS_NUMÉRIQUES.NOM.DIFFÉRENT: __code = "(" + __valeur1.codePourLeSéquenceur + "!=" + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__COMPARAISONS_NUMÉRIQUES.NOM.PLUS_GRAND: __code = "(" + __valeur1.codePourLeSéquenceur + ">" + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__COMPARAISONS_NUMÉRIQUES.NOM.PLUS_PETIT: __code = "(" + __valeur1.codePourLeSéquenceur + "<" + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__COMPARAISONS_NUMÉRIQUES.NOM.PLUS_GRAND_OU_ÉGAL: __code = "(" + __valeur1.codePourLeSéquenceur + ">=" + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__COMPARAISONS_NUMÉRIQUES.NOM.PLUS_PETIT_OU_ÉGAL: __code = "(" + __valeur1.codePourLeSéquenceur + "<=" + __valeur2.codePourLeSéquenceur + ")"; break; } }
/* * Constructeur */ public Valeur_Entier_OpérationNumériques_ENTEntier_SELComparaison_ENTEntier(int _UID, XmlNode _XMLDuBloc, __Bloc _blocPrécédent, __GroupeDeBlocs _groupeDeBlocs) : base(_UID, _XMLDuBloc, _blocPrécédent, _groupeDeBlocs) { // Déclarations // ------------ String nomDeLAttribut; // Traitements // ----------- // Analyse du Bloc d'instruction foreach (XmlNode XMLDUnNoeudFils in _XMLDuBloc) { nomDeLAttribut = ""; if (XMLDUnNoeudFils.Attributes["name"] != null) { nomDeLAttribut = XMLDUnNoeudFils.Attributes["name"].Value; } switch (nomDeLAttribut) { case "Valeur1": __valeur1 = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; case "Valeur2": __valeur2 = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupeDeBlocs); break; case "Opération": switch (XMLDUnNoeudFils.InnerText) { case "ADDITION": opération = (int)__OPÉRATIONS_NUMÉRIQUES.NOM.ADDITION; break; case "SOUSTRACTION": opération = (int)__OPÉRATIONS_NUMÉRIQUES.NOM.SOUSTRACTION; break; case "MULTIPLICATION": opération = (int)__OPÉRATIONS_NUMÉRIQUES.NOM.MULTIPLICATION; break; case "DIVISION": opération = (int)__OPÉRATIONS_NUMÉRIQUES.NOM.DIVISION; break; case "MODULO": opération = (int)__OPÉRATIONS_NUMÉRIQUES.NOM.MODULO; break; } break; } } switch (opération) { case (int)__OPÉRATIONS_NUMÉRIQUES.NOM.ADDITION: __code = "(" + __valeur1.codePourLeSéquenceur + "+" + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__OPÉRATIONS_NUMÉRIQUES.NOM.SOUSTRACTION: __code = "(" + __valeur1.codePourLeSéquenceur + "-" + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__OPÉRATIONS_NUMÉRIQUES.NOM.MULTIPLICATION: __code = "(" + __valeur1.codePourLeSéquenceur + "*" + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__OPÉRATIONS_NUMÉRIQUES.NOM.DIVISION: __code = "(" + __valeur1.codePourLeSéquenceur + "/" + __valeur2.codePourLeSéquenceur + ")"; break; case (int)__OPÉRATIONS_NUMÉRIQUES.NOM.MODULO: __code = "(" + __valeur1.codePourLeSéquenceur + "%" + __valeur2.codePourLeSéquenceur + ")"; break; } }
/* * Constructeur */ public Contrôle_Attends_ENTDurée(int _UID, XmlNode _XMLDuBloc, __Bloc _blocPrécédent, __GroupeDeBlocs _groupe) : base(_UID, _XMLDuBloc, _blocPrécédent, _groupe, 0.0f) { // Déclarations // ------------ String nomDeLAttribut; __Valeur expression; // Traitements // ----------- // Analyse du Bloc d'instruction foreach (XmlNode XMLDUnNoeudFils in _XMLDuBloc.ChildNodes) { nomDeLAttribut = ""; if (XMLDUnNoeudFils.Attributes["name"] != null) { nomDeLAttribut = XMLDUnNoeudFils.Attributes["name"].Value; } switch (nomDeLAttribut) { case "Durée": expression = Compilateur.AnalyseUnNoeudDExpression(_UID, XMLDUnNoeudFils.FirstChild, _blocPrécédent, _groupe); __durée = float.Parse(expression.codePourLeSéquenceur); break; } } // Taille de l'instruction // ----------------------- // Dans la classe mère // Code d'initialisation // --------------------- // Aucun // Code de traitement // ------------------ // Dans la classe mère // Code de fin // ----------- // Aucun // Condition de passage à l'instruction suivante // --------------------------------------------- // Dans la classe mère }