Package Dependencies.PR1

Source Code of Dependencies.PR1.Grammar

package Dependencies.PR1;

import Dependencies.PR1.Symbols.V;
import Dependencies.PR1.Symbols.VN;
import Dependencies.PR1.Symbols.VT;
import Dependencies.PR6.Production;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class Grammar {

    //Atributos.
    private Collection<VN> listaVN;
    private Collection<VT> listaVT;
    private Collection<Production> producciones;
    private VN simbInicial;
    private String path;

    //Constructores.
    public Grammar(Collection<VN> listaVN, Collection<VT> listaVT, Collection<Production> producciones, VN simbInicial) {
        this.listaVN = listaVN;
        this.listaVT = listaVT;
        this.producciones = producciones;
        this.simbInicial = simbInicial;
    }

   
    public Grammar(String path) throws IOException {
        this.path = path;
        //Inicialización de variables.

        listaVN = new ArrayList<VN>();
        listaVT = new ArrayList<VT>();
        producciones = new ArrayList<Production>();
        simbInicial = new VN();

        //Lectura de fichero.

        FileReader lF = new FileReader(path);
        lF.analizarFichero(listaVN, listaVT, producciones, simbInicial);

    }

    //Getter & Setter.
    public Collection<VN> getListaVN() {
        return listaVN;
    }

    public void setListaVN(Collection<VN> listaVN) {
        this.listaVN = listaVN;
    }

    public Collection<VT> getListaVT() {
        return listaVT;
    }

    public void setListaVT(Collection<VT> listaVT) {
        this.listaVT = listaVT;
    }

    public Collection<Production> getProducciones() {
        return producciones;
    }

    public void setProducciones(Collection<Production> producciones) {
        this.producciones = producciones;
    }

    public VN getSimbInicial() {
        return simbInicial;
    }

    public void setSimbInicial(VN simbInicial) {
        this.simbInicial = simbInicial;
    }

    //Métodos.
    @Override
    public String toString() {
        return ("Lista de simbolos no terminales:\n" + listaVN.toString()
                + "\nLista de simbolos terminales:\n" + listaVT.toString()
                + "\nProducciones:\n" + mostrarProducciones()
                + "Simbolo inicial: " + simbInicial.toString());
    }
   
    private String devolverConsecuente (Collection<V> cons) {
        String aux = "";
        for (V vv: cons) {
            aux += " " + vv + "";
        }
        aux = aux.substring(1);
        return aux;
    }
   
    private String mostrarProducciones() {
        String toReturn = "";
        for (VN v : listaVN) {
            Collection<Collection<V>> consecuentes = this.devolverConsecuentes(v);
            toReturn += v + " -> ";
            int fin = consecuentes.size() - 1;
            for(Collection<V> cons: consecuentes) {
                toReturn += devolverConsecuente(cons);
                if (fin != 0) {
                    toReturn += "|";
                }
                --fin;
            }
            toReturn += "\n";//p.toString() + "\n";
        }
        return toReturn;
    }

    public Collection<Collection<V>> devolverConsecuentes(VN antecedente) {
        Collection<Collection<V>> cons = new ArrayList<Collection<V>>();
        for (Production p : producciones) {
            if (p.getAntecedente().equals(antecedente)) {
                cons.add(p.getConsecuente());
            }
        }
        return cons;
    }

    public Production obtenerProduccion(int n) {
        ArrayList<Production> oP = (ArrayList) this.producciones;
        return oP.get(--n);
    }

    public List<Production> obtenerProducionesConUnNoTerminalEnLosConsecuentes(VN v) {
        List<Production> l = new ArrayList<Production>();
        for (Production p : this.producciones) {
            if (p.getConsecuente().contains(v)) {
                l.add(p);
            }
        }
        return l;
    }
   
   
    public void addProduccion(int i, Production p) {
        ((ArrayList<Production>)this.producciones).add(i, p);
    }
   
    public void addVN (VN v) {
        this.listaVN.add(v);
    }
   
    public void addVT (VT v) {
        this.listaVT.add(v);
    }
   
    public String getPath() {
        return path;
    }
}
TOP

Related Classes of Dependencies.PR1.Grammar

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.