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
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)))
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)
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()
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
def valeur_fait(self, symbole): for fait in self.faits: if fait.symbole == symbole: return fait.valeur self.ajouter(Fait(symbole, None)) return None
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))