• Sábado 14 de Diciembre de 2024, 17:49

Autor Tema:  Analizador Lexico  (Leído 1426 veces)

Lizzie_or

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
    • http://ddik2.wordpress.com/
Analizador Lexico
« en: Sábado 23 de Febrero de 2008, 03:49 »
0
Hola, :D

Casi no programo en c++, pero me he propuesto aprender mejor a utilizar este programa y en este momento tengo que realizar un analizador lexico, en el cual en primer lugar tengo que leer un archivo de texto externo (y aun no manejo muy bien lo de ficheros) luego de ese archivo el programa debe decirme cuantas letras (cuantas a, cuantas b, .., cuantas z) cuantos numeros (cuantos 0, cuantos 1,..,cuantos 9) cuantos espacios, y cuantos simbolos osea otros... Existen por linea...
el que ya tengo hecho en primer lugar no me toma un archivo externo (sino que yo le pido al usuario que escriba el parrafo), lee cada letra espcio etc pero de todo el parrafo, no linea por linea, mi segunda duda es como le hago para que me lea linea por linea, uso una matriz... como????  

de antemano gracias por su tiempo...  hay les dejo el codigo como lo llevo hasta el momento....

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>

main()
{
      int a=0, b=0, c=0, d=0, e=0, f=0, g=0, h=0, i=0, j=0, k=0, l=0, m=0, n=0, o=0, p=0, q=0, r=0, s=0, t=0, u=0, v=0, w=0, x=0, y=0, z=0;
      int uno=0, dos=0, tres=0, cuatro=0, cinco=0, seis=0, siete=0, ocho=0, nueve=0, cero=0;
      int otro=0, esp=0, enter=0;
      char car;
      printf("Introduzca su texto\nPara dar final de tu texto introduce *\n");
      while((car=getchar())!='*')
      {        
          while (car=='\n')
          {
          enter++;
          break;
          }
          while (car=='0')
          {
          cero++;
          break;
          }
          while (car=='1')
          {
          uno++;
          break;
          }
          while (car=='2')
          {
          dos++;
          break;
          }
          while (car=='3')
          {
          tres++;
          break;
          }
          while (car=='4')
          {
          cuatro++;
          break;
          }
          while (car=='5')
          {
          cinco++;
          break;
          }
          while (car=='6')
          {
          seis++;
          break;
          }
          while (car=='7')
          {
          siete++;
          break;
          }
          while (car=='8')
          {
          ocho++;
          break;
          }
          while (car=='9')
          {
          nueve++;
          break;
          }
          while (car=='a')
          {
          a++;
          break;
          }
          while (car=='b')
          {
          b++;
          break;
          }
          while (car=='c')
          {
          c++;
          break;
          }
          while (car=='d')
          {
          d++;
          break;
          }
          while (car=='e')
          {
          e++;
          break;
          }
          while (car=='f')
          {
          f++;
          break;
          }
          while (car=='g')
          {
          g++;
          break;
          }
          while (car=='h')
          {
          h++;
          break;
          }
          while (car=='i')
          {
          i++;
          break;
          }
          while (car=='j')
          {
          j++;
          break;
          }
          while (car=='k')
          {
          k++;
          break;
          }
          while (car=='l')
          {
          l++;
          break;
          }
          while (car=='m')
          {
          m++;
          break;
          }
          while (car=='n')
          {
          n++;
          break;
          }
          while (car=='o')
          {
          o++;
          break;
          }
          while (car=='p')
          {
          p++;
          break;
          }
          while (car=='q')
          {
          q++;
          break;
          }
          while (car=='r')
          {
          r++;
          break;
          }
          while (car=='s')
          {
          s++;
          break;
          }
          while (car=='t')
          {
          t++;
          break;
          }  
          while (car=='u')
          {
          u++;
          break;
          }
          while (car=='v')
          {
          v++;
          break;
          }
          while (car=='w')
          {
          w++;
          break;
          }
          while (car=='x')
          {
          x++;
          break;
          }
          while (car=='y')
          {
          y++;
          break;
          }
          while (car=='z')
          {
          z++;
          break;
          }
          while (car=='A')
          {
          a++;
          break;
          }
          while (car=='B')
          {
          b++;
          break;
          }
          while (car=='C')
          {
          c++;
          break;
          }
          while (car=='D')
          {
          d++;
          break;
          }
          while (car=='E')
          {
          e++;
          break;
          }
          while (car=='F')
          {
          f++;
          break;
          }
          while (car=='G')
          {
          g++;
          break;
          }
          while (car=='H')
          {
          h++;
          break;
          }
          while (car=='I')
          {
          i++;
          break;
          }
          while (car=='J')
          {
          j++;
          break;
          }
          while (car=='K')
          {
          k++;
          break;
          }
          while (car=='L')
          {
          l++;
          break;
          }
          while (car=='M')
          {
          m++;
          break;
          }
          while (car=='N')
          {
          n++;
          break;
          }
          while (car=='O')
          {
          o++;
          break;
          }
          while (car=='P')
          {
          p++;
          break;
          }
          while (car=='Q')
          {
          q++;
          break;
          }
          while (car=='R')
          {
          r++;
          break;
          }
          while (car=='S')
          {
          s++;
          break;
          }
          while (car=='T')
          {
          t++;
          break;
          }  
          while (car=='U')
          {
          u++;
          break;
          }
          while (car=='V')
          {
          v++;
          break;
          }
          while (car=='W')
          {
          w++;
          break;
          }
          while (car=='X')
          {
          x++;
          break;
          }
          while (car=='Y')
          {
          y++;
          break;
          }
          while (car=='Z')
          {
          z++;
          break;
          }
          while (car==' ')
          {
          esp++;
          break;
          }
          while(!((car>='0' && car<='9')||(car>='A' && car<='Z')||  (car>='a' && car<='z') ||(car==' ') ||(car=='\n')))
          {
          otro++;
          break;
          }
        }
   printf("la linea %d tiene:\n",enter);
   printf(" 0= %d\t 1= %d\t 2= %d \n 3= %d\t 4= %d\t 5= %d \n 6= %d\t 7= %d\t 8= %d\t 9= %d \n A= %d\t B= %d\t C= %d\t D= %d\t E= %d\t F= %d\t G= %d\t H= %d\t I= %d \n J= %d\t K= %d\t L= %d\t M= %d\t N= %d\t O= %d\t P= %d\t Q= %d\t R= %d \n S= %d\t T= %d\t U= %d\t V= %d\t W= %d\t X= %d\t Y= %d\t Z= %d \n ESPACIOS= %d\t OTROS= %d\t ENTER= %d \n",cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,esp,otro,enter);
   system("pause");
   return 0;
}


bendiciones...

morochofino

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Analizador Lexico
« Respuesta #1 en: Domingo 24 de Febrero de 2008, 01:12 »
0
Hola fiera, mira para los archivos tenes que usar el tipo de variable FILE e iniciar una instancia de la misma con la funcion fopen. Ahora no me acuerdo muy bien como se usa pero creo que es algo asi: FILE *ejemplo = fopen("nombre_de_archivo.txt",r+). Fijate en la ayuda del framework que estes usando. Despues para contar las letras en ves de hacer tantos "whiles" te conviene crear un arreglo del tipo int de 255                          (int *letras = new int[255]) para todo el codigo ascii. Luego si recorriendo el fichero obtenes un char, llamemosle c, usas la sentencia: letras[c]++; por ejemplo el seudo

File ejemplo;
int[255] letras; //inicia con todos sus elementos en cero
mientras !fin_fichero(ejemplo)
{
        c = proximo_char(ejemplo);
        letras[c]++;
}


De esa manera en el arreglo te quedara en cada posicion i la cantidad de veces que aparece el caracter c que pertence al numnero i en el codigo ascii. Te vas a ahorrar bocha de codigo y ademas queda mas prolijo. Espero haberte ayudado