All pastes #496702 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-05-19 12:07 UTC
rendered paste body
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;
}