Código:
el detalle es que quiero saber como puedo lograr hacer que mi analizador lea numeros e identificadores, ademas desaria saber como puedo crear un archivo TXT con las respuestas dadas.#include <cstdlib> #include <iostream> #include <string.h> #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <fstream> #define max 100 using namespace std; typedef char cadena[100]; typedef enum{verdadero,falso} coin; coin relacionales (char aux) {if(aux=='<' || aux=='>' || aux=='!' || aux==char(34) || aux==char(39)) { return verdadero;} return falso; } coin delimitador (char aux) {if(aux==',' || aux==';' || aux=='[' || aux==']' || aux=='(' || aux==')' || aux==':') { return verdadero;} return falso; } coin arimeticos (char aux) {if(aux=='+' || aux=='-' || aux=='*' || aux=='/' || aux=='=' || aux=='#' ) { return verdadero;} return falso; } coin reservada (cadena cad) { int i; char *lista[]={"AND","ARRAY","BEGIN","CASE","CONST","CLRSCR","CRT","DIV","DO","DOWNTO","ELSE","END","FILE","FOR","FUNCTION","GOTO", "IF","IN","LABEL","MOD","NULL","NOT","OF","OR","PACKED","PROCEDURE","PROGRAM","RECORD","REPEAT","SET","THEN","TO","TYPE","UNTIL","VAR", "WHILE","WITH","ABS","ACTAN","BOOLEAN","CHAR","CUS","DISPOSE","EOF","EOL","EXP","FALSE","INPUT","INTEGER","INT","MAXINT","NEW","NIL", "ODD","ORD","OUTPUT","PACK","PAGE","PUT","READ","READLN","REAL","RESET","REWRITE","ROUND","SIN","SQR","SQRT","SOCC","TEXT","TRUE", "TRUNC","UNPACK","USES","WRITE","WRITELN"}; for(i=0;i<77;i++) { if (strcmp(lista[i],cad)== 0) return verdadero; } return falso; } /*coin analiz (string cad) { int i,est,c=0,l=0,d=0,u,e=0; for(u=0;cad[u]!='\0';u++) {cad[u]='\0';} for(i=0;i<cad.length();i++) { if((isalpha(cad[i]))||(isdigit(cad[i]))) { if(isalpha(cad[i])) l++; if(isdigit(cad[i])) d++; } else if(!(isalpha(cad[i]))&&!(isdigit(cad[i]))) e++; if(cad[i]=='\0') break; } c=l+d+e-1; est=1; while(est!=3) { for(i=0;i<=c;i++) { switch(est) { case 1: if(isalpha(cad[i])) {est=2;break;} else {return falso;} case 2: if(cad[i]=='\0') {return falso;} if(isalpha(cad[i])) {est=2;break;} else {if(isdigit(cad[i])) {est=3; if(d==1) {return verdadero;} } default: return falso; } } } } } coin numero (string cad) { int i,est,c=0,l=0,d=0,u,e=0; for(u=0;cad[u]!='\0';u++) {cad[u]='\0';} for(i=0;i<cad.length();i++) { if((isalpha(cad[i]))||(isdigit(cad[i]))) { if(isalpha(cad[i])) l++; if(isdigit(cad[i])) d++; } else if(!(isalpha(cad[i]))&&!(isdigit(cad[i]))) e++; if(cad[i]=='\0') break; } c=l+d+e-1; est=1; while(est!=3) { for(i=0;i<=c;i++) { switch(est) { case 1: if(isdigit(cad[i])) {est=2;break;} case 2: if(cad[i]=='\0') {est=3;return verdadero;} else if(isdigit(cad[i])) {est=2;break;} default: return falso; } } } }*/ int main(int argc, char *argv[]) { int c; cadena linea; cadena cad; char lex[max]; int u,i=0; char *aplin; for(u=0;linea[u]!='\0';u++) linea[u]='\0'; for(u=0;lex[u]!='\0';u++) lex[u]='\0'; ifstream arch("Codigo.txt"); while(!arch.eof()) { arch.getline(linea,sizeof(linea)); cout<<"Codigo Base: "<<linea<<endl<<endl; } /*gets(linea);*/ while((linea[i]!='\0')&&(linea[i]!=';')) { lex[i]=toupper(linea[i]); i++; } lex[i]='\0'; aplin=lex; while(*aplin!='\x0' && *aplin!=';' && *aplin!='\0') { i=0; if(relacionales(*aplin)==verdadero || arimeticos(*aplin)==verdadero || *aplin =='\t' ||delimitador(*aplin)==verdadero ||*aplin==' ') { if(relacionales(*aplin)==verdadero) { cout<<*aplin<<" ... Operador Relacional "<<endl; } if(delimitador(*aplin)==verdadero) { cout<<*aplin<<" .... Delimitador "<<endl; } if(arimeticos(*aplin)==verdadero) { cout<<*aplin<<" .... Operador Arimetico "<<endl; } *aplin++; } else { i=0; do { cad[i]=*aplin; *aplin++; i++;} while(relacionales(*aplin)==falso && arimeticos(*aplin)==falso && *aplin!='\x0' && delimitador(*aplin)==falso && *aplin!='\0' && *aplin!=' '); cad[i]='\0'; if(reservada(cad)==verdadero) {cout<<cad<<" ..... Palabra Reservada"<<endl;} /*if(analiz(cad)==verdadero) {cout<<cad<<" Identificador"<<endl;} if(numero(cad)==verdadero) {cout<<cad<<" Numero"<<endl;}*/ } } system("PAUSE"); return 0; }
Estaria agradecido si me ayudan a corregir si tengo errores