#include <iostream.h> #include <fstream.h> #include <string.h> #include <stdio.h> #include <stdlib.h>
int val(char ca[10]); int tipo(int p,char c[10]);
char cadena[50]; char Linea[200][30]; char Palabra[100][30];
int estados[34][21]={ {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}, {1,2,10,0,3,0,0,0,4,5,0,0,0,0,26,0,0,0,6,0,0}, {2,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {3,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {4,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {5,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,0,0}, {6,0,0,0,0,0,0,0,0,0,0,0,32,7,0,0,0,6,0,15}, {7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,0}, {8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0}, {9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,00,13,0,0,0}, {10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0},
{11,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16}, {16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,0}, {17,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0}, {18,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0}, {19,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {22,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0}, {23,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {24,0,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {26,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {28,0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {29,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0}, {30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,33,0,0}, {33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };
struct Aceptadas{ char palabra[30]; int tipo; int ac; }palabras[100];
void a_lex(); void a_sin(); void separar();
void main() { separar(); int n=0,j=0; for(int x=0;x<100;x++) { /*Tipo: 1.-While 2.-Puts 3.-If 4.-Def 5.-Operacion 6.-Gets 7.-End 8.-Asignacion 9.-Error AC: 1.-Aceptada 2.-Rechazada*/ val(Palabra[x]); /* switch(val(Palabra[x])) { case 12: strcpy(palabras[n].palabra,Palabra[x]); palabras[n].tipo=7; palabras[n].ac=1; n++; break; case 13: strcpy(palabras[n].palabra,Palabra[x]); palabras[n].tipo=8; palabras[n].ac=1; n++; break; case 14: strcpy(palabras[n].palabra,Palabra[x]); palabras[n].tipo=8; palabras[n].ac=1; n++; break; case 20: strcpy(palabras[n].palabra,Palabra[x]); palabras[n].tipo=1; palabras[n].ac=1; n++; break; case 21: strcpy(palabras[n].palabra,Palabra[x]); palabras[n].tipo=2; palabras[n].ac=1; n++; break; case 31: strcpy(palabras[n].palabra,Palabra[x]); palabras[n].tipo=3; palabras[n].ac=1; n++; break; case 25: strcpy(palabras[n].palabra,Palabra[x]); palabras[n].tipo=4; palabras[n].ac=1; n++; break; case 33: strcpy(palabras[n].palabra,Palabra[x]); palabras[n].tipo=5; palabras[n].ac=1; n++; break; case 30: strcpy(palabras[n].palabra,Palabra[x]); palabras[n].tipo=6; palabras[n].ac=1; n++; break; default: strcpy(palabras[n].palabra,Palabra[x]); palabras[n].tipo=9; palabras[n].ac=0; n++; break; } } /*cout<<"+-------------------------------------------------------------------------+"<<endl;
for(x=0;x<100;x++) { cout<<palabras[x].palabra<<" || "; switch(palabras[x].tipo) { case 1: cout<<"WHILE"; break; case 2: cout<<"PUTS"; break; case 3: cout<<"IF"; break; case 4: cout<<"DEF"; break; case 5: cout<<"+|-|*"; break; case 6: cout<<"GETS"; break; case 7: cout<<"END"; break; case 8: cout<<":=Asignacion"; break; case 9: cout<<"Error"; break; default: cout<<" "; }
cout<<" || "<<palabras[x].ac<<endl; }*/ } }
int val(char ca[30]) { char temporal; int estado=1; int p=0; cout<<"+------------------------+"<<endl; do{ if(estados[estado][tipo(p,ca)]==0) return estado; else estado=estados[estado][tipo(p,ca)]; temporal=ca[p]; p++; cout<<ca[p]<<"|||"<<estado<<"|||"<<tipo(p,ca)<<endl; }while(temporal!=0); cout<<"+------------------------+"<<endl; return estado; }
//---------------------------------------------------------------------------------------------- int tipo(int p,char c[10]) { int tipo=14; switch(c[p]) { case'D':tipo=1;break; case'E':tipo=2;break; case'F':tipo=3;break; case'P':tipo=4;break; case'U':tipo=5;break; case'T':tipo=6;break; case'S':tipo=7;break; case'I':tipo=8;break; case'W':tipo=9;break; case'H':tipo=10;break; case'L':tipo=11;break; case'+':tipo=12;break; case'-':tipo=13;break; case'G':tipo=14;break; case'=':tipo=16;break; case':':tipo=17;break; case'A':case'B':case'C': case'J':case'K':case'M': case'O':case'Q':case'R': case'V':case'X':case'Y': case'Z':tipo=18;break; case'N':tipo=19;break; case'*':tipo=20;break; default:tipo=15;break; } return tipo; } //----------------------------------------------------------------------------------------------
void separar() { char token[30]; int n=0,j=0; fstream A("texto.txt",ios::in); while (!A.eof()) { A.getline(token,30,'\n'); strcpy(Linea[n],token); cout<<Linea[n]<<endl; n++; } A.close(); for(n=0;n<100;n++) { if(Linea[n]!=NULL) cout<<Linea[n]<<endl; } int x=n; int i = 0; for(n=0;n<100;n++) { if(Linea[n]!=NULL) { char *result = strtok(Linea[n], " "); while( result != NULL ) { strcpy(Palabra[i],(char *)malloc( strlen(result) + 1 )); strcpy(Palabra[i], result); result = strtok( NULL, " " ); i++; } } } } |