elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Ayuda Acumulador de cadenas en C en: 7 Noviembre 2016, 20:03 pm
Hola que tal a todos!

Como dice el titulo necesito saber como acumular texto en una sola cadena, tenia pensado en algo asi:

resultado = resultado + ":= simbolo (asignacion)\n";

donde resultado lo inicie asi:

char resultado[10000]="Nombre    Tipo de Token\n";

Y quisiera que quedara asi el resultado final:

Nombre     Tipo de Token
:=            simbolo(asignacion)

no se si se pueda pero me  da error de compilacion, alguna idea? Gracias de antemano.
2  Programación / Programación C/C++ / Problema con FILE y Cadenas en: 7 Noviembre 2016, 08:22 am
Hola que tal a todos!

Antes que nada queria decir que soy nuevo en el foro y que necesito su ayuda, espero estar en el lugar indicado. ;D

Bueno la cosa es que estoy haciendo un analizador Lexico de Cobol 68 como proyecto de una clase, en resumen el programa abre un archivo de texto con el lenguaje en cuestion y lo que hace es separar el programa en tokens e identificar cada una de ellas (sin usar strtok) y guardar el resultado en otro archivo de texto.

La verdad tengo varios problemas en cuanto a mi codigo, no son de sintaxis ya que compila mi codigo mas bien son logicos, primero que nada ya intente resolverlo con el Debuger y al parecer tengo error en la funcion llamada EsPalabraReservada al parecer esta comparando todo el archivo de texto y realmente no se porque esta pasando eso, agradeceria mucho si me pudieran ayudar a resolver mis dudas y si se puede mi problema  :(.

CODIGO en C

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>

void analizadorLexico(char *cadena);
int EsIdentificador(char ch);
int EsNumero(char ch);
int EsSimbolo(char ch);
int EsPalabraReservada(char * cad);

char *PReservada[]={"BEGIN","END","real","print","read","INT","IN","OUT","CASE","ESAC","EXIT"};
char simbolos[14]={'+','-','/','*','<','>','{','}',';','(',')','[',']',','};
char palabra[20]="";
char constante[20]="";
char asignacion[1]="";

int main()
{
  FILE *fichero;
  char cadena[1000]="";
  int i=0;

  fichero = fopen("codigo.txt","rt");

    if (fichero==NULL)
    {
        printf("No se puede abrir el archivo\n");
        exit(1);
    }
    printf("Contenido del fichero:\n");

    while(feof(fichero)==0)
    {
        //se lee y se guarda en la variable cadena el contenido del archivo
        fscanf (fichero, "%c", &cadena);
        i++;
    }

    if(fclose(fichero)!=0)
    {
        printf("No se cerro el fichero");
    }
    //se muestra en pantalla el contenido del archivo de texto
    puts(cadena);//se muestra el texto del archivo cargado en pantalla
    //ejecutamos el analizador lexico
    analizadorLexico(cadena);
    printf("Proceso completado");
    return 0;
}

void analizadorLexico(char *cade)
{
    //abrimos/creamos el archivo en el que se guardaran las tokens
    FILE *Tokens;
    Tokens = fopen("Tokens.txt", "wt");
    fprintf(Tokens, "Nombre     Tipo de Token");
    int i=0;
    while(cade!='\0')
    {
        if(cade==':')
        {
            int k=0;
            asignacion[k]=cade;
            i++;
            break;
        }
        else
            if(cade=='=' && asignacion[0]==':')
            {
                fprintf(Tokens, ":=    Simbolo(asignacion)");
                asignacion[0] = '\0';
                i++;
                break;
            }
            else
                if(EsSimbolo(cade))
                {
                    fprintf(Tokens, "%c    Simbolo",cade);
                    i++;
                    while(EsSimbolo(cade))
                        fprintf(Tokens, "%c    Simbolo",cade);
                        i++;
                    break;
                }
                else
                {
                    if(EsNumero(cade))
                    {
                        i++;
                        while(EsNumero(cade))
                        {
                            i++;
                        }
                        fprintf(Tokens, "%s    Es una constante",constante);
                        constante[0] = '\0';
                        break;
                    }
                    if(EsIdentificador(cade))
                    {
                       i++;
                       while(EsIdentificador(cade))
                           i++;
                       if(EsPalabraReservada(palabra))
                       {
                           fprintf(Tokens, "%s    Palabra Reservada",palabra);
                           palabra[0] = '\0';
                       }
                       else
                       {
                           fprintf(Tokens, "%s    es un identificador",palabra);
                           palabra[0] = '\0';
                       }
                    }
                }
        i++;
    }
    fclose(Tokens);
}

int EsIdentificador(char ch)
 {
     int j=0;
   if(isalpha(ch)||ch=='_')
   {
       palabra[j]=ch;
       j++;
       return 1;
   }
   else
   {
       return 0;
   }
 }

 int EsNumero(char ch)
 {
     int j=0;
     if(isdigit(ch))
     {
         constante[j]=ch;
         j++;
         return 1;
     }
     else
     {
         return 0;
     }
 }

int EsSimbolo(char ch)
{
    int j;
    for(j=0;j<=14;j++)
    {
       if(ch==simbolos[j])
       {
           return 1;
       }
    }
    return 0;
}

int EsPalabraReservada(char * cad)
{
  int i;
  for(i=0;i<12;i++)
   {
    if(strcmp(PReservada,cad)==0)
      return 1;
    }
  return 0;
}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines