private void anadeProduccionesTerminales( String origen, String cima, ArrayList<String> estados, ArrayList<String> simbolos, String destino) { String est = new String(/*itEst.next()*/ destino); Iterator<String> itSimbolos = simbolos.iterator(); while (itSimbolos.hasNext()) { String sim = new String(itSimbolos.next()); Produccion p = new Produccion(); p.anadeCadena(sim); String nVar = "[" + origen + cima + est + "]"; gic.anadeVariable(nVar); gic.anadeProdConTerminales(nVar); gic.anadeProduccion(nVar, p); } }
private void anadeProduccionConUnaLista( String origen, String destino, String cima, ArrayList<String> lista, ArrayList<String> simbolos, ArrayList<String> salidaPila) { int tamLista = lista.size(); int tamListaConcreta = salidaPila.size(); int tamSimbolos = simbolos.size(); int nuevoTam = tamLista - 1; String rk = lista.get(nuevoTam) + ""; String nVar = "[" + origen + cima + rk + "]"; gic.anadeVariable(new String(nVar)); Produccion p = new Produccion(); for (int j = 0; j < tamSimbolos; j++) { String sim = simbolos.get(j); p.anadeCadena(sim); for (int i = 0; i < tamListaConcreta; i++) { String cadProd = "["; if (i == 0) cadProd += destino; else cadProd += lista.get(i - 1); String sigEstado = null; if (i + 1 == tamListaConcreta) { sigEstado = rk; } else { sigEstado = lista.get(i); } cadProd += salidaPila.get(i) + sigEstado + "]"; p.anadeCadena(new String(cadProd)); } gic.anadeProduccion(nVar, p); } }
/** * @return Gramatica resultado de aplicar el algoritmo para hallar una gramatica indepenediente de * contexto a partir de un automata de pila dado. */ @SuppressWarnings("unchecked") private void AP_Gramatica() { gic = new GramaticaIC(); gic.setSimbolos((ArrayList<String>) automataEntrada.getAlfabeto().getListaLetras().clone()); gic.setVariableInicial("S"); ArrayList<String> estados = (ArrayList<String>) this.automataEntrada.getEstados().clone(); Iterator<String> it = estados.iterator(); gic.anadeVariable("S"); while (it.hasNext()) { Produccion p = new Produccion(); String ini = this.automataEntrada.getEstadoInicial(); String cadena = "[" + ini + fondoPila + it.next() + "]"; p.anadeCadena(cadena); gic.anadeProduccion("S", p); gic.anadeVariable(cadena); } ArrayList<AristaAP> arista = this.automataEntrada.getAutomataPila(); Iterator<AristaAP> itArista = arista.iterator(); while (itArista.hasNext()) { AristaAP aristaActual = itArista.next(); ArrayList<String> salidaPila = (ArrayList<String>) aristaActual.getSalidaPila().clone(); String destino = new String(aristaActual.getDestino()); String origen = new String(aristaActual.getOrigen()); ArrayList<String> simbolos = (ArrayList<String>) aristaActual.getEntradaSimbolos().clone(); String cima = new String(aristaActual.getCimaPila()); if (desapila(salidaPila)) { anadeProduccionesTerminales(origen, cima, estados, simbolos, destino); } else { int tamLista = salidaPila.size(); ArrayList<ArrayList<String>> listaParesEstados = construyeListasEstados((ArrayList<String>) estados.clone(), tamLista); anadeProduccionesConLista(origen, destino, cima, listaParesEstados, simbolos, salidaPila); } } html = ""; html += "<br><h2>" + mensajero.devuelveMensaje("simplificacionGICs.resulap", 2) + "</h2><center><table>" + gic.toHTML() + "</table></center><br>"; xml += "<paso><titulo>" + mensajero.devuelveMensaje("simplificacionGICs.resulap", 2) + "</titulo>" + gic.toXML() + "</paso>\n"; xmllatex += "<ocultar>\n<oculto><titulo>" + mensajero.devuelveMensaje("simplificacionGICs.resulaplatex", 2) + "</titulo>" + gic.toLat() + "</oculto>\n"; traduceVariables(); }