@SuppressWarnings("unchecked")
 @Override
 public P calcular() throws Exception {
   for (int i = 0; i <= (MyStr.length() - 1); i++) {
     CharSequence MyChar = "" + MyStr.charAt(i);
     if (numeros.contains(MyChar)) {
       pila.push(Integer.parseInt(MyChar.toString()));
     } else {
       String a = MyChar.toString();
       op1 = (Integer) pila.pop();
       op2 = (Integer) pila.pop();
       if (a.equals("+")) res = op1 + op2;
       else if (a.equals("-")) res = op2 - op1;
       else if (a.equals("*")) res = op1 * op2;
       else if (a.equals("/")) res = op2 / op1;
       else if (a.equals("^")) res = op2 ^ op1;
       else throw new Exception("Se ingreso un caracter desconocido!");
       pila.push(res);
     }
   }
   return (P) pila.peek();
 }
Example #2
0
  public static void main(String[] args) {
    Pila<Videojuego> pila = new Pila<Videojuego>();

    try {
      pila.push(new Videojuego("Dark Souls", "Action RPG"));
      pila.push(new Videojuego("Resident Evil", "Survival Horror"));
      pila.push(new Videojuego("Batman: Arkham Asylum", "Acción"));
    } catch (TituloNoValidoException | GeneroNoValidoException e) {
      System.out.println(e.getMessage());
    }

    while (!pila.pila.isEmpty()) {
      System.out.println(pila.top());
      System.out.println("Desapilo de la pila: " + pila.pop());
    }
  }
Example #3
0
  /**
   * Ejecutamos un AFND para una cadena dada hasta el caracter cuyo numero es indicado por
   * parametros y devolvemos el vector de configuraciones instantaneas al momento
   *
   * @param cadena
   * @param hasta
   * @return vector de configuraciones instantaneas
   */
  public ArrayList<ConfigInstantanea> ejecutar(String entrada, int hasta) throws NoDefinido {
    // definimos el conjunto de estados de la configuracion instantanea
    ArrayList<Estado> estados = new ArrayList<Estado>();

    // Agregamos el estado inicial
    estados.add(this.getEstadoInicial());

    // modificamos la cadena para considerar lambda al principio, final, e intercalado
    System.out.println("Leemos: " + entrada);
    entrada += "&";

    // recorremos la cadena modificada para determinar el conjunto de estados
    for (int i = 0; i <= hasta; i++) {

      System.out.println("Pila: " + pila.toString());

      // definimos el conjunto de estados proximos
      ArrayList<Estado> estadosProximos = new ArrayList<Estado>();

      // recorremos todos los estados del conjunto de estados de la config instantanea
      for (int b = 0; b < estados.size(); b++) {
        Estado q = estados.get(b);
        System.out.println("Estamos en el estado: " + q.getNombre());
        ArrayList<Estado> qs = new ArrayList<Estado>();

        try {
          System.out.println("Analizamos: " + entrada.charAt(i) + ", " + pila.leer());
          qs = q.valuar(entrada.charAt(i), this.pila);
        } catch (ExcepcionPilaVacia e) {
          System.out.println("Pila Vacia...");
        }

        // si corresponde agregar un estado
        if (qs.size() > 0) {
          estadosProximos.addAll(qs);
          System.out.println("...y pasamos al estado: " + qs.get(0).getNombre());
        } else {
          // si no hay transiciones pero el caracter es lambda nos quedamos en el estado actual
          if (entrada.charAt(i) == '&') {
            estadosProximos.add(q);
          }
        }
      }

      // Comprobamos que haya al menos 1 estado en el conjunto de los siguientes
      if (estadosProximos.size() <= 0) throw new NoDefinido();

      // definimos estados como los estados siguientes para usarlos en la proxima iteracion
      estados = estadosProximos;
    }

    // si todo va bien salimos con el vector de configuraciones instantaneas
    if (estados.size() > 0) {
      // cadena restante por leer
      String cadenaRestante = entrada.substring(hasta);
      // creamos un vector para las configuraciones instantaneas
      ArrayList<ConfigInstantanea> cfgs = new ArrayList<ConfigInstantanea>();

      // recorremos los estados al momento
      for (int j = 0; j < estados.size(); j++)
        cfgs.add(new ConfigInstantanea(estados.get(j), cadenaRestante));

      return cfgs;
    }

    // si llegamos aca paso algo!! salimos con excepcion!
    throw new NoDefinido();
  }