InicioLinuxAnalizador lexico en C
Este programa en C es un simulador de AFD, que incluye las funciones: • Cargar estados del autómata finito optimizado • Cargar estado inicial (verifica que este dentro de los estados) • Cargar estado(s) final(es) (verifica que estén dentro de los estados) • Cargar vector de símbolos del lenguaje • Cargar la tabla de transiciones El programa es iterativo (ingresada una tabla de transiciones se pueden probar varias cadenas mientras el usuario asi lo desee, luego de esto existe la opción de cargar otra tabla o salir). #include #include #include int menu(void); int ing_simb(char [][4]); int ing_est(char [][4]); char est_ini(char [][4], int); int est_fin(char [][4], int, char *); void comp_tabla(char tab[][4], int , int ); void ing_cad(char [][4], int , int , char , char efin[], int ); void lim_tab(char [][4]); int main() { char tab[21][4], eini, *ef, efin[20]; int op, f, c, e, cte=0, cts=0, ic; do { op=menu(); switch(op) { case 1: /*Simbolos*/ c=ing_simb(tab); cts=1; break; case 2: /*Estados del AFD*/ f=ing_est(tab); /*Estado inicial*/ eini=est_ini(tab,f); /*Estado o estados finales*/ ef=efin; e=est_fin(tab,f,ef); cte=1; break; case 3: /*Completamos tabla*/ if(cte&&cts) { comp_tabla(tab,f,c); } else { system("cls"); printf("Primero debe ingresar los estados y/o simbolos. "); system("pause"); } break; case 4: /*Ingreso y evaluacion de cadenas*/ do { ing_cad(tab,f,c,eini,efin,e); printf("Desea ingresar otra cadena?n"); printf("1. Si.n"); printf("2. Volver al menu y limpiar la tabla.n"); scanf(" %d", &ic); }while(ic==1); /*Limpiamos la tabla para volver al menu y poder cargar una nueva*/ lim_tab(tab); break; case 5: system("cls"); printf("Gracias por utilizar el programa!"); break; default: system("cls"); printf("Opcion incorrecta.n"); system("pause"); } }while(op!=5); return 0; } int menu() { int op; system("cls"); printf("Ingrese una opcion:n"); printf("1. Ingreso de simbolos.n"); printf("2. Ingreso de estados.n"); printf("3. Completar tabla.n"); printf("4. Evaluar cadenas.n"); printf("5.Salirn"); scanf("%d", &op); return op; } int ing_simb(char tab[21][4]) { int c=1; system("cls"); printf("Ingrese los simbolos[maximo 3]. Finalize con 0n"); do { scanf(" %c",&tab[0]); if(tab[0]!='0') c++; }while ((c<=3) && (tab[0]!='0')); c--; return c; } int ing_est(char tab[21][4]) { int f=1; system("cls"); printf("Ingrese los estados[maximo 20]. Finalize con 0n"); do { scanf(" %c",&tab[0]); if(tab[0]!='0') f++; }while ((f<=20) && (tab[0]!='0')); f--; return f; } char est_ini(char tab[21][4], int f) { char est; int i, ban=0; do { system("cls"); printf("Ingrese estado inicial.n"); scanf(" %c", &est); for(i=1;i<=f;i++) if(est==tab[0]) { ban=1; return est; } if(ban!=1) { printf("Estado incorrecto. "); system("pause"); } }while(ban!=1); } int est_fin(char tab[21][4], int f, char *ef) { int e=0, ban, i; char est; do{ system("cls"); printf("Ingrese estado o estados finales. Finalize con 0n"); do { ban=0; scanf(" %c", &est); for(i=1;i<=f;i++) if((est==tab[0])||(est=='0')) { ban=1; *(ef+e)=est; } if(ban!=1) { printf("Estado incorrecto. "); system("pause"); } }while(ban!=1); if(*(ef+e)!='0') e++; }while ((e
Datos archivados del Taringa! original
0puntos
0visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
2visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

e
Usuario
Puntos0
Posts9
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.