Пример #1
0
SIMBOLO *tsim_int_programa (TABLA_SIMBOLOS tabla, char *nombre, int dir)
/**********************************************************************/
{
   int sitio = hash (nombre);
   SIMBOLO simbolo;

   simbolo.tipo = PROGRAMA;
   simbolo.nombre = strdup (nombre);
   simbolo.nivel = 0;
   simbolo.dir = dir;
   simbolo.visible = TRUE;

   anadir_izquierda_copiando (&simbolo, &tabla[sitio], sizeof (simbolo));

   return (SIMBOLO *) observar_izquierda (tabla[sitio]);
}
Пример #2
0
SIMBOLO *tsim_int_accion (TABLA_SIMBOLOS tabla, char *nombre, int nivel, int dir)
/**********************************************************************/
{
   int sitio = hash (nombre);
   SIMBOLO simbolo;

   simbolo.tipo = ACCION;
   simbolo.nombre = strdup(nombre);
   simbolo.nivel = nivel;
   simbolo.dir = dir;
   simbolo.visible = TRUE;
   crear_vacia (&(simbolo.parametros));

   anadir_izquierda_copiando (&simbolo, &tabla[sitio], sizeof (simbolo));

   return (SIMBOLO *) observar_izquierda (tabla[sitio]);
}
Пример #3
0
SIMBOLO *tsim_int_parametro (TABLA_SIMBOLOS tabla, char *nombre, TIPO_VARIABLE variable, CLASE_PARAMETRO parametro,int nivel, int dir)
/**********************************************************************/
{
   int sitio = hash (nombre);
   SIMBOLO simbolo;

   simbolo.tipo = PARAMETRO;
   simbolo.nombre = strdup(nombre);
   simbolo.variable = variable;
   simbolo.nivel = nivel;
   simbolo.dir = dir;
   simbolo.parametro = parametro;
   simbolo.visible = TRUE;

   anadir_izquierda_copiando (&simbolo, &tabla[sitio], sizeof (simbolo));

   return (SIMBOLO *) observar_izquierda (tabla[sitio]);
}
Пример #4
0
SIMBOLO *tsim_int_variable (TABLA_SIMBOLOS tabla, char *nombre, TIPO_VARIABLE variable, int nivel, int dir)
/**********************************************************************/
{
   int sitio = hash (nombre);
   SIMBOLO simbolo;

   simbolo.tipo = VARIABLE;
   simbolo.nombre = strdup(nombre);
   simbolo.variable = variable;
   simbolo.nivel = nivel;
   simbolo.dir = dir;
   simbolo.visible = TRUE;
   simbolo.referenciada = FALSE; /* Modificado, al añadir una variable a la TS la ponemos de inicio como no referenciada */

   anadir_izquierda_copiando (&simbolo, &tabla[sitio], sizeof (simbolo));

   return (SIMBOLO *) observar_izquierda (tabla[sitio]);
}
Пример #5
0
SIMBOLO *tsim_int_variable_vector (TABLA_SIMBOLOS tabla, char *nombre, int nivel, int dir, 
                                   TIPO_VARIABLE tipo_componentes, int indiceInf, int indiceSup, 
				   int dimension)
/**********************************************************************/
{
   int sitio = hash (nombre);
   SIMBOLO simbolo;

   simbolo.tipo = VARIABLE;
   simbolo.nombre = strdup(nombre);
   simbolo.variable = VECTOR;
   simbolo.nivel = nivel;
   simbolo.dir = dir;
   simbolo.visible = TRUE;
   simbolo.tipo_componentes = tipo_componentes;
   simbolo.indiceInf = indiceInf;
   simbolo.indiceSup = indiceSup;
   simbolo.dimension = dimension;

   anadir_izquierda_copiando (&simbolo, &tabla[sitio], sizeof (simbolo));

   return (SIMBOLO *) observar_izquierda (tabla[sitio]);
}
Пример #6
0
void insertar_copiando (pLISTA pL, int i, ELEMENTO e, int tamano)
/**********************************************************************/
{	pNODO aux, siguienteAux; 
	int indSig; 
	
	if (i == 1)
		anadir_izquierda_copiando (e, pL, tamano); 
	else if (i == longitud_lista (*pL)+1)
		anadir_derecha_copiando (e, pL, tamano); 
	else{
		aux = pL->primero; 
		indSig = 2; 
		while (indSig<i){
			aux = aux->siguiente; 
			indSig++; 
		}
		siguienteAux = aux->siguiente; 
		aux->siguiente = (pNODO) malloc (sizeof (NODO)); 
		aux = aux->siguiente; 
		memcpy (aux->dato, e, tamano); 
		aux->siguiente = siguienteAux; 
		pL->elementos++; 
	}
}