Exemplo n.º 1
0
void hrl2(int hit , struct mod_t *mod, int from_load){

        if((mod->level == 2) && from_load)
        {
                mod->loads++;
                if(hit)
                {
                        estadisticas(1, 5);
                }
                else
                {
                        estadisticas(0, 5);
                }
        }
}
Exemplo n.º 2
0
//obtch: obtiene el siguiente caracter del programa fuente
int obtch() { 

  if (fin_de_archivo==1) {
    error(32);//error 32: el programa fuente esta incompleto
    estadisticas();
	fclose(fp);
    exit(1); //el error es fatal
  }
  
  if (offset==ll-1) {
    ll=getline(linea,MAXLINEA); //trae una línea del programa fuente al buffer de líneas
    if (ll==0) 
      //se retrasa en un blanco la deteccion de EOF, porque obtoken lleva un caracter adelantado. si no, en   
      //algunos casos tendríamos problemas, por ejemplo: no se reconoceria el punto final del programa (...end.)

      fin_de_archivo=1; 		             
    printf("%s",linea);
    offset=-1;
  }

  ++offset;

  if ( (linea[offset]=='\0') || (fin_de_archivo==1) )   
    return(' '); 
  else {
    chNorm = linea[offset];
    return(toupper(linea[offset])); //de esto depende si el lenguaje es sensitivo de mayúsculas o no.
  }

}
Exemplo n.º 3
0
//main: inicia el compilador...solo parser, pero ahora "estabilizado"
int main (int argc,char *argv[]) { 

 time_t timer;char fecha[LONG_FECHA]; //serviran para imprimir la fecha en el listado de salida

 //verificar si hay archivo fuente
 if (argc!=2)
	printf("\nNo se ha proporcionado el nombre del programa fuente (uso: parser2 progfuente)");
 else { 
	fp=fopen(argv[1],"r"); //abrir el fuente solo para lectura
	if (fp==NULL) 
	   printf("\nNo se encontro el programa fuente indicado");
	else {
	   timer=time(NULL);
	   strcpy(fecha,asctime(localtime(&timer)));
	   printf("\n\nCompilador de pl0 version 3.0/Parser2 --- abril de 2011 --- A2\n");
	   printf("%s - %s\n",argv[1],fecha);

	   //inicializacion de tokens de símbolos especiales (en auxiliares.cpp)
	   inicializar_espec() ; 

	   //inicializacion de otras variables (en pl0.h y scanner.h)
	   ch=' ';
	   fin_de_archivo=0;
	   offset=-1;ll=0;
	   no_de_errores=0; 

	   //inicialización de conjuntos de estabilización (en conjuntos.cpp)
	   inicializa_conjuntos();

       // inicializacion de la tabla de simbolos (en tds.cpp)
       inicializarTdS();

	   //invocar al scanner (en scanner.cpp)
	   obtoken(); 

	   //inicializamos el índice sobre la tds (it en tds.h)
	   it =0; 
	  
	   //activación del parser (en parser.h)
	   bloque(set_arranque); 

	   if (token!=punto)	
		  error(9); //error 9: se esperaba un punto

	   //indicar cuántos errores hay (si los hubieron) (en auxiliares.cpp)
	   estadisticas();

	   //cerrar el programa fuente
	   fclose(fp);	   	   
	}
 }
 return (0);
}
Exemplo n.º 4
0
//gen
//coloca una instrucción más en el array de código intermedio
//ic se deja al final una posición adelante.                    
void gen (enum fcn x,int y,int z,float r) {
  if (ic > MAXIC-1) {
    error(33); //error fatal: no queda más que terminar la compilación por una limitación específica del compilador
    //ya no hay más espacio para el código-p
    estadisticas();
    fclose(fp);
    exit(1);   // el error es fatal=exit
  }

  //generar una instrucción de código-p
  codigo[ic].f  = x;
  codigo[ic].ni = y;
  codigo[ic].di = z;
  codigo[ic].r  = r;

  ++ic;
}