Ejemplo n.º 1
0
    /// <summary>
    /// Obtenir le grammaire qui defini le language defini par l'automate courant
    /// </summary>
    /// <returns>Un grammer equivalant</returns>
    public Grammer toGrammer()
    {
        Gfa auto = this.toGfa();
        ArrayList v = new ArrayList();
        for (char i = 'A'; i < auto.S + 'A'; i++)
            v.Add(i);
        if (v.Count == 0) v.Add('A');
        Grammer result = new Grammer(auto.X, v, (char)v[auto.S0]);
        for (int i = 0; i < this.S; i++)
            for (int k = 0; k < auto.Read.Count; k++)
            {
                string word = auto.Read[k].ToString();
                foreach (int j in auto.getInstruction(i, word))
                {
                    result.AddProduction(new Grammer.ProductionRule((char)result.V[i], word, (char)result.V[j]));
                    if (auto.F.Contains(j))
                        result.AddProduction(new Grammer.ProductionRule((char)result.V[i], word, Grammer.NOVARIABLE));

                }
            }
        return result;
    }