0% encontró este documento útil (0 votos)
280 vistas61 páginas

Automatización de Cadenas en AFD y AFN

Este documento describe un programa que simula un protocolo de datos para transferir cadenas de 0s y 1s. Primero diseña un automata finito determinista que acepta cadenas con imparidad de 0s u 1s. Luego el programa genera cadenas aleatorias de longitud fija, evalua cada cadena con el automata para seleccionar aquellas válidas y almacenarlas en un archivo separado.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
280 vistas61 páginas

Automatización de Cadenas en AFD y AFN

Este documento describe un programa que simula un protocolo de datos para transferir cadenas de 0s y 1s. Primero diseña un automata finito determinista que acepta cadenas con imparidad de 0s u 1s. Luego el programa genera cadenas aleatorias de longitud fija, evalua cada cadena con el automata para seleccionar aquellas válidas y almacenarlas en un archivo separado.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

INSTITUTO POLITÉCNICO

NACIONAL

ESCUELA SUPERIOR DE CÓMPUTO

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

2. Cadenas que terminan en 01 8


2.1. Automata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2. Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1. Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.2. Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3. Palabras Reservadas de Ansi C 15


3.1. Automata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2. Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2.1. Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

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.

Figura 1: AFD que acepta imparidad de cadenas

Una vez diseñado el automata, el protocolo queda de la siguiente manera:

Figura 2: AFD Simulador de un Protocolo de Datos

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...

Figura 3: Solo se realizo una ’trasnferencia’

En esta ocacion repitio el proceso cinco veces.

Figura 4: Cuatro Transferencias

Al momento de mostrar la leyenda Iniciando Protocolo... el programa genera cadenas


de ceros y unos aleatoriamente y los guarda en un archivo [Link], Cuando
termina, este abre el archivo en modo lectura y selecciona de el las cadenas que cumplen con
la imparidad de ceros o unos. Estas cadenas seleccionadas son almacenadas en CadenasA-
[Link]:

Figura 5: Archivos Generados

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

6 int evaluarCadena(char *cadena);


7 int generarRandom();
8 int color(int c);
9 int generarCadenas(int tamcadena, int ncadenas);
10 int seleccionarCadenas(int tam, int indice, int ncadenas);
11 int evaluarCadena(char *cadena);
12

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

45 seleccionarCadenas(tamcadena, indice, ncadenas);


46 printf(" ...");
47 indice++;
48 }
49 }
50 return 0;
51 }
52 int evaluarCadena(char *cadena){

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

85 int generarCadenas(int tamcadena, int ncadenas){


86 char cadena[tamcadena];
87 int i, j, n;
88 FILE *archivo = fopen("[Link]", "a");
89 srand(time(NULL));
90 for(i=1;i<=ncadenas;i++)
91 {

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

108 int seleccionarCadenas(int tam, int indice, int ncadenas){


109 char cadena[tam];
110 int i;
111 FILE *archivo = fopen("[Link]", "r+");
112 FILE *archivo2 = fopen("[Link]", "a");
113 while(feof(archivo)==0){
114 for(i=0;i<indice*ncadenas;i++){
115 fscanf(archivo, "%s", &cadena);
116 }
117 fscanf(archivo, "%s", &cadena);
118 if( evaluarCadena(cadena) == 1 ){
119 fprintf(archivo2, "%s\n", cadena);
120 }
121 }
122 fclose(archivo);
123 fclose(archivo2);
124 return 0;
125 }

126 int generarRandom(){

127 int Nrandom = 0;


128 srand(time(NULL));
129 Nrandom = rand()%2 ;
130 return Nrandom;
131 }

132 int color(int c){

133 HANDLE Colorear = GetStdHandle (STD_OUTPUT_HANDLE);


134 SetConsoleTextAttribute (Colorear, c);
135 }

7
ESCOM - IPN

2. Cadenas que terminan en 01


2.1. Automata
La Figura muestra un autómata finito no determinista, cuyo trabajo consiste en aceptar
todas y sólo las cadenas formadas por ceros y unos que terminan en 01.

Figura 6: AFN que acepta todas las cadenas que terminan en 01

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:

Figura 7: Estados de un AFN durante el procesamiento de la secuencia de entrada 00101.

A partir de lo anterior se determino el correspondiente AFD.

Figura 8: AFD construido a partir del AFN de la Figura 6

8
ESCOM - IPN

2.2. Programa
Se muestra un menu con las siguientes opciones:

Figura 9: Menu de operaciones

A continuacion se le pide al usuario que seleccione la opcion a ejecutar. Si introduce 1, el


programa genera una cadena de ceros y unos aleatoriamente, si introduce 2, se le pedira al
usuario que introduzca la cadena que desea sea evaluada:

Figura 10: Introducir cadena por consola

En este caso se introdujo la cadena 1001, a continuacion el programa evalua mediante


una matriz de estados si esta es una cadena que termina en 01. Si el ultimo elemento de la
matriz es el estado 2, entonces la cadena es aceptada.

Figura 11: Matriz de Estados

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>

10 #define TAM 100


11

12 int generarCadena(char *Cadena){


13 int j, n;
14 int tamcadena;
15 srand(time(NULL));
16 tamcadena = n = rand()%100;
17 printf("TC: %d", tamcadena);
18

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

75 /*Inicializacion de los indices de filas y columnas*/


76 i=0;
77 j=0;
78

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

139 printf(" %c", M[l][m]);


140 }
141 printf("\n");
142 }
143 //=================================
144 printf(" ");
145 for(m=0; m<=j*2; m++){printf("-");}
146

147 //printf("[%d][%d]", i, j);


148

149 if(M[i][j]=='2'){
150 printf("\n Resutado: Aceptada!");
151 }else{
152 printf("\n Resutado: Rechazada!");
153 }
154

155 printf("\n\n [1] Deseas repetir el programa? ");


156 scanf("%d", &opc);
157 }while(opc == 1);
158 return 0;
159 }

14
ESCOM - IPN

3. Palabras Reservadas de Ansi C


3.1. Automata
Diseñe un automata que permita reconocer las palabras reservadas del lenguaje ansi c:
- outo - else - static - while - break - enum - struct - union - case - extern - switch -
unsigned - char - float - if - void - const - for - int - volatile - continue - goto - long - default
- short - register - do - signed - return - double - sizeof - typedef

Figura 12: AFN Reconocedor Palabras Reservadas Ansi C

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:

Figura 13: Introduccion del nombre del archivo a analizar

Del analisis, el resultado que se muestra es:

Figura 14: Muestra de Palabras Aceptadas

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()

Ademas de guardar las palabras aceptadas en un archivo .txt que se genera:

Figura 15: Archivo [Link]

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

6 int color(int c);


7

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

16 printf("Introduce el nombre del archivo a analizar: ");


17 scanf("%s", Nombre);
18 strcat(Nombre, ".c");
19 FILE *archivo;
20 FILE *archivo2;
21 archivo = fopen(Nombre, "r+");
22

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

45 case 'd'://Si la palabra inicia con D


46 estado=4;
47 break;
48 case 'e'://Si la palabra inicia con E
49 estado=5;
50 break;
51 case 'f'://Si la palabra inicia con F
52 estado=6;
53 break;
54 case 'g'://Si la palabra inicia con G
55 estado=7;
56 break;
57 case 'i'://Si la palabra inicia con I
58 estado=8;
59 break;
60 case 'l'://Si la palabra inicia con L
61 estado=9;
62 break;
63 case 'r'://Si la palabra inicia con R
64 estado=10;
65 break;
66 case 's'://Si la palabra inicia con S
67 estado=11;
68 break;
69 case 't'://Si la palabra inicia con T
70 estado=12;
71 break;
72 case 'u'://Si la palabra inicia con U
73 estado=13;
74 break;
75 case 'v'://Si la palabra inicia con V
76 estado=14;
77 break;
78 case 'w'://Si la palabra inicia con W
79 estado=15;
80 break;
81 default:
82 estado=0;
83 break;
84 }
85 break;
86 case 1:
87 //printf("Estado 1");
88 switch(Palabra){
89 case 'u':
90 estado=16;
91 break;

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

282 //Estados Drrivados del estado 1


283 case 16:
284 //printf("Estado 16");
285 switch(Palabra){
286 case 't':
287 estado=17;
288 break;
289 default:
290 estado=0;
291 break;
292 }
293 break;
294 case 17:
295 //printf("Estado 17");
296 switch(Palabra){
297 case 'o':
298 estado=18;
299 break;
300 default:
301 estado=0;
302 break;
303 }
304 break;
305 case 18:
306 //-AUTO-
307 //printf("Estado 18");
308 switch(Palabra){
309 case ' ':
310 case '(':
311 case '\n':
312 color(3);
313 printf("\n Palabra Reconocida: AUTO Li
314 fprintf(archivo2, "En linea: %-5d Pal
315 color(7);
316 totalPR++;
317 estado=0;
318 break;
319 default:
320 estado=0;
321 break;
322 }
323

324 break;
325 //Estados derivados del estado 2
326 case 19:

25
ESCOM - IPN

327 //printf("Estado 19");


328 switch(Palabra){
329 case 'e':
330 estado=20;
331 break;
332 default:
333 estado=0;
334 break;
335 }
336 break;
337 case 20:
338 //printf("Estado 20");
339 switch(Palabra){
340 case 'a':
341 estado=21;
342 break;
343 default:
344 estado=0;
345 break;
346 }
347 break;
348 case 21:
349 //printf("Estado 21");
350 switch(Palabra){
351 case 'k':
352 estado=22;
353 break;
354 default:
355 estado=0;
356 break;
357 }
358 break;
359 case 22:
360 //-BREAK-
361 //printf("Estado 22");
362 switch(Palabra){
363 case ' ':
364 case '\n':
365 case ';':
366 color(3);
367 printf("\n Palabra Reconocida: BREAK
368 fprintf(archivo2, "En linea: %-5d Pal
369 color(7);
370 totalPR++;
371 estado=0;
372 default:
373 estado=0;

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

562 case ' ':


563 case '\n':
564 color(3);
565 printf("\n Palabra Reconocida: CHAR
566 fprintf(archivo2, "En linea: %-5d Pal
567 color(7);
568 totalPR++;
569 estado=0;
570 break;
571 default:
572 estado=0;
573 break;
574 }
575 break;
576 case 38:
577 //printf("Estado 38");
578 switch(Palabra){
579 case 'u':
580 estado=39;
581 break;
582 case ' ':
583 case '\n':
584 case '{':
585 //-DO-
586 color(3);
587 printf("\n Palabra Reconocida: DO
588 fprintf(archivo2, "En linea: %-5d Pal
589 color(7);
590 totalPR++;
591 estado=0;
592 break;
593 default:
594 estado=0;
595 break;
596 }
597 break;
598 case 39:
599 //printf("Estado 39");
600 switch(Palabra){
601 case 'b':
602 estado=40;
603 break;
604 default:
605 estado=0;
606 break;
607 }
608 break;

31
ESCOM - IPN

609 case 40:


610 //printf("Estado 40");
611 switch(Palabra){
612 case 'l':
613 estado=41;
614 break;
615 default:
616 estado=0;
617 break;
618 }
619 break;
620 case 41:
621 //printf("Estado 41");
622 switch(Palabra){
623 case 'e':
624 estado=42;
625 break;
626 default:
627 estado=0;
628 break;
629 }
630 break;
631 case 42:
632 //-DOUBLE-
633 //printf("Estado 42");
634 switch(Palabra){
635 case ' ':
636 case '\n':
637 color(3);
638 printf("\n Palabra Reconocida: DOUBLE
639 fprintf(archivo2, "En linea: %-5d Pal
640 color(7);
641 totalPR++;
642 estado=0;
643 break;
644 default:
645 estado=0;
646 break;
647 }
648

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

891 //printf("Estado 62");


892 switch(Palabra){
893 case 't':
894 estado=63;
895 break;
896 default:
897 estado=0;
898 break;
899 }
900 break;
901 case 63:
902 //-FLOAT-
903 //printf("Estado 63");
904 switch(Palabra){
905 case ' ':
906 case '\n':
907 color(3);
908 printf("\n Palabra Reconocida: FLOAT
909 fprintf(archivo2, "En linea: %-5d Pal
910 color(7);
911 totalPR++;
912 estado=0;
913 break;
914 default:
915 estado=0;
916 break;
917 }
918 break;
919 case 64:
920 //printf("Estado 64");
921 switch(Palabra){
922 case 'r':
923 estado=65;
924 break;
925 default:
926 estado=0;
927 break;
928 }
929 break;
930 case 65:
931 //-FOR-
932 //printf("Estado 65");
933 switch(Palabra){
934 case ' ':
935 case '\n':
936 case '{':
937 case '(':

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

1220 //Estados derivados de 11


1221 case 86:
1222 //printf("Estado 86");
1223 switch(Palabra){
1224 case 'o':
1225 estado=87;
1226 break;
1227 default:
1228 estado=0;
1229 break;
1230 }
1231 break;
1232 case 87:
1233 //printf("Estado 87");
1234 switch(Palabra){
1235 case 'r':
1236 estado=88;
1237 break;
1238 default:
1239 estado=0;
1240 break;
1241 }
1242 break;
1243 case 88:
1244 //printf("Estado 88");
1245 switch(Palabra){
1246 case 't':
1247 estado=89;
1248 break;
1249 default:
1250 estado=0;
1251 break;
1252 }
1253 break;
1254 case 89:
1255 //-SHORT-
1256 //printf("Estado 89");
1257 switch(Palabra){
1258 case ' ':
1259 case '\n':
1260 color(3);
1261 printf("\n Palabra Reconocida: SHORT
1262 fprintf(archivo2, "En linea: %-5d Pal
1263 color(7);
1264 totalPR++;
1265 estado=0;
1266 break;

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

1502 case '\n':


1503 case '{':
1504 case '(':
1505 color(3);
1506 printf("\n Palabra Reconocida: SWITCH
1507 fprintf(archivo2, "En linea: %-5d Pal
1508 color(7);
1509 totalPR++;
1510 estado=0;
1511 break;
1512 default:
1513 estado=0;
1514 break;
1515 }
1516 break;
1517 case 109:
1518 //printf("Estado 109");
1519 switch(Palabra){
1520 case 'u':
1521 estado=110;
1522 break;
1523 default:
1524 estado=0;
1525 break;
1526 }
1527 break;
1528 case 110:
1529 //printf("Estado 110");
1530 switch(Palabra){
1531 case 'c':
1532 estado=111;
1533 break;
1534 default:
1535 estado=0;
1536 break;
1537 }
1538 break;
1539 case 111:
1540 //printf("Estado 111");
1541 switch(Palabra){
1542 case 't':
1543 estado=112;
1544 break;
1545 default:
1546 estado=0;
1547 break;
1548 }

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

1643 //Estados derivados del estado 13


1644 case 119:
1645 //printf("Estado 119");
1646 switch(Palabra){
1647 case 's':
1648 estado=120;
1649 break;
1650 case 'i':
1651 estado=126;
1652 break;
1653 default:
1654 estado=0;
1655 break;
1656 }
1657 break;
1658 case 120:
1659 //printf("Estado 120");
1660 switch(Palabra){
1661 case 'i':
1662 estado=121;
1663 break;
1664 default:
1665 estado=0;
1666 break;
1667 }
1668 break;
1669 case 121:
1670 //printf("Estado 121");
1671 switch(Palabra){
1672 case 'g':
1673 estado=122;
1674 break;
1675 default:
1676 estado=0;
1677 break;
1678 }
1679 break;
1680 case 122:
1681 //printf("Estado 122");
1682 switch(Palabra){
1683 case 'n':
1684 estado=123;
1685 break;
1686 default:
1687 estado=0;
1688 break;
1689 }

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

1878 case '(':


1879 case '\n':
1880 color(3);
1881 printf("\n Palabra Reconocida: VOLATILE
1882 fprintf(archivo2, "En linea: %-5d Pal
1883 color(7);
1884 totalPR++;
1885 estado=0;
1886 break;
1887 default:
1888 estado=0;
1889 break;
1890 }
1891 break;
1892 //Estados derivados del estado 15
1893 case 138:
1894 //printf("Estado 138");
1895 switch(Palabra){
1896 case 'i':
1897 estado=139;
1898 break;
1899 default:
1900 estado=0;
1901 break;
1902 }
1903 break;
1904 case 139:
1905 //printf("Estado 139");
1906 switch(Palabra){
1907 case 'l':
1908 estado=140;
1909 break;
1910 default:
1911 estado=0;
1912 break;
1913 }
1914 break;
1915 case 140:
1916 //printf("Estado 140");
1917 switch(Palabra){
1918 case 'e':
1919 estado=141;
1920 break;
1921 default:
1922 estado=0;
1923 break;
1924 }

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

1962 int color(int c){


1963 HANDLE Colorear = GetStdHandle (STD_OUTPUT_HANDLE);
1964 SetConsoleTextAttribute (Colorear, c);
1965 }

60

También podría gustarte