unsigned int grama::tipo1() { unsigned int i = 0, enc = 0; string auxD, auxI, alfa1, alfa2; vector varPos; while ( i < _produc.size() ) { auxI = _produc.get_pIzq(i); auxD = _produc.get_pDer(i); if ( auxI.size() == 1 && auxI[0] != _axiom && auxD[0] == '@' ) // Comprueba que n sea A=@ return 0; if ( auxI.size() > auxD.size() ) // Comprueba que la parte izquierda no sea mayor a la derecha return 0; if ( auxI.size() > 1 ) { //Solo comprbaremos las que sean mayores que 1 de tal forma que tengan tros simbolos for (unsigned int j=0; j < auxI.size(); j++) //usamos un vector para meter las posiciones de las posibles variables if ( _produc.is_variable(auxI[j]) ) varPos.push_back(j); for (unsigned int j=0; j < varPos.size() || !enc; j++) // iniciamos el bucle para la comparacion de alfa1 y alfa2 if ( (auxI.substr(0,varPos[j]) == auxD.substr( 0,varPos[j] )) && (auxI.substr(varPos[j]+1,auxI.size()-1) == auxD.substr(auxD.size()-(auxI.size()-(varPos[j]+1)),auxD.size()-1) ) ) { alfa = auxI.substr(0,varPos[j]) + auxI.substr(varPos[j]+1,auxI.size()-1); if ( alfa == auxD ) return 0; else enc = 1; } } enc = 0; i++; varPos.clear(); } return 1; }