Automatización de Cadenas en AFD y AFN
Automatización de Cadenas en AFD y AFN
NACIONAL
TEORÍA COMPUTACIONAL
JUAREZ MARTÍNEZ GENARO
REPORTE
AUTOMATAS FINITOS
DETERMINISTAS Y
NO DETERMINISTAS
GRUPO: 2CV1
ELABORÓ:
PÉREZ FEDERICO JOSÉ JOEL
ESCOM - IPN
Índice
1. Protocolo de Datos 2
1.1. Automata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2. Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1
ESCOM - IPN
1. Protocolo de Datos
Diseñe un automata que simule un sistema de protocolo de datos, el cual debe de leer
1000 cadenas de ceros y unos de 100000 caracteres pero este solo debe aceptar las cadenas
que tiene imparidad de ceros o unos.
1.1. Automata
Primero se diseno el automata que acepta las cadenas que tienen imparidad de ceros o
unos.
2
ESCOM - IPN
1.2. Programa
El programa genera una respuesta de ON/OFF random, es decir, cuando este en ON
significa que inicio un ’proceso’ de transferencia, cuando entra al estado OFF el programa
acaba:
En la siguiente figura, el programa al mostrar ON, sognifica que ha iniciado la generacion
de cadenas aleatorias. Se detiene un momento, luego empieza a analizar la informacion cuando
muestra Procesando datos...
3
ESCOM - IPN
1.2.1. Pruebas
4
ESCOM - IPN
1.2.2. Código
"Practica 1 - AFD Protocolo de Datos.c"
1 #include <stdio.h>
2 #include <string.h>
3 #include <time.h>
4 #include <windows.h>
5
13 int main(){
14 int entrada;
15 int tamcadena = 100000; //Tamanio de la cadena
16 int ncadenas = 1000; //Cantidad de cadenas
17 int indice=0;
18 /*
19 //Introduce datos el usuario
20 printf("\n\tIntroduce el numero de cadenas a transferir: ");
21 scanf("%d", &ncadenas);
22 printf("\n\tIntroduce el tamano de cada cadena: ");
23 scanf("%d", &tamcadena);
24 system("cls");
25 */
26 for(;;){
27 printf("\n\tESTADO: ");
28 entrada = generarRandom();
29 //printf("\nEntrada :%d", entrada);
30 if(entrada==0){
31 color(4);
32 printf(" [%d] OFF", indice+1);
33 color(7);
34 break;
35 }
36 else{
37 color(1);
38 printf(" [%d] ON", indice+1);
39 color(7);
40 printf("\n\t\tIniciando protocolo...");
41 generarCadenas(tamcadena, ncadenas);
42 printf(" ...");
43 //Sleep(2000);
44 printf("\n\t\tProcesando datos...");
5
ESCOM - IPN
53 int estado=0;
54 int tamc;
55 int i=0;
56 do{
57 switch(estado){
58 case 0:
59 if(cadena[i] == '1'){ estado = 1;
60 if(cadena[i] == '0'){ estado = 2; }
61 break;
62 case 1:
63 if(cadena[i] == '1'){ estado = 0; }
64 if(cadena[i] == '0'){ estado = 3;
65 break;
66 case 2:
67 if(cadena[i] == '1'){ estado = 3;
68 if(cadena[i] == '0'){ estado = 0;
69 break;
70 case 3:
71 if(cadena[i] == '1'){ estado = 2;
72 if(cadena[i] == '0'){ estado = 1;
73 break;
74 }
75 i++;
76 }while(cadena[i]);
77 if(estado == 1 || estado==2 || estado==3){
78 i = 1;
79 }else{
80 i = 0;
81 }
82 return i;
83 }
84
6
ESCOM - IPN
92 n = rand()%2;
93 for(j=0; j<tamcadena;j++){
94 n = rand()%2;
95 if(n == 0){
96 cadena[j] = '0';
97 }else{
98 cadena[j] = '1';
99 }
100 }
101 cadena[tamcadena] = '\0';
102 fprintf(archivo, "%s\n", cadena);
103 }
104 fclose(archivo);
105 return 0;
106 }
107
7
ESCOM - IPN
El estado q0 es el estado inicial y podemos pensar que el autómata estará en dicho estado
siempre que no haya “conjeturado” que ya ha comenzado a leer el 01 final. Siempre es posible
que el siguiente sı́mbolo no sea el comienzo de la cadena 01 final, incluso aunque dicho sı́mbolo
sea 0. Por tanto, el estado q0 puede hacer una transición a sı́ mismo tanto con un 0 como
con un 1. Como vemos en la siguiente figura:
8
ESCOM - IPN
2.2. Programa
Se muestra un menu con las siguientes opciones:
Por ultimo se pregunta al usuario si desea evaluar otra cadena, quien introducira 1 en
caso afirmativo u cualquier otra letra en caso contrario.
9
ESCOM - IPN
2.2.1. Pruebas
10
ESCOM - IPN
2.2.2. Código
"Practica 2 - AFN Cadenas que terminan en 01.c"
1 /*
2 Programa: Automata Finito no Determinista reconoce cadenas
3 que terminan en 01
4 Autor: Perez Federico Jose Joel
5 Fecha: 15/09/2018
6 */
7 #include <stdio.h>
8 #include <windows.h>
19 n = rand()%2;
20 for(j=0; j<tamcadena;j++){
21 n = rand()%2;
22 if(n == 0){
23 Cadena[j] = '0';
24 }else{
25 Cadena[j] = '1';
26 }
27 }
28 Cadena[tamcadena] = '\0';
29 return 0;
30 }
31
32 int main(){
33 char Cadena[100000];
34 char M[1000][1000]; //Matriz de Estados
35 int i; // Numero de la fila
36 int j; // Numero de columnas que he avanzado
37 int r; // Recorredor de columnas de la matriz
38 int l,m; //Contadores para impresion de matriz
39 int opc;
40
41 do{
42 do{
43 fflush(stdin);
44 system("cls");
11
ESCOM - IPN
45 printf("\t _________________________________\n");
46 printf("\t| AFN Cadenas que terminan en 01 |\n");
47 printf("\t|_________________________________|\n");
48 printf("\t| 1 - Generar cadena |\n");
49 printf("\t| 2 - Introducir cadena |\n");
50 printf("\t| 3 - Salir |\n");
51 printf("\t|_________________________________|\n");
52 printf(" Selecciona una opcion: ");
53 scanf("%d", &opc);
54 }while(opc<1 || opc>3);
55
56 if(opc==3){
57 break;
58 }else{
59 switch(opc){
60 case 1:
61 generarCadena(Cadena);
62 printf("\n Cadena Generada: %s", Cadena);
63 break;
64 case 2:
65 printf("\n Introduce una cadena: ");
66 scanf("%s", Cadena);
67 break;
68 }
69 }
70
71 //===================inicioAUTOMATA=================================
72 /*Estado Inicial del Automata*/
73 M[0][0] = '0';
74
79 /*Recorredor de la Cadena[] */
80 do{
81 r=0; //Inicializacion del recorredor de filas de la Matriz
82 do{
83 //Selector de estados
84 switch(M[i][r]){
85 case '0'://Estado cero
86 if(Cadena[i]=='0'){/
87 M[i+1][r] = '0';
88 j++;
89 M[i+1][j] = '1';
90 }else{if(Cadena[i]=='1'){
91 M[i+1][r] = '0';
12
ESCOM - IPN
92 }
93 }
94 break;
95 case '1'://Estado uno
96 if(Cadena[i]=='0'){
97 M[i+1][r] = 'X';
98 }else{if(Cadena[i]=='1'){
99 M[i+1][r] = '2';
100 }
101 }
102 break;
103 case '2'://Estado dos
104 if(Cadena[i]=='0'){
105 M[i+1][r] = 'X';
106 }else{ if(Cadena[i]=='1'){
107 M[i+1][r] = 'X';
108 }
109 }
110 break;
111 case 'X':
112 case '-':
113 M[i+1][r] = '-';
114 break;
115 default:
116 if(r<j){
117 M[i+1][r] = '-';
118 }
119 break;
120 }
121 r++;
122 }while(r<=j);
123
124 i++;
125 }while(Cadena[i]);
126 //========finAUTOMATA==================================
127
128 system("cls");
129 printf("\n Cadena Evaluada: %s", Cadena);
130 //printf("\n Matriz de... ");
131 printf("\n ");
132 for(m=0; m<=j*2; m++){printf("-");}
133 printf("\n");
134
135 //=====ImpresionMatriz=============
136 for(l=0; l<=i; l++){
137 printf(" ");
138 for(m=0; m<=j; m++){
13
ESCOM - IPN
149 if(M[i][j]=='2'){
150 printf("\n Resutado: Aceptada!");
151 }else{
152 printf("\n Resutado: Rechazada!");
153 }
154
14
ESCOM - IPN
15
ESCOM - IPN
3.2. Programa
El programa pide al usuario que introduzca el nombre de un archivo para que lo escanee,
este archivo tiene que tener la extension .c, pero solo se debe introducir su nombre sin la
extension del archivo:
Archivo Prueba1.c
"prueba1.c"
1 auto
2 (autoo)
16
ESCOM - IPN
3 aauto
4 break
5 breakk
6 abreak
7 case :
8 caseee
9 ccase
10 case:
11 char
12 chaar
13 cchar
14 chart
15 const
16 cconst
17 constt
18 continue;
19 continue
20 ccontinue
21 continuee
22 default :
23 default
24 ddefault
25 defaultt
26 double
27 do
28 do{
29 }
30 do {
31 else {
32 enum{
33 };
34 float
35 for()
36 ffotr
37 foor
38 forr
39 goto
40 int
41 if()
42 iff
43 long
44 register
45 return
46 short
47 signed
48 sizeof()
49 static
17
ESCOM - IPN
50 struct
51 switch()
52 typedef
53 union
54 unsigned
55 void
56 volatile
57 while()
18
ESCOM - IPN
3.2.1. Código
"Practica 3 - AFN Palabras Reservadas Ansi C.c"
1 #include <stdio.h>
2 #include <string.h>
3 #include <time.h>
4 #include <windows.h>
5
8 int main(){
9 int i; //Contador principal
10 int estado = 0;
11 char Nombre[50];
12 char Palabra;//Almacena el caracter que se esta leyendo del archivo
13 int totalPR=0;//Contador que almacena la cantidad de palabras reservadas
14 int linea;//Almacena la linea en la que se esta haciendo lectura del archivo
15
23 archivo2=fopen("[Link]", "w");
24 remove("[Link]"); // Eliminamos el archivo
25 archivo2=fopen("[Link]", "a");
26
27 i = 0;
28 estado = 0;
29 linea = 1;
30 Palabra = fgetc(archivo);
31 while(!feof(archivo)){
32 switch(estado){
33 case 0:
34 //printf("Estado 0");
35 switch(Palabra){
36 case 'a'://Si la palabra inicia con A
37 estado=1;
38 break;
39 case 'b'://Si la palabra inicia con B
40 estado=2;
41 break;
42 case 'c'://Si la palabra inicia con C
43 estado=3;
44 break;
19
ESCOM - IPN
20
ESCOM - IPN
92 default:
93 estado=0;
94 break;
95 }
96 break;
97 case 2:
98 //printf("Estado 2");
99 switch(Palabra){
100 case 'r':
101 estado=19;
102 break;
103 default:
104 estado=0;
105 break;
106 }
107 break;
108 case 3:
109 //printf("Estado 3");
110 switch(Palabra){
111 case 'o':
112 estado=23;
113 break;
114 case 'a':
115 estado=32;
116 break;
117 case 'h':
118 estado=35;
119 break;
120 default:
121 estado=0;
122 break;
123 }
124 break;
125 case 4:
126 //printf("Estado 4");
127 switch(Palabra){
128 case 'o':
129 estado=38;
130 break;
131 case 'e':
132 estado=43;
133 break;
134 default:
135 estado=0;
136 break;
137 }
138 break;
21
ESCOM - IPN
139 case 5:
140 //printf("Estado 5");
141 switch(Palabra){
142 case 'l':
143 estado=49;
144 break;
145 case 'n':
146 estado=52;
147 break;
148 case 'x':
149 estado=54;
150 break;
151 default:
152 estado=0;
153 break;
154 }
155 break;
156 case 6:
157 //printf("Estado 6");
158 switch(Palabra){
159 case 'l':
160 estado=60;
161 break;
162 case 'o':
163 estado=64;
164 break;
165 default:
166 estado=0;
167 break;
168 }
169 break;
170 case 7:
171 //printf("Estado 7");
172 switch(Palabra){
173 case 'o':
174 estado=66;
175 break;
176 default:
177 estado=0;
178 break;
179 }
180 break;
181 case 8:
182 //printf("Estado 8");
183 switch(Palabra){
184 case 'f':
185 estado=69;
22
ESCOM - IPN
186 break;
187 case 'n':
188 estado=70;
189 break;
190 default:
191 estado=0;
192 break;
193 }
194 break;
195 case 9:
196 //printf("Estado 9");
197 switch(Palabra){
198 case 'o':
199 estado=72;
200 break;
201 default:
202 estado=0;
203 break;
204 }
205 break;
206 case 10:
207 //printf("Estado 10");
208 switch(Palabra){
209 case 'e':
210 estado=75;
211 break;
212 default:
213 estado=0;
214 break;
215 }
216 break;
217 case 11:
218 //printf("Estado 11");
219 switch(Palabra){
220 case 'h':
221 estado=86;
222 break;
223 case 'i':
224 estado=90;
225 break;
226 case 't':
227 estado=99;
228 break;
229 case 'w':
230 estado=104;
231 break;
232 default:
23
ESCOM - IPN
233 estado=0;
234 break;
235 }
236 break;
237 case 12:
238 //printf("Estado 12");
239 switch(Palabra){
240 case 'y':
241 estado=113;
242 break;
243 default:
244 estado=0;
245 break;
246 }
247 break;
248 case 13:
249 //printf("Estado 13");
250 switch(Palabra){
251 case 'n':
252 estado=119;
253 break;
254 default:
255 estado=0;
256 break;
257 }
258 break;
259 case 14:
260 //printf("Estado 14");
261 switch(Palabra){
262 case 'o':
263 estado=129;
264 break;
265 default:
266 estado=0;
267 break;
268 }
269 break;
270 case 15:
271 //printf("Estado 15");
272 switch(Palabra){
273 case 'h':
274 estado=138;
275 break;
276 default:
277 estado=0;
278 break;
279 }
24
ESCOM - IPN
280 break;
281
324 break;
325 //Estados derivados del estado 2
326 case 19:
25
ESCOM - IPN
26
ESCOM - IPN
374 break;
375 }
376 break;
377 //Estados derivados del estado 3
378 case 23:
379 //printf("Estado 23");
380 switch(Palabra){
381 case 'n':
382 estado=24;
383 break;
384 default:
385 estado=0;
386 break;
387 }
388 break;
389 case 24:
390 //printf("Estado 24");
391 switch(Palabra){
392 case 't':
393 estado=25;
394 break;
395 case 's':
396 estado=30;
397 break;
398 default:
399 estado=0;
400 break;
401 }
402 break;
403 case 25:
404 //printf("Estado 25");
405 switch(Palabra){
406 case 'i':
407 estado=26;
408 break;
409 default:
410 estado=0;
411 break;
412 }
413 break;
414 case 26:
415 //printf("Estado 26");
416 switch(Palabra){
417 case 'n':
418 estado=27;
419 break;
420 default:
27
ESCOM - IPN
421 estado=0;
422 break;
423 }
424 break;
425 case 27:
426 //printf("Estado 27");
427 switch(Palabra){
428 case 'u':
429 estado=28;
430 break;
431 default:
432 estado=0;
433 break;
434 }
435 break;
436 case 28:
437 //printf("Estado 28");
438 switch(Palabra){
439 case 'e':
440 estado=29;
441 break;
442 default:
443 estado=0;
444 break;
445 }
446 break;
447 case 29:
448 //-CONTINUE-
449 //printf("Estado 29");
450 switch(Palabra){
451 case ';':
452 case '\n':
453 case ' ':
454 color(3);
455 printf("\n Palabra Reconocida: CONTINUE
456 fprintf(archivo2, "En linea: %-5d Pal
457 color(7);
458 totalPR++;
459 estado=0;
460 break;
461 default:
462 estado=0;
463 break;
464 }
465 break;
466 case 30:
467 //printf("Estado 30");
28
ESCOM - IPN
468 switch(Palabra){
469 case 't':
470 estado=31;
471 break;
472 default:
473 estado=0;
474 break;
475 }
476 break;
477 case 31:
478 //-CONST-
479 //printf("Estado 31");
480 switch(Palabra){
481 case ' ':
482 case '\n':
483 color(3);
484 printf("\n Palabra Reconocida: CONST
485 fprintf(archivo2, "En linea: %-5d Pal
486 color(7);
487 totalPR++;
488 estado=0;
489 break;
490 default:
491 estado=0;
492 break;
493 }
494 break;
495 case 32:
496 //printf("Estado 30");
497 switch(Palabra){
498 case 's':
499 estado=33;
500 break;
501 default:
502 estado=0;
503 break;
504 }
505 break;
506 case 33:
507 //printf("Estado 33");
508 switch(Palabra){
509 case 'e':
510 estado=34;
511 break;
512 default:
513 estado=0;
514 break;
29
ESCOM - IPN
515 }
516 break;
517 case 34:
518 //-CASE-
519 //printf("Estado 34");
520 switch(Palabra){
521 case '\n':
522 case ' ':
523 case ':':
524 color(3);
525 printf("\n Palabra Reconocida: CASE
526 fprintf(archivo2, "En linea: %-5d Pal
527 color(7);
528 totalPR++;
529 estado=0;
530 break;
531 default:
532 estado=0;
533 break;
534 }
535 break;
536 case 35:
537 //printf("Estado 35");
538 switch(Palabra){
539 case 'a':
540 estado=36;
541 break;
542 default:
543 estado=0;
544 break;
545 }
546 break;
547 case 36:
548 //printf("Estado 36");
549 switch(Palabra){
550 case 'r':
551 estado=37;
552 break;
553 default:
554 estado=0;
555 break;
556 }
557 break;
558 case 37:
559 //-CHAR-
560 //printf("Estado 37");
561 switch(Palabra){
30
ESCOM - IPN
31
ESCOM - IPN
649 break;
650 case 43:
651 //printf("Estado 43");
652 switch(Palabra){
653 case 'f':
654 estado=44;
655 break;
32
ESCOM - IPN
656 default:
657 estado=0;
658 break;
659 }
660 break;
661 case 44:
662 //printf("Estado 44");
663 switch(Palabra){
664 case 'a':
665 estado=45;
666 break;
667 default:
668 estado=0;
669 break;
670 }
671 break;
672 case 45:
673 //printf("Estado 45");
674 switch(Palabra){
675 case 'u':
676 estado=46;
677 break;
678 default:
679 estado=0;
680 break;
681 }
682 break;
683 case 46:
684 //printf("Estado 46");
685 switch(Palabra){
686 case 'l':
687 estado=47;
688 break;
689 default:
690 estado=0;
691 break;
692 }
693 break;
694 case 47:
695 //printf("Estado 47");
696 switch(Palabra){
697 case 't':
698 estado=48;
699 break;
700 default:
701 estado=0;
702 break;
33
ESCOM - IPN
703 }
704 break;
705 case 48:
706 //-DEFAULT-
707 //printf("Estado 48");
708 switch(Palabra){
709 case ' ':
710 case '\n':
711 case ':':
712 color(3);
713 printf("\n Palabra Reconocida: DEFAULT
714 fprintf(archivo2, "En linea: %-5d Pal
715 color(7);
716 totalPR++;
717 estado=0;
718 break;
719 default:
720 estado=0;
721 break;
722 }
723 break;
724 //Derivados del estado 5
725 case 49:
726 //printf("Estado 49");
727 switch(Palabra){
728 case 's':
729 estado=50;
730 break;
731 default:
732 estado=0;
733 break;
734 }
735 break;
736 case 50:
737 //printf("Estado 50");
738 switch(Palabra){
739 case 'e':
740 estado=51;
741 break;
742 default:
743 estado=0;
744 break;
745 }
746 break;
747 case 51:
748 //-ELSE-
749 //printf("Estado 51");
34
ESCOM - IPN
750 switch(Palabra){
751 case ' ':
752 case '\n':
753 case '{':
754 color(3);
755 printf("\n Palabra Reconocida: ELSE
756 fprintf(archivo2, "En linea: %-5d Pal
757 color(7);
758 totalPR++;
759 estado=0;
760 break;
761 default:
762 estado=0;
763 break;
764 }
765 break;
766 case 52:
767 //printf("Estado 52");
768 switch(Palabra){
769 case 'u':
770 estado=53;
771 break;
772 default:
773 estado=0;
774 break;
775 }
776 break;
777 case 53:
778 //printf("Estado 53");
779 switch(Palabra){
780 case 'm':
781 estado=54;
782 break;
783 default:
784 estado=0;
785 break;
786 }
787 break;
788 case 54:
789 //-ENUM-
790 //printf("Estado 54");
791 switch(Palabra){
792 case ' ':
793 case '{':
794 color(3);
795 printf("\n Palabra Reconocida: ENUM
796 fprintf(archivo2, "En linea: %-5d Pal
35
ESCOM - IPN
797 color(7);
798 totalPR++;
799 estado=0;
800 break;
801 default:
802 break;
803
804 }
805 break;
806 case 55:
807 //printf("Estado 55");
808 switch(Palabra){
809 case 't':
810 estado=56;
811 break;
812 default:
813 estado=0;
814 break;
815 }
816 break;
817 case 56:
818 //printf("Estado 56");
819 switch(Palabra){
820 case 'e':
821 estado=57;
822 break;
823 default:
824 estado=0;
825 break;
826 }
827 break;
828 case 57:
829 //printf("Estado 57");
830 switch(Palabra){
831 case 'r':
832 estado=58;
833 break;
834 default:
835 estado=0;
836 break;
837 }
838 break;
839 case 58:
840 //printf("Estado 58");
841 switch(Palabra){
842 case 'n':
843 estado=59;
36
ESCOM - IPN
844 break;
845 default:
846 estado=0;
847 break;
848 }
849 break;
850 case 59:
851 //-EXTERN-
852 //printf("Estado 59");
853 switch(Palabra){
854 case ' ':
855 color(3);
856 printf("\n Palabra Reconocida: EXTERN
857 fprintf(archivo2, "En linea: %-5d Pal
858 color(7);
859 totalPR++;
860 estado=0;
861 break;
862 default:
863 estado=0;
864 break;
865 }
866 break;
867 //Estados derivados del estado 6
868 case 60:
869 //printf("Estado 60");
870 switch(Palabra){
871 case 'o':
872 estado=61;
873 break;
874 default:
875 estado=0;
876 break;
877 }
878 break;
879 case 61:
880 //printf("Estado 61");
881 switch(Palabra){
882 case 'a':
883 estado=62;
884 break;
885 default:
886 estado=0;
887 break;
888 }
889 break;
890 case 62:
37
ESCOM - IPN
38
ESCOM - IPN
938 color(3);
939 printf("\n Palabra Reconocida: FOR
940 fprintf(archivo2, "En linea: %-5d Pal
941 color(7);
942 totalPR++;
943 estado=0;
944 break;
945 default:
946 estado=0;
947 }
948 break;
949 //Estados derivados del estado 7
950 case 66:
951 //printf("Estado 66");
952 switch(Palabra){
953 case 't':
954 estado=67;
955 break;
956 default:
957 estado=0;
958 break;
959 }
960 break;
961 case 67:
962 //printf("Estado 67");
963 switch(Palabra){
964 case 'o':
965 estado=68;
966 break;
967 default:
968 estado=0;
969 break;
970 }
971 break;
972 case 68:
973 //-GOTO-
974 //printf("Estado 68");
975 switch(Palabra){
976 case ' ':
977 case '\n':
978 color(3);
979 printf("\n Palabra Reconocida: GOTO
980 fprintf(archivo2, "En linea: %-5d Pal
981 color(7);
982 totalPR++;
983 estado=0;
984 break;
39
ESCOM - IPN
985 default:
986 estado=0;
987 break;
988 }
989 break;
990 //Estados derivados del estado 8
991 case 69:
992 //-IF-
993 //printf("Estado 69");
994 switch(Palabra){
995 case ' ':
996 case '\n':
997 case '(':
998 case '{':
999 color(3);
1000 printf("\n Palabra Reconocida: IF L
1001 fprintf(archivo2, "En linea: %-5d Pal
1002 color(7);
1003 totalPR++;
1004 estado=0;
1005 break;
1006 default:
1007 estado=0;
1008 break;
1009 }
1010 break;
1011 case 70:
1012 //printf("Estado 70");
1013 switch(Palabra){
1014 case 't':
1015 estado=71;
1016 break;
1017 default:
1018 estado=0;
1019 break;
1020 }
1021 break;
1022 case 71:
1023 //-INT-
1024 //printf("Estado 71");
1025 switch(Palabra){
1026 case ' ':
1027 case '\n':
1028 color(3);
1029 printf("\n Palabra Reconocida: INT
1030 fprintf(archivo2, "En linea: %-5d Pal
1031 color(7);
40
ESCOM - IPN
1032 totalPR++;
1033 estado=0;
1034 break;
1035 default:
1036 estado=0;
1037 break;
1038 }
1039 break;
1040 //Estados derivados del estado 9
1041 case 72:
1042 //printf("Estado 72");
1043 switch(Palabra){
1044 case 'n':
1045 estado=73;
1046 break;
1047 default:
1048 estado=0;
1049 break;
1050 }
1051 break;
1052 case 73:
1053 //printf("Estado 73");
1054 switch(Palabra){
1055 case 'g':
1056 estado=74;
1057 break;
1058 default:
1059 estado=0;
1060 break;
1061 }
1062 break;
1063 case 74:
1064 //-LONG-
1065 //printf("Estado 74");
1066 switch(Palabra){
1067 case ' ':
1068 case '\n':
1069 color(3);
1070 printf("\n Palabra Reconocida: LONG
1071 fprintf(archivo2, "En linea: %-5d Pal
1072 color(7);
1073 totalPR++;
1074 estado=0;
1075 break;
1076 default:
1077 estado=0;
1078 break;
41
ESCOM - IPN
1079 }
1080 break;
1081 //Estados derivados del estado 10
1082 case 75:
1083 //printf("Estado 75");
1084 switch(Palabra){
1085 case 'g':
1086 estado=76;
1087 break;
1088 case 't':
1089 estado=82;
1090 break;
1091 default:
1092 estado=0;
1093 break;
1094 }
1095 break;
1096 case 76:
1097 //printf("Estado 76");
1098 switch(Palabra){
1099 case 'i':
1100 estado=77;
1101 break;
1102 default:
1103 estado=0;
1104 break;
1105 }
1106 break;
1107 case 77:
1108 //printf("Estado 77");
1109 switch(Palabra){
1110 case 's':
1111 estado=78;
1112 break;
1113 default:
1114 estado=0;
1115 break;
1116 }
1117 break;
1118 case 78:
1119 //printf("Estado 78");
1120 switch(Palabra){
1121 case 't':
1122 estado=79;
1123 break;
1124 default:
1125 estado=0;
42
ESCOM - IPN
1126 break;
1127 }
1128 break;
1129 case 79:
1130 //printf("Estado 79");
1131 switch(Palabra){
1132 case 'e':
1133 estado=80;
1134 break;
1135 default:
1136 estado=0;
1137 break;
1138 }
1139 break;
1140 case 80:
1141 //printf("Estado 80");
1142 switch(Palabra){
1143 case 'r':
1144 estado=81;
1145 break;
1146 default:
1147 estado=0;
1148 break;
1149 }
1150 break;
1151 case 81:
1152 //-REGISTER-
1153 //printf("Estado 81");
1154 switch(Palabra){
1155 case ' ':
1156 case '\n':
1157 color(3);
1158 printf("\n Palabra Reconocida: REGISTER
1159 fprintf(archivo2, "En linea: %-5d Pal
1160 color(7);
1161 totalPR++;
1162 estado=0;
1163 break;
1164 default:
1165 estado=0;
1166 break;
1167 }
1168 break;
1169 case 82:
1170 //printf("Estado 82");
1171 switch(Palabra){
1172 case 'u':
43
ESCOM - IPN
1173 estado=83;
1174 break;
1175 default:
1176 estado=0;
1177 break;
1178 }
1179 break;
1180 case 83:
1181 //printf("Estado 83");
1182 switch(Palabra){
1183 case 'r':
1184 estado=84;
1185 break;
1186 default:
1187 estado=0;
1188 break;
1189 }
1190 break;
1191 case 84:
1192 //printf("Estado 84");
1193 switch(Palabra){
1194 case 'n':
1195 estado=85;
1196 break;
1197 default:
1198 estado=0;
1199 break;
1200 }
1201 break;
1202 case 85:
1203 //-RETURN-
1204 //printf("Estado 85");
1205 switch(Palabra){
1206 case ' ':
1207 case '\n':
1208 color(3);
1209 printf("\n Palabra Reconocida: RETURN
1210 fprintf(archivo2, "En linea: %-5d Pal
1211 color(7);
1212 totalPR++;
1213 estado=0;
1214 break;
1215 default:
1216 estado=0;
1217 break;
1218 }
1219 break;
44
ESCOM - IPN
45
ESCOM - IPN
1267 default:
1268 estado=0;
1269 break;
1270 }
1271 break;
1272 case 90:
1273 //printf("Estado 90");
1274 switch(Palabra){
1275 case 'g':
1276 estado=91;
1277 break;
1278 case 'z':
1279 estado=95;
1280 break;
1281 default:
1282 estado=0;
1283 break;
1284 }
1285 break;
1286 case 91:
1287 //printf("Estado 91");
1288 switch(Palabra){
1289 case 'n':
1290 estado=92;
1291 break;
1292 default:
1293 estado=0;
1294 break;
1295 }
1296 break;
1297 case 92:
1298 //printf("Estado 92");
1299 switch(Palabra){
1300 case 'e':
1301 estado=93;
1302 break;
1303 default:
1304 estado=0;
1305 break;
1306 }
1307 break;
1308 case 93:
1309 //printf("Estado 93");
1310 switch(Palabra){
1311 case 'd':
1312 estado=94;
1313 break;
46
ESCOM - IPN
1314 default:
1315 estado=0;
1316 break;
1317 }
1318 break;
1319 case 94:
1320 //-SIGNED-
1321 //printf("Estado 94");
1322 switch(Palabra){
1323 case ' ':
1324 case '\n':
1325 color(3);
1326 printf("\n Palabra Reconocida: SIGNED
1327 fprintf(archivo2, "En linea: %-5d Pal
1328 color(7);
1329 totalPR++;
1330 estado=0;
1331 break;
1332 default:
1333 estado=0;
1334 break;
1335 }
1336 break;
1337 case 95:
1338 //printf("Estado 95");
1339 switch(Palabra){
1340 case 'e':
1341 estado=96;
1342 break;
1343 default:
1344 estado=0;
1345 break;
1346 }
1347 break;
1348 case 96:
1349 //printf("Estado 96");
1350 switch(Palabra){
1351 case 'o':
1352 estado=97;
1353 break;
1354 default:
1355 estado=0;
1356 break;
1357 }
1358 break;
1359 case 97:
1360 //printf("Estado 97");
47
ESCOM - IPN
1361 switch(Palabra){
1362 case 'f':
1363 estado=98;
1364 break;
1365 default:
1366 estado=0;
1367 break;
1368 }
1369 break;
1370 case 98:
1371 //-SIZEOF-
1372 //printf("Estado 98");
1373 switch(Palabra){
1374 case ' ':
1375 case '\n':
1376 color(3);
1377 printf("\n Palabra Reconocida: SIZEOF
1378 fprintf(archivo2, "En linea: %-5d Pal
1379 color(7);
1380 totalPR++;
1381 estado=0;
1382 break;
1383 default:
1384 estado=0;
1385 break;
1386 }
1387 break;
1388 case 99:
1389 //printf("Estado 97");
1390 switch(Palabra){
1391 case 'a':
1392 estado=100;
1393 break;
1394 case 'r':
1395 estado=109;
1396 break;
1397 default:
1398 estado=0;
1399 break;
1400 }
1401 break;
1402 case 100:
1403 //printf("Estado 100");
1404 switch(Palabra){
1405 case 't':
1406 estado=101;
1407 break;
48
ESCOM - IPN
1408 default:
1409 estado=0;
1410 break;
1411 }
1412 break;
1413 case 101:
1414 //printf("Estado 101");
1415 switch(Palabra){
1416 case 'i':
1417 estado=102;
1418 break;
1419 default:
1420 estado=0;
1421 break;
1422 }
1423 break;
1424 case 102:
1425 //printf("Estado 102");
1426 switch(Palabra){
1427 case 'c':
1428 estado=103;
1429 break;
1430 default:
1431 estado=0;
1432 break;
1433 }
1434 break;
1435 case 103:
1436 //-STATIC-
1437 //printf("Estado 103");
1438 switch(Palabra){
1439 case ' ':
1440 case '\n':
1441 color(3);
1442 printf("\n Palabra Reconocida: STATIC
1443 fprintf(archivo2, "En linea: %-5d Pal
1444 color(7);
1445 totalPR++;
1446 estado=0;
1447 break;
1448 default:
1449 estado=0;
1450 break;
1451 }
1452 break;
1453 case 104:
1454 //printf("Estado 104");
49
ESCOM - IPN
1455 switch(Palabra){
1456 case 'i':
1457 estado=105;
1458 break;
1459 default:
1460 estado=0;
1461 break;
1462 }
1463 break;
1464 case 105:
1465 //printf("Estado 105");
1466 switch(Palabra){
1467 case 't':
1468 estado=106;
1469 break;
1470 default:
1471 estado=0;
1472 break;
1473 }
1474 break;
1475 case 106:
1476 //printf("Estado 106");
1477 switch(Palabra){
1478 case 'c':
1479 estado=107;
1480 break;
1481 default:
1482 estado=0;
1483 break;
1484 }
1485 break;
1486 case 107:
1487 //printf("Estado 107");
1488 switch(Palabra){
1489 case 'h':
1490 estado=108;
1491 break;
1492 default:
1493 estado=0;
1494 break;
1495 }
1496 break;
1497 case 108:
1498 //-SWITCH-
1499 //printf("Estado 108");
1500 switch(Palabra){
1501 case ' ':
50
ESCOM - IPN
51
ESCOM - IPN
1549 break;
1550 case 112:
1551 //-STRUCT-
1552 //printf("Estado 112");
1553 switch(Palabra){
1554 case ' ':
1555 case '\n':
1556 color(3);
1557 printf("\n Palabra Reconocida: STRUCT
1558 fprintf(archivo2, "En linea: %-5d Pal
1559 color(7);
1560 totalPR++;
1561 estado=0;
1562 break;
1563 default:
1564 estado=0;
1565 break;
1566 }
1567 break;
1568 //Estados derivados del estado 12
1569 case 113:
1570 //printf("Estado 113");
1571 switch(Palabra){
1572 case 'p':
1573 estado=114;
1574 break;
1575 default:
1576 estado=0;
1577 break;
1578 }
1579 break;
1580 case 114:
1581 //printf("Estado 114");
1582 switch(Palabra){
1583 case 'e':
1584 estado=115;
1585 break;
1586 default:
1587 estado=0;
1588 break;
1589 }
1590 break;
1591 case 115:
1592 //printf("Estado 115");
1593 switch(Palabra){
1594 case 'd':
1595 estado=116;
52
ESCOM - IPN
1596 break;
1597 default:
1598 estado=0;
1599 break;
1600 }
1601 break;
1602 case 116:
1603 //printf("Estado 116");
1604 switch(Palabra){
1605 case 'e':
1606 estado=117;
1607 break;
1608 default:
1609 estado=0;
1610 break;
1611 }
1612 break;
1613 case 117:
1614 //printf("Estado 117");
1615 switch(Palabra){
1616 case 'f':
1617 estado=118;
1618 break;
1619 default:
1620 estado=0;
1621 break;
1622 }
1623 break;
1624 case 118:
1625 //-TYPEDEF-
1626 //printf("Estado 118");
1627 switch(Palabra){
1628 case ' ':
1629 case '\n':
1630 color(3);
1631 printf("\n Palabra Reconocida: TYPEDEF
1632 fprintf(archivo2, "En linea: %-5d Pal
1633 color(7);
1634 totalPR++;
1635 estado=0;
1636 break;
1637 default:
1638 estado=0;
1639 break;
1640 }
1641
1642 break;
53
ESCOM - IPN
54
ESCOM - IPN
1690 break;
1691 case 123:
1692 //printf("Estado 123");
1693 switch(Palabra){
1694 case 'e':
1695 estado=124;
1696 break;
1697 default:
1698 estado=0;
1699 break;
1700 }
1701 break;
1702 case 124:
1703 //printf("Estado 124");
1704 switch(Palabra){
1705 case 'd':
1706 estado=125;
1707 break;
1708 default:
1709 estado=0;
1710 break;
1711 }
1712 break;
1713 case 125:
1714 //-UNSIGNED-
1715 //printf("Estado 125");
1716 switch(Palabra){
1717 case ' ':
1718 case '(':
1719 case '\n':
1720 color(3);
1721 printf("\n Palabra Reconocida: UNSIGNED
1722 fprintf(archivo2, "En linea: %-5d Pal
1723 color(7);
1724 totalPR++;
1725 estado=0;
1726 break;
1727 default:
1728 estado=0;
1729 break;
1730 }
1731 break;
1732 case 126:
1733 //printf("Estado 126");
1734 switch(Palabra){
1735 case 'o':
1736 estado=127;
55
ESCOM - IPN
1737 break;
1738 default:
1739 estado=0;
1740 break;
1741 }
1742 break;
1743 case 127:
1744 //printf("Estado 127");
1745 switch(Palabra){
1746 case 'n':
1747 estado=128;
1748 break;
1749 default:
1750 estado=0;
1751 break;
1752 }
1753 break;
1754 case 128:
1755 //-UNION-
1756 //printf("Estado 128");
1757 switch(Palabra){
1758 case ' ':
1759 case '(':
1760 case '\n':
1761 color(3);
1762 printf("\n Palabra Reconocida: UNION
1763 fprintf(archivo2, "En linea: %-5d Pal
1764 color(7);
1765 totalPR++;
1766 estado=0;
1767 break;
1768 default:
1769 estado=0;
1770 break;
1771 }
1772 break;
1773 //Estados derivados del estado 14
1774 case 129:
1775 //printf("Estado 129");
1776 switch(Palabra){
1777 case 'i':
1778 estado=130;
1779 break;
1780 case 'l':
1781 estado=132;
1782 break;
1783 default:
56
ESCOM - IPN
1784 estado=0;
1785 break;
1786 }
1787 break;
1788 case 130:
1789 //printf("Estado 130");
1790 switch(Palabra){
1791 case 'd':
1792 estado=131;
1793 break;
1794 default:
1795 estado=0;
1796 break;
1797 }
1798 break;
1799 case 131:
1800 //-VOID-
1801 //printf("Estado 128");
1802 switch(Palabra){
1803 case ' ':
1804 case '(':
1805 case '\n':
1806 color(3);
1807 printf("\n Palabra Reconocida: VOID
1808 fprintf(archivo2, "En linea: %-5d Pal
1809 color(7);
1810 totalPR++;
1811 estado=0;
1812 break;
1813 default:
1814 estado=0;
1815 break;
1816 }
1817 break;
1818 case 132:
1819 //printf("Estado 132");
1820 switch(Palabra){
1821 case 'a':
1822 estado=133;
1823 break;
1824 default:
1825 estado=0;
1826 break;
1827 }
1828 break;
1829 case 133:
1830 //printf("Estado 133");
57
ESCOM - IPN
1831 switch(Palabra){
1832 case 't':
1833 estado=134;
1834 break;
1835 default:
1836 estado=0;
1837 break;
1838 }
1839 break;
1840 case 134:
1841 //printf("Estado 134");
1842 switch(Palabra){
1843 case 'i':
1844 estado=135;
1845 break;
1846 default:
1847 estado=0;
1848 break;
1849 }
1850 break;
1851 case 135:
1852 //printf("Estado 135");
1853 switch(Palabra){
1854 case 'l':
1855 estado=136;
1856 break;
1857 default:
1858 estado=0;
1859 break;
1860 }
1861 break;
1862 case 136:
1863 //printf("Estado 136");
1864 switch(Palabra){
1865 case 'e':
1866 estado=137;
1867 break;
1868 default:
1869 estado=0;
1870 break;
1871 }
1872 break;
1873 case 137:
1874 //-VOLATILE-
1875 //printf("Estado 137");
1876 switch(Palabra){
1877 case ' ':
58
ESCOM - IPN
59
ESCOM - IPN
1925 break;
1926 case 141:
1927 //-WHILE-
1928 //printf("Estado 141");
1929 switch(Palabra){
1930 case ' ':
1931 case '(':
1932 case '\n':
1933 color(3);
1934 printf("\n Palabra Reconocida: WHILE
1935 fprintf(archivo2, "En linea: %-5d Pal
1936 color(7);
1937 totalPR++;
1938 estado=0;
1939 break;
1940 default:
1941 estado=0;
1942 break;
1943 }
1944 break;
1945 }
1946 if(Palabra=='\n'){
1947 linea++; //Incrementa en uno la linea en que se esta
1948 }
1949 //printf("\nCaracter Leido: %c", Palabra);
1950 fflush(stdin);
1951 Palabra = fgetc(archivo);
1952 }
1953 fclose(archivo);
1954 fclose(archivo2);
1955 color(6);
1956 printf("\nEl total de palabras recnocidas es: %d\n", totalPR);
1957 color(7);
1958 getch();
1959 return 0;
1960 }
1961
60