unsigned int grama::tipo1() {
unsigned int i = 0, enc = 0;
string auxD, auxI, alfa1, alfa2;
vector<unsigned int> 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;
}