/* * Récupère récursivement les classes python correspondants aux différents éléments de la formule * Le cas d'arrêt est le fait de ne plus avoir d'éléments dans la liste Args ce qui signifie qu'on * a atteint les feuilles de l'ast. * Retourne un objet correspondant à une formule python */ public object HandleForm(Formule f) { object pythonForm = null; object[] sub = new object[3]; int i = 0; //Debug.Log(f.ToString()); if (f.getArgs() != null) { foreach (Formule form in f.getArgs()) { /* Debug.Log("i: " + i + "type " + form.getType() ); * if (form.getArgs() != null) * Debug.Log("i: " + i + "args = " + form.getArgs().Count()); * else * Debug.Log("i: " + i + "args = 0");*/ sub[i] = HandleForm(form); i++; } } Formule.Formule_Type type = f.getType(); switch (type) { case Formule.Formule_Type.constante: if (!jardin.GetConstantes().Contains(f.getNom())) { throw new CommException("Error: La constante " + f.getNom() + " n'existe pas dans le jardin."); } if (f.getArgs() == null) { sub[0] = pythonEmptyArray(); } pythonForm = pythonBinaire("Cons_term", f.getNom(), sub[0]); // Debug.Log(" Constante " + f.getNom()); break; case Formule.Formule_Type.variable: pythonForm = pythonUnaire("Var_term", f.getNom()); //Debug.Log(" Variable " + f.getNom()); break; case Formule.Formule_Type.predicat: object array = pythonCreateArray(sub[0]); for (int j = 1; j < i; j++) { array = pythonAddInArray(array, sub[j]); } pythonForm = pythonBinaire("F1_Atom", f.getNom(), array); // Debug.Log(" predicat " + f.getNom()); break; case Formule.Formule_Type.neg: pythonForm = pythonUnaire("F1_Neg", sub[0]); // Debug.Log(" neg"); break; case Formule.Formule_Type.and: pythonForm = pythonBinaire("F1_And", sub[0], sub[1]); // Debug.Log("and"); break; case Formule.Formule_Type.or: pythonForm = pythonBinaire("F1_Or", sub[0], sub[1]); // Debug.Log("or"); break; case Formule.Formule_Type.impl: pythonForm = pythonBinaire("F1_Impl", sub[0], sub[1]); // Debug.Log("impl"); break; case Formule.Formule_Type.forall: pythonForm = pythonBinaire("F1_Forall", f.getArgs().First().getNom(), sub[1]); // Debug.Log("forall"); break; case Formule.Formule_Type.exists: pythonForm = pythonBinaire("F1_Exists", f.getArgs().First().getNom(), sub[1]); // Debug.Log("exists"); break; default: Debug.Log("Error"); break; } return(pythonForm); }
/* * Récupère récursivement les classes python correspondants aux différents éléments de la formule * Le cas d'arrêt est le fait de ne plus avoir d'éléments dans la liste Args ce qui signifie qu'on * a atteint les feuilles de l'ast. * Retourne un objet correspondant à une formule python */ public object HandleForm(Formule f) { object pythonForm = null; object[] sub = new object[3]; int i = 0; //Debug.Log(f.ToString()); if (f.getArgs() != null) { foreach (Formule form in f.getArgs()) { /* Debug.Log("i: " + i + "type " + form.getType() ); if (form.getArgs() != null) Debug.Log("i: " + i + "args = " + form.getArgs().Count()); else Debug.Log("i: " + i + "args = 0");*/ sub[i] = HandleForm(form); i++; } } Formule.Formule_Type type = f.getType(); switch (type) { case Formule.Formule_Type.constante: if (!jardin.GetConstantes().Contains(f.getNom())) throw new CommException("Error: La constante " + f.getNom() + " n'existe pas dans le jardin."); if (f.getArgs() == null) sub[0] = pythonEmptyArray(); pythonForm = pythonBinaire("Cons_term", f.getNom(), sub[0]); // Debug.Log(" Constante " + f.getNom()); break; case Formule.Formule_Type.variable: pythonForm = pythonUnaire("Var_term", f.getNom()); //Debug.Log(" Variable " + f.getNom()); break; case Formule.Formule_Type.predicat: object array = pythonCreateArray(sub[0]); for (int j = 1; j < i; j++) array = pythonAddInArray(array, sub[j]); pythonForm = pythonBinaire("F1_Atom", f.getNom(), array); // Debug.Log(" predicat " + f.getNom()); break; case Formule.Formule_Type.neg: pythonForm = pythonUnaire("F1_Neg", sub[0]); // Debug.Log(" neg"); break; case Formule.Formule_Type.and: pythonForm = pythonBinaire("F1_And", sub[0], sub[1]); // Debug.Log("and"); break; case Formule.Formule_Type.or: pythonForm = pythonBinaire("F1_Or", sub[0], sub[1]); // Debug.Log("or"); break; case Formule.Formule_Type.impl: pythonForm = pythonBinaire("F1_Impl", sub[0], sub[1]); // Debug.Log("impl"); break; case Formule.Formule_Type.forall: pythonForm = pythonBinaire("F1_Forall", f.getArgs().First().getNom(), sub[1]); // Debug.Log("forall"); break; case Formule.Formule_Type.exists: pythonForm = pythonBinaire("F1_Exists", f.getArgs().First().getNom(), sub[1]); // Debug.Log("exists"); break; default: Debug.Log("Error"); break; } return pythonForm; }