Ejemplo n.º 1
0
void lista_inicializadores() {

    constante();

    while (sbol->codigo == CCOMA) {
        scanner();

        constante();
    }

}
Ejemplo n.º 2
0
void declarador_init() {

    switch (sbol->codigo) {
    case CASIGNAC: {
        scanner();
        constante();
        break;
    }
    case CCOR_ABR: {
        inf_id->desc.part_var.arr.ptero_tipo_base = inf_id->ptr_tipo; //si es un arreglo paso el tipo al tipo base
        inf_id->ptr_tipo = en_tabla("TIPOARREGLO"); 		  // y el tipo es ahora TIPOARREGLO
        scanner();

        if (sbol->codigo == CCONS_ENT) {
            constante();
        }
        /** /
          else
          error_handler(41); // la cantidad de elementos debe estar especificada como constante entera
        /**/

        if (sbol->codigo == CCOR_CIE) {
            scanner();
        } else {
            error_handler(21);    // falta ]
        }



        if (sbol->codigo == CASIGNAC) {
            scanner();

            if (sbol->codigo == CLLA_ABR) {
                scanner();
            } else {
                error_handler(23);    // falta llave que abre
            }

            lista_inicializadores();

            if (sbol->codigo == CLLA_CIE) {
                scanner();
            } else {
                error_handler(24);    // falta llave que cierra
            }

        }

        break;
    }
    }
}
Ejemplo n.º 3
0
void factor() {
    int clase_rerere_loca;
    switch (sbol->codigo) {
    case CIDENT:

        if(en_tabla(sbol->lexema) != NIL) { /*&*/
            clase_rerere_loca = Clase_Ident(sbol->lexema);
            switch (clase_rerere_loca) {
            case CLASPAR:
            case CLASVAR:
                variable();
                break;
            case CLASFUNC:
                llamada_funcion();
                break;
            default:
                error_handler(8);// palabra reservada
            }
        } else {
            // no esta en la tabla
            error_handler(33); // identificador no declarado
            inf_id->ptr_tipo = en_tabla("TIPOERROR");
            variable();
        }

        break;

    case CCONS_ENT:
    case CCONS_FLO:
    case CCONS_CAR:
        constante();
        break;
    case CCONS_STR:
        scanner();
        break;
    case CPAR_ABR: {
        scanner();
        expresion();
        if (sbol->codigo == CPAR_CIE) {
            scanner();
        } else {
            error_handler(20);    // falta )
        }
        break;
    }
    case CNEG: {
        scanner();
        expresion();
        break;
    }
    default:
        error_handler(31); // error de factor
    }

}
Ejemplo n.º 4
0
int main()
{
	// read the image
	cv::Mat image= cv::imread(IMAGE_FOLDER "/boldt.jpg");
	if (!image.data)
		return 0; 

	// show original image
	cv::namedWindow("Original image");
	cv::imshow("Original image",image);

	// convert into HSV space
	cv::Mat hsv;
	cv::cvtColor(image, hsv, CV_BGR2HSV);

	// split the 3 channels into 3 images
	std::vector<cv::Mat> channels;
	cv::split(hsv,channels);
	// channels[0] is the Hue
	// channels[1] is the Saturation
	// channels[2] is the Value

	// display value
	cv::namedWindow("Value");
	cv::imshow("Value",channels[2]);

	// display saturation
	cv::namedWindow("Saturation");
	cv::imshow("Saturation",channels[1]);

	// display hue
	cv::namedWindow("Hue");
	cv::imshow("Hue",channels[0]);

	// image with fixed value
	cv::Mat newImage;
	cv::Mat tmp(channels[2].clone());
	// Value channel will be 255 for all pixels
	channels[2]= 255;  
	// merge back the channels
	cv::merge(channels,hsv);
	// re-convert to BGR
	cv::cvtColor(hsv,newImage,CV_HSV2BGR);

	cv::namedWindow("Fixed Value Image");
	cv::imshow("Fixed Value Image",newImage);

	// image with fixed saturation
	channels[1]= 255;
	channels[2]= tmp;
	cv::merge(channels,hsv);
	cv::cvtColor(hsv,newImage,CV_HSV2BGR);

	cv::namedWindow("Fixed saturation");
	cv::imshow("Fixed saturation",newImage);

	// image with fixed value and fixed saturation
	channels[1]= 255;
	channels[2]= 255;
	cv::merge(channels,hsv);
	cv::cvtColor(hsv,newImage,CV_HSV2BGR);

	cv::namedWindow("Fixed saturation/value");
	cv::imshow("Fixed saturation/value",newImage);

	// Testing skin detection

	// read the image
	image= cv::imread(IMAGE_FOLDER "/girl.jpg");
	if (!image.data)
		return 0; 

	// show original image
	cv::namedWindow("Original image");
	cv::imshow("Original image",image);

	// detect skin tone
	cv::Mat mask;
	detectHScolor(image, 
		160, 10, // hue from 320 degrees to 20 degrees 
		25, 166, // saturation from ~0.1 to 0.65
		mask);

	// show masked image
	cv::Mat detected(image.size(), CV_8UC3, cv::Scalar(0, 0, 0));
	image.copyTo(detected, mask);
	cv::imshow("Detection result",detected);

	// A test comparing luminance and brightness

	// create linear intensity image
	cv::Mat linear(100,256,CV_8U);
	for (int i=0; i<256; i++) {

		linear.col(i)= i;
	}

	// create a Lab image
	linear.copyTo(channels[0]);
	cv::Mat constante(100,256,CV_8U,cv::Scalar(128));
	constante.copyTo(channels[1]);
	constante.copyTo(channels[2]);
	cv::merge(channels,image);

	// convert back to BGR
	cv::Mat brightness;
	cv::cvtColor(image,brightness, CV_Lab2BGR);
	cv::split(brightness, channels);

	// create combined image
	cv::Mat combined(200,256, CV_8U);
	cv::Mat half1(combined,cv::Rect(0,0,256,100));
	linear.copyTo(half1);
	cv::Mat half2(combined,cv::Rect(0,100,256,100));
	channels[0].copyTo(half2);

	cv::namedWindow("Luminance vs Brightness");
	cv::imshow("Luminance vs Brightness",combined);

	cv::waitKey();
}
Ejemplo n.º 5
0
/*
 * void sentencia(void)
 * Analiza un bloque de sentencias
 */
void sentencia(void)
{

  int im1, im2, im3, im4;
  int dir, from, to, step;

  while (pieza >= p_return)
  {
    test_buffer(&mem, &imem_max, imem);
    switch (pieza)
    {
    case p_return:
      inicio_sentencia();
      lexico();
      if (pieza == p_abrir)
      {
        lexico();
        if (pieza != p_cerrar)
        {
          expresion();
          if (pieza != p_cerrar)
            error(3, 18); /* esperando ')' */
          g1(lrtf);
        }
        else
        {
          g1(lret);
        }
        lexico();
      }
      else
      {
        g1(lret);
      }
      if (!free_sintax)
        if (pieza != p_ptocoma)
          error(3, 9); /* esperando ';' */
      while (pieza == p_ptocoma || pieza == p_coma)
        lexico();
      final_sentencia();
      grabar_sentencia();
      break;
    case p_if:
      telseif[itelseif++] = 0;
      inicio_sentencia();
      lexico();
      if (!free_sintax)
        if (pieza != p_abrir)
          error(3, 22); /* esperando '(' */
      if (pieza == p_abrir)
        lexico();
      condicion();
      if (!free_sintax)
        if (pieza != p_cerrar)
          error(3, 18); /* esperando ')' */
      if (pieza == p_cerrar)
        lexico();
      g2(ljpf, 0);
      im1 = imem - 1;
      final_sentencia();
      grabar_sentencia();
    if1:
      sentencia();
      if (pieza == p_else)
      {
        inicio_sentencia();
        lexico();
        g2(ljmp, 0);
        mem[im1] = imem;
        im1 = imem - 1;
        final_sentencia();
        grabar_sentencia();
        sentencia();
      }
      else if (pieza == p_elseif)
      {
        if (itelseif == 0)
          error(0, 73); /* elseif fuera de bloque if */
        inicio_sentencia();
        g2(ljmp, 0);
        telseif[itelseif++] = imem - 1;
        mem[im1] = imem;
        lexico();
        if (!free_sintax)
          if (pieza != p_abrir)
            error(3, 22); /* esperando '(' */
        if (pieza == p_abrir)
          lexico();
        condicion();
        if (!free_sintax)
          if (pieza != p_cerrar)
            error(3, 18); /* esperando ')' */
        if (pieza == p_cerrar)
          lexico();
        g2(ljpf, 0);
        im1 = imem - 1;
        final_sentencia();
        grabar_sentencia();
        goto if1;
      }
      mem[im1] = imem;
      if (pieza != p_end)
        error(0, 57);
      lexico(); /* esperando END */
      while (telseif[--itelseif] != 0)
        mem[telseif[itelseif]] = imem;
      break;
    case p_loop:
      tbreak[itbreak++] = 0;
      tcont[itcont++] = 0;
      lexico();
      im1 = imem;
      sentencia();
      if (pieza != p_end)
        error(0, 57); /* esperando END */
      inicio_sentencia();
      lexico();
      g2(ljmp, im1);
      while (tbreak[--itbreak] != 0)
        mem[tbreak[itbreak]] = imem;
      while (tcont[--itcont] != 0)
        mem[tcont[itcont]] = im1;
      final_sentencia();
      grabar_sentencia();
      break;
    case p_while:
      inicio_sentencia();
      tbreak[itbreak++] = 0;
      tcont[itcont++] = 0;
      im1 = imem;
      lexico();
      if (!free_sintax)
        if (pieza != p_abrir)
          error(3, 22); /* esperando '(' */
      if (pieza == p_abrir)
        lexico();
      condicion();
      if (!free_sintax)
        if (pieza != p_cerrar)
          error(3, 18); /* esperando ')' */
      if (pieza == p_cerrar)
        lexico();
      g2(ljpf, 0);
      im2 = imem - 1;
      final_sentencia();
      grabar_sentencia();
      sentencia();
      if (pieza != p_end)
        error(0, 57);
      inicio_sentencia(); /* esperando END */
      lexico();
      g2(ljmp, im1);
      mem[im2] = imem;
      while (tbreak[--itbreak] != 0)
        mem[tbreak[itbreak]] = imem;
      while (tcont[--itcont] != 0)
        mem[tcont[itcont]] = im1;
      final_sentencia();
      grabar_sentencia();
      break;
    case p_repeat:
      tbreak[itbreak++] = 0;
      tcont[itcont++] = 0;
      lexico();
      im1 = imem;
      sentencia();
      if (pieza != p_until)
        error(0, 58); /* esperando UNTIL */
      inicio_sentencia();
      lexico();
      if (!free_sintax)
        if (pieza != p_abrir)
          error(3, 22); /* esperando '(' */
      if (pieza == p_abrir)
        lexico();
      condicion();
      if (!free_sintax)
        if (pieza != p_cerrar)
          error(3, 18); /* esperando ')' */
      if (pieza == p_cerrar)
        lexico();
      g2(ljpf, im1);
      while (tbreak[--itbreak] != 0)
        mem[tbreak[itbreak]] = imem;
      while (tcont[--itcont] != 0)
        mem[tcont[itcont]] = im1;
      final_sentencia();
      grabar_sentencia();
      break;
    case p_from:
      inicio_sentencia();
      tbreak[itbreak++] = 0;
      tcont[itcont++] = 0;
      lexico();
      if (pieza != p_id)
        error(0, 59); /* esperando una variable */

      if (o->tipo == tvglo)
      {
        dir = o->vglo.offset;
        g2(lcar, dir);
      }
      else if (o->tipo == tvloc && (!o->bloque || o->bloque == bloque_actual))
      {
        dir = -o->vloc.offset;
        g2(lcar, -dir);
        g1(laid);
      }
      else
        error(0, 59); /* esperando una variable */

      lexico();
      if (pieza != p_asig)
        error(3, 7);
      lexico(); /* esperando '=' */
      from = constante();
      if (pieza != p_to)
        error(1, 60);
      lexico(); /* esperando TO */
      to = constante();
      if (from == to)
        error(4, 61); /* sentencia FROM incorrecta */
      if (pieza == p_step)
      {
        lexico();
        step = constante();
        if (from < to && step <= 0)
          error(4, 62); /* el valor step no es válido */
        if (from > to && step >= 0)
          error(4, 62);
      }
      else
      {
        if (from < to)
          step = 1;
        else
          step = -1;
      }
      g2(lcar, from); /* Asignación del from */
      g1(lasi);
      g1(lasp);

      im1 = imem; /* Inicio del bucle */

      if (dir >= 0)
      { /* Comparación de la condición de permanencia */
        g2(lcar, dir);
      }
      else
      {
        g2(lcar, -dir);
        g1(laid);
      }
      g1(lptr);
      g2(lcar, to);
      if (step > 0)
        g1(lmei);
      else
        g1(lmai);
      g2(ljpf, 0);
      im2 = imem - 1;

      final_sentencia();
      grabar_sentencia();
      if (!free_sintax)
        if (pieza != p_ptocoma)
          error(3, 9); /* esperando ';' */
      while (pieza == p_ptocoma || pieza == p_coma)
        lexico();

      sentencia();
      if (pieza != p_end)
        error(0, 57);
      inicio_sentencia(); /* esperando END */
      lexico();

      im3 = imem; /* Posición del continue */

      if (dir >= 0)
      { /* Incremento y vuelta al inicio del bucle */
        g2(lcar, dir);
      }
      else
      {
        g2(lcar, -dir);
        g1(laid);
      }
      g2(lcar, step);
      g1(lada);
      g1(lasp);
      g2(ljmp, im1);
      mem[im2] = imem;

      while (tbreak[--itbreak] != 0)
        mem[tbreak[itbreak]] = imem;
      while (tcont[--itcont] != 0)
        mem[tcont[itcont]] = im3;
      final_sentencia();
      grabar_sentencia();

      break;

    case p_for:
      inicio_sentencia();
      tbreak[itbreak++] = 0;
      tcont[itcont++] = 0;
      lexico();
      if (pieza != p_abrir)
        error(3, 22);
      lexico(); /* esperando '(' */
      if (pieza != p_ptocoma)
      {
        expresion();
        g1(lasp);
        while (pieza == p_coma)
        {
          lexico();
          expresion();
          g1(lasp);
        }
      }
      im1 = imem;
      if (pieza != p_ptocoma)
        error(3, 9);
      lexico(); /* esperando ';' */
      if (pieza == p_ptocoma)
      {
        g2(lcar, 1);
      }
      else
        expresion();
      g2(ljpf, 0);
      im2 = imem - 1;
      while (pieza == p_coma)
      {
        lexico();
        expresion();
        g2(ljpf, im2);
        im2 = imem - 1;
      }
      g2(ljmp, 0);
      im3 = imem - 1;
      if (pieza != p_ptocoma)
        error(3, 9);
      lexico(); /* esperando ';' */
      if (pieza != p_cerrar)
      {
        expresion();
        g1(lasp);
        while (pieza == p_coma)
        {
          lexico();
          expresion();
          g1(lasp);
        }
      }
      g2(ljmp, im1);
      if (pieza != p_cerrar)
        error(3, 18);
      lexico(); /* esperando ')' */
      final_sentencia();
      grabar_sentencia();
      mem[im3++] = imem;
      sentencia();
      if (pieza != p_end)
        error(0, 57); /* esperando END */
      inicio_sentencia();
      lexico();
      g2(ljmp, im3);
      do
      {
        im1 = mem[im2];
        mem[im2] = imem;
        im2 = im1;
      } while (im2);
      while (tbreak[--itbreak] != 0)
        mem[tbreak[itbreak]] = imem;
      while (tcont[--itcont] != 0)
        mem[tcont[itcont]] = im3;
      final_sentencia();
      grabar_sentencia();
      break;
    case p_switch:
      inicio_sentencia();
      lexico();
      if (!free_sintax)
        if (pieza != p_abrir)
          error(3, 22); /* esperando '(' */
      if (pieza == p_abrir)
        lexico();
      condicion();
      if (!free_sintax)
        if (pieza != p_cerrar)
          error(3, 18); /* esperando ')' */
      if (pieza == p_cerrar)
        lexico();
      while (pieza == p_ptocoma)
      {
        lexico();
      }
      final_sentencia();
      grabar_sentencia();
      im1 = 0;
      im2 = 0;
      while (pieza != p_end)
      {
        inicio_sentencia();
        if (pieza == p_case)
        {
          im3 = 0;
          do
          {

            lexico();
            if (im1)
              mem[im1] = imem;
            expresion();
            if (pieza != p_rango)
            {
              g2(lcse, 0);
              im1 = imem - 1;
            }
            else
            {
              lexico();
              expresion();
              g2(lcsr, 0);
              im1 = imem - 1;
            }

            if (pieza == p_coma)
            {
              g2(ljmp, im3);
              im3 = imem - 1;
            }

          } while (pieza == p_coma);

          while (im3)
          {
            im4 = mem[im3];
            mem[im3] = imem;
            im3 = im4;
          }
        }
        else if (pieza == p_default)
        {
          lexico();
          if (im1)
            mem[im1] = imem;
          im1 = 0;
        }
        else
          error(0, 63); /* esperando case, default o end */
        if (!free_sintax)
          if (pieza != p_ptocoma)
            error(3, 64); /* esperando ':' */
        while (pieza == p_ptocoma || pieza == p_coma)
          lexico();
        g1(lasp);
        final_sentencia();
        grabar_sentencia();
        sentencia();
        if (pieza != p_end)
          error(0, 57); /* esperando END */
        inicio_sentencia();
        g2(ljmp, im2);
        im2 = imem - 1;
        pasa_ptocoma();
        final_sentencia();
        grabar_sentencia();
      }
      inicio_sentencia();
      if (im1)
        mem[im1] = imem;
      g1(lasp);
      while (im2)
      {
        im1 = mem[im2];
        mem[im2] = imem;
        im2 = im1;
      }
      lexico();
      final_sentencia();
      grabar_sentencia();
      break;
    case p_frame:
      inicio_sentencia();
      lexico();
      if (pieza == p_abrir)
      {
        lexico();
        if (pieza != p_cerrar)
        {
          expresion();
          if (pieza != p_cerrar)
            error(3, 18); /* esperando ')' */
          g1(lfrf);
        }
        else
        {
          g1(lfrm);
        }
        lexico();
      }
      else
      {
        g1(lfrm);
      }
      if (!free_sintax)
        if (pieza != p_ptocoma)
          error(3, 9); /* esperando ';' */
      while (pieza == p_ptocoma || pieza == p_coma)
        lexico();
      final_sentencia();
      grabar_sentencia();
      break;
    case p_debug:
      inicio_sentencia();
      g1(ldbg);
      lexico();
      if (!free_sintax)
        if (pieza != p_ptocoma)
          error(3, 9); /* esperando ';' */
      while (pieza == p_ptocoma || pieza == p_coma)
        lexico();
      final_sentencia();
      grabar_sentencia();
      break;
    case p_break:
      inicio_sentencia();
      if (itbreak == 0)
        error(0, 65);
      lexico(); /* break fuera de un bucle */
      if (!free_sintax)
        if (pieza != p_ptocoma)
          error(3, 9); /* esperando ';' */
      while (pieza == p_ptocoma || pieza == p_coma)
        lexico();
      g2(ljmp, 0);
      tbreak[itbreak++] = imem - 1;
      final_sentencia();
      grabar_sentencia();
      break;
    case p_continue:
      inicio_sentencia();
      if (itcont == 0)
        error(0, 66);
      lexico(); /* continue fuera de un bucle */
      if (!free_sintax)
        if (pieza != p_ptocoma)
          error(3, 9); /* esperando ';' */
      while (pieza == p_ptocoma || pieza == p_coma)
        lexico();
      g2(ljmp, 0);
      tcont[itcont++] = imem - 1;
      final_sentencia();
      grabar_sentencia();
      break;
    case p_clone:
      inicio_sentencia();
      lexico();
      g2(lclo, 0);
      im1 = imem - 1;
      final_sentencia();
      grabar_sentencia();
      sentencia();
      if (pieza != p_end)
        error(0, 57);
      lexico(); /* esperando END */
      mem[im1] = imem;
      break;
    case p_ptocoma:
      lexico();
      break;
    default:
      inicio_sentencia();
      error_25 = 67;
      expresion();
      do
      {
        _exp--;
      } while ((*_exp).tipo == eoper && (*_exp).token == p_string);
      error_25 = 25;
      switch ((*_exp).tipo)
      {
      case ecall:
        break;
      case efext:
        break;
      case eoper:
        switch ((*_exp).token)
        {
        case p_asig:
        case p_inc:
        case p_suma:
        case p_dec:
        case p_resta:
        case p_add_asig:
        case p_sub_asig:
        case p_mul_asig:
        case p_div_asig:
        case p_mod_asig:
        case p_and_asig:
        case p_or_asig:
        case p_xor_asig:
        case p_shr_asig:
        case p_shl_asig:

        case p_asigword:
        case p_incword:
        case p_sumaword:
        case p_decword:
        case p_restaword:
        case p_add_asigword:
        case p_sub_asigword:
        case p_mul_asigword:
        case p_div_asigword:
        case p_mod_asigword:
        case p_and_asigword:
        case p_or_asigword:
        case p_xor_asigword:
        case p_shr_asigword:
        case p_shl_asigword:

        case p_asigchar:
        case p_incchar:
        case p_sumachar:
        case p_decchar:
        case p_restachar:
        case p_add_asigchar:
        case p_sub_asigchar:
        case p_mul_asigchar:
        case p_div_asigchar:
        case p_mod_asigchar:
        case p_and_asigchar:
        case p_or_asigchar:
        case p_xor_asigchar:
        case p_shr_asigchar:
        case p_shl_asigchar:

        case p_strcpy:
        case p_strcat:
        case p_strsub:
          break;
        default:
          error(4, 68);
          break; /* expresion sin sentido */
        }
        break;
      default:
        error(4, 68); /* expresion sin sentido */
      }
      if (!free_sintax)
        if (pieza != p_ptocoma)
          error(3, 9); /* esperando ';' */
      while (pieza == p_ptocoma || pieza == p_coma)
        lexico();
      g1(lasp);
      final_sentencia();
      grabar_sentencia();
      break;
    }
  }
}