Пример #1
0
 def en_fait(self, basedefaits):
     if AnalyseurSimple.est_fait(
             self.expression_gauche) and AnalyseurSimple.est_fait(
                 self.expression_droite):
         valeur_gauche = AnalyseurSimple.valuer_expression(
             self.expression_gauche, basedefaits)
         valeur_droite = AnalyseurSimple.valuer_expression(
             self.expression_droite, basedefaits)
         if valeur_gauche is not None and valeur_droite is not None:
             return self.valeur(basedefaits)
         elif valeur_gauche is None and valeur_droite is not None:
             return Fait(self.expression_gauche, valeur_droite)
         elif valeur_gauche is not None and valeur_droite is None:
             return Fait(self.expression_droite, valeur_gauche)
     elif not AnalyseurSimple.est_fait(
             self.expression_gauche) and AnalyseurSimple.est_fait(
                 self.expression_droite):
         return Fait(self.expression_droite, self.expression_gauche)
     elif AnalyseurSimple.est_fait(
             self.expression_gauche) and not AnalyseurSimple.est_fait(
                 self.expression_droite):
         return Fait(self.expression_gauche, self.expression_droite)
     elif not AnalyseurSimple.est_fait(
             self.expression_gauche) and not AnalyseurSimple.est_fait(
                 self.expression_droite):
         return self.valeur(basedefaits)
     Log.warning(
         "Transformation impossible car les deux valeurs sont inconnus")
     Log.warning("Il est possible qu'il faille relancer un chaînage")
     return False
Пример #2
0
 def modification_basedefaits(self, ligne):
     if self.affichage_basedefaits.item(
             ligne,
             0) is None or self.affichage_basedefaits.item(
             ligne,
             1) is None:
         return
     if self.desactiver_modification:
         return
     symbole = self.affichage_basedefaits.item(ligne, 0).text().strip()
     valeur = self.affichage_basedefaits.item(ligne, 1).text().strip()
     if symbole != "" and valeur != "":
         try:
             AnalyseurSyntaxique.analyse_symbole(symbole)
             if self.affichage_basedefaits.rowCount() - 1 != ligne:
                 self.cli.basedefaits.modifier(ligne, Fait(
                     symbole, AnalyseurSyntaxique.analyse_valeur_fait(valeur)))
             else:
                 self.cli.basedefaits.ajouter(
                     Fait(symbole, AnalyseurSyntaxique.analyse_valeur_fait(valeur)))
                 self.affichage_basedefaits.setRowCount(
                     self.affichage_basedefaits.rowCount() + 1)
         except Exception as e:
             Log.warning(e)
             self.affichage_basedefaits.setItem(
                 ligne, 0, QTableWidgetItem(
                     self.cli.basedefaits.symbole(ligne)))
Пример #3
0
 def analyse_fait(chaine):
     if len(chaine.split("=")) < 2:
         raise Exception("Invalide {}".format(chaine))
     AnalyseurSyntaxique.verifier_valeurs(chaine.split("="), chaine)
     symbole = AnalyseurSyntaxique.analyse_symbole(chaine.split("=")[0])
     valeur = AnalyseurSyntaxique.analyse_valeur_fait(chaine.split("=")[1])
     return Fait(symbole, valeur)
Пример #4
0
 def chainage_arriere(self):
     demandefait = DemandeFait("Chaînage arrière", self)
     rep = demandefait.exec()
     if rep == QDialog.Accepted:
         self.cli.moteur.chainage_arriere(
             self.cli.basedefaits, self.cli.basederegles, Fait(
                 demandefait.symbole.text(), AnalyseurSyntaxique.analyse_valeur(
                     demandefait.valeur.text())), None, None)
         self.mise_a_jour.emit()
Пример #5
0
 def analyse_conclusion(chaine):
     conclusions = []
     for conclusion in chaine.split("&"):
         if len(conclusion.split("=")) < 2:
             raise Exception("Invalide {}".format(chaine))
         symbole = AnalyseurSyntaxique.analyse_symbole(
             conclusion.split("=")[0])
         valeur = AnalyseurSyntaxique.analyse_valeur_fait(
             conclusion.split("=")[1])
         conclusions.append(Fait(symbole, valeur))
     return conclusions
Пример #6
0
 def valeur_fait(self, symbole):
     for fait in self.faits:
         if fait.symbole == symbole:
             return fait.valeur
     self.ajouter(Fait(symbole, None))
     return None
Пример #7
0
 def demande_fait(self):
     print("Nom du fait ?", end=' ')
     nom_fait = input()
     print("Valeur du fait ?", end=' ')
     valeur_fait = input()
     return Fait(nom_fait, AnalyseurSyntaxique.analyse_valeur(valeur_fait))