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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con FILE y Cadenas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con FILE y Cadenas  (Leído 1,502 veces)
AxelIglesias

Desconectado Desconectado

Mensajes: 2


Ver Perfil
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;
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa que extraiga cadenas en file txt (C++)
Programación C/C++
fergosan 2 3,944 Último mensaje 31 Diciembre 2010, 22:10 pm
por leogtz
Problema con cadenas
Programación C/C++
Uknow 2 2,279 Último mensaje 11 Diciembre 2011, 23:37 pm
por Uknow
Problema cadenas
Programación C/C++
muymuyperdido 6 2,804 Último mensaje 8 Enero 2013, 15:48 pm
por leosansan
[C] Problema con cadenas
Programación C/C++
alvr 1 1,668 Último mensaje 9 Enero 2013, 21:41 pm
por durasno
problema con file joker
Software
naxo_valladolid 0 2,478 Último mensaje 7 Diciembre 2021, 11:08 am
por naxo_valladolid
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines