Пример #1
0
/// Check if an ID maps an existing keyword
/// \n Returns the new lexical element or lex_ncname if not found
lexico lex_test_id (const _byte_ * bp_str, unsigned u_size, lexico lex_next)
{
   char * cp_equi;
   unsigned u_lex;

   cp_equi = new char [u_size + 1];
   memcpy (cp_equi, bp_str, u_size);
   cp_equi [u_size] = 0;
   for (u_lex = lex_start_keyword; u_lex <= lex_end_keyword; u_lex++)
      if (! strcmp (cp_equi, cp_disp_class_lex (lexico (u_lex))))
         // DO not recognize the text keyword unless it is followed by an open parenthesis
         if ((u_lex != lex_text) || (lex_next == lex_oparen))
         {
            delete [] cp_equi;
            return lexico (u_lex);
         }
   delete [] cp_equi;
   return lex_ncname;
}
Пример #2
0
int main() {

    /* Enter your code here. Read input from STDIN. Print output to STDOUT */ 
    int t, length[100000];
    char string[100], W[100000][100] /*An array of strings*/;
    scanf("%d", &t);
    for (int i=1; i<=t; i++){
        scanf("%s", &string);
        W[i] = string;
        /*finding length of string*/
        for(char j=0; j!='\0'; ++j);
        length[i]=j;
    }
    
    for (int i=1; i<=t; i++){
        printf("%s", lexico(W[i]));
    }
    return 0;
}
Пример #3
0
static int			modif_time(void *file1, void *file2)
{
	t_filedata	*f1;
	t_filedata	*f2;

	f1 = (t_filedata *)file1;
	f2 = (t_filedata *)file2;
	if (f1->stat->st_mtime == f2->stat->st_mtime)
	{
		if (f1->stat->st_mtimespec.tv_nsec == f2->stat->st_mtimespec.tv_nsec)
			return (lexico(f1, f2));
		if (f1->stat->st_mtimespec.tv_nsec < f2->stat->st_mtimespec.tv_nsec)
			return (1);
		return (0);
	}
	else if (f1->stat->st_mtimespec.tv_sec < f2->stat->st_mtimespec.tv_sec)
		return (1);
	return (0);
}
Пример #4
0
main(){
	Nodo *A;
    char *pal,pal1[10];
   pal=(char*)malloc(sizeof(char));
   //pal1=(char*)malloc(sizeof(char));
	int i;
	A=Raiz();
	ifstream lexico("LexicoES.dic");
	
	 while(!lexico.eof()) {
		char*Palabra=new char[50];
		lexico>>Palabra;         
		for(i=0;i<strlen(Palabra);i++){
		   if(Palabra[i]=='/'){
				Palabra[i]='\0';
		   strncpy(Palabra,Palabra,i);
		   break;
		   }
		}
		if(Palabra[0]!='A'&&Palabra[0]!='E'&&Palabra[0]!='I'&&Palabra[0]!='O'&&Palabra[0]!='U')
		Insert(Palabra,A);
		else
			switch(Palabra[0]){
				case 'A':
					Palabra[0]='a';Insert(Palabra,A);break;
				case 'E':
					Palabra[0]='e';Insert(Palabra,A);break;
				case 'I':
					Palabra[0]='i';Insert(Palabra,A);break;
				case 'O':
					Palabra[0]='o';Insert(Palabra,A);break;
                case 'U':
					Palabra[0]='u';Insert(Palabra,A);break;
			}

	}
	lexico.close();
	while(1){
		cout<<"2 , 3, 4";
		cin>>i;
      if(i==2)
			Imprimir(pal,A);
		else{
			if(i==3){
				cout<<"Ingrese palabra:"<<endl;
				char Palabra1[10];
			   gets(Palabra1);
				if(Palabra1[0]!='A'&&Palabra1[0]!='E'&&Palabra1[0]!='I'&&Palabra1[0]!='O'&&Palabra1[0]!='U')
					cout<<comparar(A,Palabra1)<<endl;
				else
					switch(Palabra1[0]){
						case 'A':
							Palabra1[0]='a';cout<<comparar(A,Palabra1)<<endl;break;
						case 'E':
							Palabra1[0]='e';cout<<comparar(A,Palabra1)<<endl;break;
                  case 'I':
                  	Palabra1[0]='i';cout<<comparar(A,Palabra1)<<endl;break;
						case 'O':
							Palabra1[0]='o';cout<<comparar(A,Palabra1)<<endl;break;
						case 'U':
							Palabra1[0]='u';cout<<comparar(A,Palabra1)<<endl;break;
					}
      	}
         else
         	if(i==4)
         	cout<<"escribe algo ";
         	cin>>pal1;
            sugerencia(pal1,A,0,0);
		}
	}
}
Пример #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;
    }
  }
}