public static void main(String[] args) { AutomataPila aut = new AutomataPila(); aut.getEstados().add("s0"); aut.getEstados().add("s1"); aut.setEstadoInicial("s0"); aut.setEstadoFinal("s1"); AristaAP arist; arist = new AristaAP(0, 0, 0, 0, "s0", "s0"); arist.anadirSimbolo("a"); arist.setCimaPila("Z"); arist.anadirPila("AZ"); aut.anadeArista(arist); /** **** */ arist = new AristaAP(0, 0, 0, 0, "s0", "s0"); arist.anadirSimbolo("b"); arist.setCimaPila("Z"); arist.anadirPila("BZ"); aut.anadeArista(arist); /** **** */ arist = new AristaAP(0, 0, 0, 0, "s0", "s0"); arist.anadirSimbolo("a"); arist.setCimaPila("A"); arist.anadirPila("AA"); aut.anadeArista(arist); /** **** */ arist = new AristaAP(0, 0, 0, 0, "s0", "s0"); arist.anadirSimbolo("b"); arist.setCimaPila("B"); arist.anadirPila("BB"); aut.anadeArista(arist); /** **** */ arist = new AristaAP(0, 0, 0, 0, "s0", "s0"); arist.anadirSimbolo("a"); arist.setCimaPila("B"); arist.anadirPila("\\"); aut.anadeArista(arist); /** **** */ arist = new AristaAP(0, 0, 0, 0, "s0", "s0"); arist.anadirSimbolo("b"); arist.setCimaPila("A"); arist.anadirPila("\\"); aut.anadeArista(arist); /** **** */ arist = new AristaAP(0, 0, 0, 0, "s0", "s1"); arist.anadirSimbolo("\\"); arist.setCimaPila("Z"); arist.anadirPila("Z"); aut.anadeArista(arist); /** *** */ AutomataP_to_GramaticaIC a = new AutomataP_to_GramaticaIC(aut); a.AP_Gramatica(); }
/** * @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(); }