Descargar

Uso del código generado en SP-PS1 para una aplicación Windows C# que efectúe un análisis léxico. (página 2)

Enviado por FRANCISCO RIOS ACOSTA


Partes: 1, 2
,3 y 4). PASO 6.- Selección de autómatas y ensamble del analizador léxico que reconoce a los tokens Id y OpAsig. • Cierra las ventanas abiertas menos la principal de SP-PS1. Selecciona el menú Analisis lexico | Construccion de analizadores lexicos, y verás la interfase de la fig#1.10. Fig. No. 1.10 Selección de autómatas para el analizador léxico a construir.

edu.red

Uso del código generado en SP-PS1 para una aplicación Windows C# que efectúe un análisis léxico. Ing. Francisco Ríos Acosta Instituto Tecnológico de la Laguna, a 17 de diciembre del 2007. pag. 9 de 16 •

• De la ventana AUTOMATAS selecciona los autómatas Id.bmp y OpAsig.bmp. Agregalos con el botón “Añadir en :” al analizador léxico. La ventana ANALIZADOR LEXICO contiene ahora a los dos autómatas sleccionados, fig#1.11. •

• Fig. No. 1.11 Autómatas Id y OpAsig listos para el registro del ensamble del analizador léxico.

A este instante, estamos listos para ensamblar el analizador léxico. Por ensamble, entendemos que los autómatas seleccionados y su orden, formarán un analizador léxico que reconocerá sólo al lenguaje de los tokens añadidos. Haz click en el botón con la imagen de una llave amarilla y contesta que sí, a la ventana que pregunta por la confirmación del ensamble, fig#1.12. Fig. No. 1.12 Pregunta por la confirmación del ensamble de autómatas seleccionados.

edu.red

Uso del código generado en SP-PS1 para una aplicación Windows C# que efectúe un análisis léxico. Ing. Francisco Ríos Acosta Instituto Tecnológico de la Laguna, a 17 de diciembre del 2007. pag. 10 de 16 PASO 7.- Configuración del Retraer() en AFD’s. •

• En el caso del autómata para el token Id, se requiere de retraer el puntero al caracter i-ésimo menos 1. Esto sucede cuando es necesario leer otro caracter que no forma parte del lexema respecto al token que se reconoce. SP-PS1 permite configurar el caso cuando un autómata requiera de la función Retraer(). Seleccionemos la opción Configurar y hagamos doble click para configurar el Retraer() para el autómata Id, fig#1.13. PASO 8.- Fig. No. 1.13 Configuración del Retraer() para un cierto autómata.

Generación de código C# para el analizador léxico que reconoce los tokens Id y OpAsig. • Una vez que hicimos las inicializaciones de rigor, podemos obtener el código C# para las 2 clases que propongo. El libro del drágón contiene toda la teoría acerca de un análisis léxico. Mi propuesta de clases se soporta sobre lo escrito en el libro del dragón acerca del tema.

edu.red

Uso del código generado en SP-PS1 para una aplicación Windows C# que efectúe un análisis léxico. Ing. Francisco Ríos Acosta Instituto Tecnológico de la Laguna, a 17 de diciembre del 2007. pag. 11 de 16 •

• Precisamente la generación de código C# por parte del programa SP-PS1, consiste de 2 clases : class Automata y class Lexico. Hagamos un click sobre la pestaña Codigo C# y luego otro click pero ahora sobre el botón que genera el código –imagen de lápiz-. La salida es el código en las 2 ventanas : una para la clase Automata y otra para la clase Lexico, figura #1.14. Fig. No. 1.14 Generación del código C# para las clases Automata y Lexico, referente al analizador léxico para reconocer los tokens Id y OpAsig.

CLASE AUTOMATA /————————————— // clase Automata //————————————— class Automata { string _textoIma; int _edoAct;

char SigCar(ref int i) { if (i == _textoIma.Length) { i++; return ''; } else return _textoIma[i++]; }

public bool Reconoce(string texto,int iniToken,ref int i,int noAuto) { char c; _textoIma = texto; string lenguaje; switch (noAuto) { //————– Automata Id————– case 0 : _edoAct = 0; break; //————– Automata OpAsig————– case 1 : _edoAct = 3; break; } while(i=0) { i=iniToken; return false; } break; case 1 : c=SigCar(ref i); if ((lenguaje="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz").IndexOf(c)>=0) _edoAct=1; else

_edoAct=1; else if ((lenguaje="0123456789").IndexOf(c)>=0) _edoAct=1; else if ((lenguaje="_").IndexOf(c)>=0) _edoAct=1; else ‘’“”•–— if ((lenguaje=" !"#$%&'()*+,-./:;?@[/]^`{|}~ € ‚ƒ„…†‡ˆ‰Š‹Œ Ž ˜™š›œ žŸ ¡¢£¤¥¦§¨©ª«¬-®¯°±²³´µ¶·¸¹º»¼½¾¿ntrf").IndexOf(c)>=0) _edoAct=2; else { i=iniToken; return false; } break; case 2 : i–; return true; break; //————– Automata OpAsig————– case 3 : c=SigCar(ref i); _edoAct=4; else if ((lenguaje="=").IndexOf(c)>=0) { i=iniToken; return false; } break; case 4 : return true; break; } switch (_edoAct) { case 2 : // Autómata Id –i; return true; } return false; }

} // fin de la clase Automata

CLASE LEXICO. //————————————— // clase Lexico //————————————— //————————— class Lexico { const int TOKREC = 2; const int MAXTOKENS = 500; string[] _lexemas; string[] _tokens; string _lexema; int _noTokens; int _i; int _iniToken; Automata oAFD;

public Lexico() // constructor por defecto { _lexemas = new string[MAXTOKENS]; _tokens = new string[MAXTOKENS]; oAFD = new Automata(); _i = 0; _iniToken = 0; _noTokens = 0; }

public void Inicia() { _i = 0;

edu.red

Uso del código generado en SP-PS1 para una aplicación Windows C# que efectúe un análisis léxico. Instituto Tecnológico de la Laguna, a 17 de diciembre del 2007. pag. 13 de 16 Ing. Francisco Ríos Acosta _iniToken = 0; _noTokens = 0; }

public void Analiza(string texto) { bool recAuto; int noAuto; while (_i < texto.Length) { recAuto=false; noAuto=0; for(;noAuto

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente