/** * @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(); }