예제 #1
0
 @Override
 public Automata ejecutar(boolean muestraPasos) {
   // TODO Auto-generated method stub
   String palabras;
   Iterator<String> it = palabra.iterator();
   while (it.hasNext()) {
     palabras = it.next();
     char[] pals = palabras.toCharArray();
     pertGreibach(
         gramatica,
         gramatica.getProducciones().get(gramatica.getVariableInicial()),
         pals.length,
         pals,
         0);
   }
   return null;
 }
예제 #2
0
  private boolean pertGreibach(Greibach g, ArrayList<Produccion> p, int l, char[] pal, int s) {
    // TODO Auto-generated method stub
    boolean este = false;
    if (s == l) {
      if (p.contains(lambda)) return true;
      else return false;
    } else if (s == l - 1) {
      Iterator<Produccion> it = p.iterator();
      while (it.hasNext()) {
        Produccion aux = it.next();
        if (aux.getConcatenacion().get(0).toCharArray()[0] == pal[s]) {
          if (aux.getConcatenacion().get(1) == null) return true;
          else
            este =
                este
                    || pertGreibach(
                        g, g.getProducciones().get(aux.getConcatenacion().get(1)), l, pal, s + 1);
        }
        return este;
      }
    } else {
      Iterator<Produccion> it = p.iterator();
      while (it.hasNext()) {
        Produccion aux = it.next();
        if (aux.getConcatenacion().get(0).toCharArray()[0] == pal[s]) {
          if (aux.getConcatenacion().get(1) != null)
            este =
                este
                    || pertGreibach(
                        g, g.getProducciones().get(aux.getConcatenacion().get(1)), l, pal, s + 1);
        }
      }
    }

    return este;
  }