示例#1
0
    /*
     * 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);
    }
示例#2
0
    /*
     * 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;
    }