Practica Su 2
Short Description
Download Practica Su 2...
Description
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
INGENIERIA EN SISTEMAS COMPUTACIONALES
MANUAL DE PRÁCTICAS DE LA MATERIA DE:
Lenguajes y autómatas dos
ELABORADO POR: Francisco de jesus sayas cosme Gilberto Xolot Pio Marcos Hernández Martínez Gustavo de Jesus González Nava
FECHA DE ENTREGA: 30 de septiembre de 2013
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
SAN ANDRÉS TUXTLA, VER., SEPTIEMBRE DE 2013
PROGRAMACION DE SISTEMAS
ASIGNATURA: PRÁCTICA NO.1
NOMBRE DE LA PRÁCTICA: Metacompilador Jflex El alumno se relacionara con el metacompilador jflex, aprenderá a interactuar con java y generara
OBJETIVO:
analizadores léxicos. FUNDAMENTO TEORICO JFLEX es una herramienta JAVA que permite actuar sobre aquellas cadenas de un fichero de texto que encajan en una expresión regular. El formato de un programa en jflex es similar al ejemplo siguiente:
Zona de código de usuario: Reservada para incluir las instrucciones import /* Código incluido fuera de la clase a generar */ %% Zona de opciones y declaraciones: Las opciones comienzan con un % al inicio de línea %class Lexer/* Se generara un fichero Lexer.java que incluirá la clase Lexer*/ %standalone /* La clase Diego incluirá la función main Esta función recibirá como argumento el fichero de texto a analizar */ %% Zona de reglas léxicas: Incluyen las expresiones junto con sus acciones /* Cambia en un texto digo por Diego */ "digo" { System.out.print("Diego"); } Para ejecutar se necesita realizar los siguientes pasos:
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 1
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
MATERIAL/EQUIPO Computadora Java Jflex Manual de Practicas de la materia
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 2
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
METODOLOGIA Y DESARROLLO 1. Teclear el ejemplo anterior en el bloc de notas y guardarlo como diego.flex. Checar que no se guarde con el formato del bloc de notas (txt) al guardar poner todos los archivos y teclear el nombre con la extensión. Guardar el en el bin del jflex 2. Compilar en línea mediante la instrucción en la carpeta del //jflex//bin jflez diego.flex 3. Se generara un archivo llamado Lexer.java si se compila correctamente 4. Abrir el archivo generado en java y compilar en java 5. Crear un archivo de entrada como nombre entrada.txt que tenga lo siguiente: Donde dije digo, digo Diego 6.- Al compilar en java generara el ejecutable .class 7.- Ejecutar el java lexer entrada.txt 8.- La salida debe corresponder con la siguiente instrucción: Donde dije Diego,Diego Diego
CUESTIONARIO
Realizar los siguientes analizadores léxicos:
a) (BinarioPar)Escriba un analizador léxico que sustituya las apariciones de un número par escrito en notación binaria por la cadena "BINARIO_PAR“.Se tiene que crear un archivo de entrada que
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 3
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
contenga solo números binarios y la salida tiene que imprimir en pantalla si es numero par o impar. Ejemplo de entrada: 1000 10001 1000111 Salida: PAR IMPAR IMPAR b) (Ca_sa)Escriba un analizador léxico que sustituya las cadenas casa, camisa y carcasa que figuran en un texto por la cadena "CA_SA". se tiene que crear un achivo de entrada que contenga las palabras casa, camisa y carcasa, se pueden repetir tantas veces se quiera; pero cuando aparezcan estas palabras debe mandar a imprimir a pantalla Ca_sa. Por ejemplo: Casa hola carcasa camisa Salida: Ca_sa Ca_sa Ca_sa c) (Blancos)Escriba un analizador léxico que reduzca a un único espacio en blanco todas las secuencias de espacios en blanco y tabuladores de un texto. debe leer un archivo de secuencias de palabras con espacios y tabuladores y como salida si entre palabra y palabra hay más de un espacio debe reducir la salida a un solo espacio. Ejemplo: Entrada: Eneida Yazmin Honorato Salida: Eneida Yazmin Honorato
d) (ComentarioLinea)Escriba un analizador léxico que suprima los comentarios de línea de un texto (desde un # hasta el fin de la línea). Ejemplo de entrada: Este es un ejemplo #este es un comentario Casa #ejemplo Otro #ejemplo Salida: Este es un ejemplo Casa RESULTADOS Practica 1: %% %class ejemfle %standalone num=[0-9]+ palabra=[A-Z|a-z]+ %%
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 4
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
"digo" |"DIGO" {System.out.println("Diego");} "house" {System.out.println("casa");} "bed" {System.out.println("cama");} "if" {System.out.println("si");} "lupo" {System.out.println("bolbasour");} {num} {System.out.println("es un número");} {palabra} {System.out.println("reconocio una palabra");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 5
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
a)Binario_par %% %class impar %standalone par=[1|0]+0 impar=[1|0]+1 %% {par} {System.out.println("es un binario par");} {impar} {System.out.println("es un binario impar");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 6
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
PROGRAMACION DE SISTEMAS [Escriba texto]
CODIGO: SCC - 0426 REVISION: 0
Página 7
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
b) Ca_sa %% %class casa %standalone %% casa {System.out.println("Ca_sa");} camisa {System.out.println("Ca_sa");} carcasa {System.out.println("Ca_sa");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 8
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
c) Blancos %% %class Espacio %standalone Blanco = [ \t\f]+ %% {Blanco} {System.out.print(" ");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 9
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
d)comentario_linea %% %class comentariolinea
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 10
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
%standalone Gato = [#]+[A-Z|a-z]+ %% {Gato} {;}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 11
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
Se espera que el alumno aprenda a compilar los archivos en jflex y permita realizar depuraciones tanto en jflex como en java. Así como la realización de diferentes analizadores léxicos que permitan tener una noción para iniciar la fase léxica de su proyecto.
NOTAS Y SUGERENCIAS Cualquier duda preguntar al docente.
BIBLIOGRAFIA Compiladores. Alfred V. Aho Editorial. Limusa Java a tope. Compiladores. Traductores y compiladores con Lex, Yacc, Jflex,cup y javacc. Sergio Gálvez Rojas. Miguel Ángel Mora Mata. Versión Electrónica, DEPÓSITO LEGAL: MA-1852005
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 12
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
PROGRAMACION DE SISTEMAS
ASIGNATURA: PRÁCTICA NO. 2
NOMBRE DE LA PRÁCTICA: METODOS PUBLICOS Y CONJUNTOS EN JFLEX. El alumno aprenderá el uso de métodos establecidos en jflex para la detección de patrones (lexemas) y la utilización de patrones en conjunto para simplificar código.
OBJETIVO:
FUNDAMENTO TEORICO String yytext() devuelve la cadena que encajó en el patrón char yycharat(int i) devuelve el i ésimo carácter de la cadena que encajó int yylength() devuelve la longitud de la cadena que encajó/* El patrón conjunto (operador []) representa un carácter de los incluidos entre los corchetes (se admiten rangos de caracteres usando el símbolo guión). Si el primer carácter del conjunto es el ángulo, entonces el patrón representa cualquier carácter no incluido en el conjunto [aeiou] representa una de las vocales [^A-Za-z0-9] representa un carácter no alfanumérico MATERIAL/EQUIPO Computadora Java Jflex Manual de Practicas de la materia METODOLOGIA Y DESARROLLO
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 13
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
1.- TECLEAR EL SIGUIENTE PROGRAMA /* Imprime el ultimo bit de cada número binario */ %% %class UltimoBit %standalone % (0|1)+ { int ultimo=yylength()-1; System.out.print("[Binario "+yytext());System.out.print(" Ultimo Bit: "+yycharat(ultimo)+"]");} 2.- Compilar siguiendo el mismo procedimiento de las practica anterior 3.- El archivo de entrada tendrá números binarios 4.- Verificar la salida. 5.-Compilar siguiendo el mismo procedimiento utilizado en la práctica anterior. 6.- Verificar el funcionamiento de los métodos yylength y yycharat asi como el formato Realizar los siguientes analizadores léxicos (Asteriscos)Escriba un analizador léxico que inserte un * delante y detrás de cada carácter + que figura en un texto (Puntos)Escriba un analizador léxico que enmarca entre corchetes el carácter que precede a cada uno de los puntos que figuran en un texto. (DiaSemana)Escriba un analizador léxico que sustituya las apariciones de un número de la semana (de 1 a 7) por su correspondiente nombre de día.
(Operador)Escriba un analizador léxico que sustituya los operadores de suma +, resta -, producto * y división / y potencia ^ por la cadena "OPERADOR“. (Hexadecimal)Escriba un analizador léxico que sustituya las apariciones de un número escrito en base hexadecimal por la cadena "HEXADECIMAL". (A_Mayusculas)Escriba en mayúsculas todas las palabras de un texto que comienzan por mayúsculas. (Considere que una palabra es una secuencia constituida por letras minúsculas o mayúsculas). (Cadenas)Escriba un analizador léxico que sustituya todas las cadenas de un texto por el contenido de la cadena sin las comillas (Por ejemplo: "hola" sería sustituido por hola). Se define como cadena cualquier texto enmarcado entre comillas dobles con la condición de que en su contenido no figuran ni comillas dobles ni saltos de línea.
RESULTADOS
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 14
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
a) UltimoBit
/* Imprime el ultimo bit de cada número binario */ %% %class UltimoBit %standalone %% (0|1)+
{int ultimo=yylength()-1; System.out.println("El numero Binario: "+yytext()); System.out.println("El Ultimo Bit es: "+yycharat(ultimo));}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 15
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
b)asterisco /* Imprime despues*/ %% %class asterisco %standalone %% ("+")+ {int Primero=yylength()-1;System.out.print("*"+yycharat(Primero)+"*");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 16
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
PROGRAMACION DE SISTEMAS [Escriba texto]
CODIGO: SCC - 0426 REVISION: 0
Página 17
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
c)punto /* Imprime despues*/ %% %class Corche %standalone %% (".")+ {int Primero=yylength();} System.out.print(yytext()+"["+yycharat(Primero)+"]"); }
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 18
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
d) DiaSemana /* Imprime el ultimo bit de cada número binario */ %% %class DS %standalone %% "1" {System.out.println("Domingo");} "2" {System.out.println("Lunes");} "3" {System.out.println("Martes");} "4" {System.out.println("Miercoles");} "5" {System.out.println("Jueves");} "6" {System.out.println("Viernes");} "7" {System.out.println("sabado");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 19
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
e)operador /* Imprime el ultimo bit de cada número binario */ %% %class operador
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 20
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
%standalone Salto = \r|\n|\r\n Blanco = [ \t\f] %% {Blanco}+ {;} {Salto} {;} "+" {System.out.println("OPERADOR");} "-" {System.out.println("OPERADOR");} "/" {System.out.println("OPERADOR");} "*" {System.out.println("OPERADOR");} "^" {System.out.println("OPERADOR");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 21
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
f) A_Mayusculas /*(A_Mayusculas)Escriba en mayúsculas todas las palabras de Un texto que comienzan por mayúsculas. (Considere que una palabra es una secuencia constituida por letras minúsculas o mayúsculas).*/ %% %class Mayus %standalone BLANCO=[ |\r|\n|\t|\f] Palabra = [a-zA-Z]+ Mayuscula= [A-Z]+ PalMay={Mayuscula}{Palabra} %% {BLANCO}+ {;} {PalMay} {System.out.println("MAYUSCULA");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 22
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
g) cadenas /* Imprime el ultimo bit de cada número binario */ %% %class cadenas
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 23
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
%standalone Salto = \r|\n|\r\n Blanco = [ |\t|\f] CADENA= \" PALABRA= ([a-zA-Z]|[0-9])* COMPUESTO= {CADENA}{PALABRA}{CADENA} %% {Blanco}+ {;} {Salto} {;} {CADENA} {System.out.println(" ");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 24
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
Los resultados que se esperan es que en cada archivo generen salidas que el analizador indica
CUESTIONARIO
NOTAS Y SUGERENCIAS Por esta descuidado tuve un error de dedo, por lo tanto proseguí a corregir para este se ejectara correctamente
Cualquier duda preguntar al docente BIBLIOGRAFIA
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 25
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
Compiladores. Alfred V. Aho Editorial. Limusa Java a tope. Compiladores. Traductores y compiladores con Lex, Yacc, Jflex,cup y javacc. Sergio Gálvez Rojas. Miguel Ángel Mora Mata. Versión Electrónica, DEPÓSITO LEGAL: MA-1852005
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 26
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
ASIGNATURA: PROGRAMACION DE SISTEMAS
NOMBRE DEL ALUMNO(A):
PRÁCTICA NO. 3
NOMBRE DE LA PRÁCTICA: MACROS, ANALISIS DE VARIOS PATRONES
OBJETIVO:
Aplicar macros y definir patrones para la utilización de expresiones regulares
FUNDAMENTO TEORICO Una macro asocia un identificador a una expreg. Su utilidad es doble, por un lado se favorece la reutilización, y por otra se aumenta la legibilidad del analizador léxico Las macros son declaraciones no recursivas que se incluyen en la zona de declaraciones y opciones. Digito = [0-9] Para expandir la macro se encierre el nombre de la macro entre llaves. {Digito} TECLEA EL SIGUIENTE EJEMPLO: /* Identifica enteros y palabras de un texto*/ %% %class Lexer %standalone Blanco = [\r\n \t\f] Entero = ("+"|"-")?[0-9]+ Palabra = [a-zA-Z]+ %% {Blanco}+ {} {Entero} {System.out.print("INT: "+yytext()+"\n");} {Palabra} {System.out.print("WORD: "+yytext()+"\n");} . {System.out.print("OTHER: "+yytext()+"\n");} Compilar y probar la identificación de números y palabras Teclear el siguiente ejemplo: /* Muestra los identificadores de un texto */ %% %class Lexer %standalone Digito = [0-9]
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 27
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
Letra = [a-zA-Z] Identificador= {Letra}({Letra}|{Digito})* %% {Identificador} {System.out.print("IDENT");} Compilar y verificar la manera en que detectan los identificadores de un archivo de texto. MATERIAL/EQUIPO Computadora Java Jflex Manual de Practicas de la materia METODOLOGIA Y DESARROLLO
Probar los ejemplos anteriores utilizando la metodología de compilación de las anteriores practicas
RESULTADOS ESPERADOS Práctica 3:
/* Identifica enteros y palabras de un texto*/ %% %class macro %standalone BLANCO=[ |\r|\n|\t|\f] ENTERO = ("+"|"-")?[0-9]+ PALABRA = [a-zA-Z]+ %% {BLANCO}+ {;} {ENTERO} {System.out.print("INT: "+yytext()+"\n");} {PALABRA} {System.out.print("WORD: "+yytext()+"\n");} . {System.out.print("OTHER: "+yytext()+"\n");} PROGRAMACION DE SISTEMAS [Escriba texto]
Página 28
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
PROGRAMACION DE SISTEMAS [Escriba texto]
CODIGO: SCC - 0426 REVISION: 0
Página 29
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
a) Real /*Escriba un analizador léxico que sustituya las apariciones de número reales en notación científica por la cadena "REAL". Se admiten como cadenas (lexemas): -3.4 .4 3.E10 .6e2 No se admiten las siguientes: 45 4.6E */ %% %class numreales %standalone BLANCO=[ |\r|\n|\t|\f] Numero = ("-")?[0-9]+([0.0-0.9])* Exponencial = ["e|E"]+(("-")?[0-9])+ REAL={Numero}{Exponencial}* %% {BLANCO}+ {;} {REAL} {System.out.println("Numero Real");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 30
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
b) Horas /*(Horas.flex)Escriba un analizador léxico que sustituya las expresiones horarias que encajan o bien con el patrón HH:MM o bien con el patrón H:MM por la cadena "HORA". Tenga en cuenta que las horas deben ser correctas. Por ejemplo: 29:80 no sería una hora correcta.*/ %% %class Horas %standalone BLANCO=[ |\r|\n|\t|\f] Horas = [0-23]+ Minutos = [0-60]+ Dospuntos= ":" HORA={Horas}{Dospuntos}{Minutos} %% {BLANCO}+ {;} {HORA} {System.out.println("HORA");} PROGRAMACION DE SISTEMAS [Escriba texto]
Página 31
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
PROGRAMACION DE SISTEMAS [Escriba texto]
CODIGO: SCC - 0426 REVISION: 0
Página 32
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
c) May_min /*(May_Min.flex) Sustituye las palabras de un texto que empiezan por minúsculas por la cadena MINUSCULA y las palabras que empiecen por mayúsculas por la cadena MAYUSCULA.*/ %% %class Maymin %standalone BLANCO=[ |\r|\n|\t|\f] Minuscula = [a-z]+ Palabra = [a-zA-Z]+ Mayuscula= [A-Z]+ PalMin={Minuscula}{Palabra} PalMay={Mayuscula}{Palabra} %% {BLANCO}+ {;} {PalMin} {System.out.println("MINUSCULA");} {PalMay} {System.out.println("MAYUSCULA");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 33
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
d) Fechas /*(Fechas.flex)Para representar fechas existen dos formatos: el americano (AAAA/DD/MM) y el europeo (DD/MM/AAAA). Escriba un analizador léxico que imprima todas las fechas de un texto que se ajusten a uno de dichos formatos indicando además qué formato fue usado (Ignore la problemática relacionada con los años bisiestos). */ %% %class Fechas %standalone BLANCO=[ |\r|\n|\t|\f] Años = [0-9]+ Meses = [1-12] Dias = [1-31] D = ["/"]* americano = {Años}{D}{Dias}{D}{Meses} europeo = {Dias}{D}{Meses}{D}{Años} %% {BLANCO}+ {;} {americano} {System.out.println("formato americano: "+yytext());} {europeo} {System.out.println("formato europeo: "+ yytext());}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 34
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
PROGRAMACION DE SISTEMAS [Escriba texto]
CODIGO: SCC - 0426 REVISION: 0
Página 35
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
CUESTIONARIO Realizar lo siguiente utilizando macros:
(Real.flex)Escriba un analizador léxico que sustituya las apariciones de número reales en notación científica por la cadena "REAL". Se admiten como cadenas (lexemas): -3.4 .4 3.E10 .6e-2 No se admiten las siguientes: 45 4.6E .
(Horas.flex)Escriba un analizador léxico que sustituya las expresiones horarias que encajan o bien con el patrón HH:MM o bien con el patrón H:MM por la cadena "HORA". Tenga en cuenta que las horas deben ser correctas. Por ejemplo: 29:80 no sería una hora correcta. Utiliza el análisis de varios patrones para realizar los siguientes analizadores: (May_Min.flex) Sustituye las palabras de un texto que empiezan por minúsculas por la cadena
MINUSCULA y las palabras que empiecen por mayúsculas por la cadena MAYUSCULA.
(Fechas.flex)Para representar fechas existen dos formatos: el americano (AAAA/DD/MM) y el europeo (DD/MM/AAAA). Escriba un analizador léxico que imprima todas las fechas de un texto que se ajusten a uno de dichos formatos indicando además qué formato fue usado (Ignore la problemática relacionada con los años bisiestos).
NOTAS Y SUGERENCIAS Cualquier duda preguntar al docente
BIBLIOGRAFIA Compiladores. Alfred V. Aho Editorial. Limusa Java a tope. Compiladores. Traductores y compiladores con Lex, Yacc, Jflex,cup y
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 36
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
javacc. Sergio Gálvez Rojas. Miguel Ángel Mora Mata. Versión Electrónica, DEPÓSITO LEGAL: MA-185-2005
ASIGNATURA: PRÁCTICA NO.4
OBJETIVO:
PROGRAMACION DE SISTEMAS NOMBRE DE LA PRÁCTICA: AMBIGUEDAD
Conocer, identificar y eliminar la ambigüedad en jflex
FUNDAMENTO TEORICO El orden de las reglas léxicas es relevante cuando los patrones son ambiguos. Dos patrones son ambiguos si existe una cadena que encaja en ambos.
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 37
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
1.El analizador lee la entrada hasta encontrar la cadena más larga que encaje con algún patrón. 2.En caso de empate se escoge la regla léxica escrita en primer lugar /* Patrones ambiguos */ %% %class Lexer %standalone Blanco = [\r\n \t\f] %% {Blanco}+ {} a|b {System.out.print("P1 ");} (ab)* {System.out.print("P2 ");} (a|b)* {System.out.print("P3 ");} . {System.out.print("PP ");} ¿Cuál es la salida del analizador para las entradas "a", "aaaa", "abab" y "ababb"?
OTRO EJEMPLO
/* Identifica los número en base 3 y 2. Prioridad a la base 3*/ %% %class Lexer %standalone Blanco = [\r\n \t\f] %% {Blanco}+ {;} [012]+ {System.out.print("BASE 3\n");} [01]+ {System.out.print("BASE 2\n");}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 38
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
. {}
OTRO EJEMPLO MAS:
/* Identifica los número en base 2 y 3. Prioridad a la base 2 */ %% %class Lexer %standalone Blanco = [\r\n \t\f] %% {Blanco}+ {;} [01]+ {System.out.print("BASE 2\n");} [012]+ {System.out.print("BASE 3\n");} . {}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 39
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
MATERIAL/EQUIPO Computadora Java Jflex Manual de Practicas de la materia METODOLOGIA Y DESARROLLO
CUESTIONARIO (If_then_else.flex)Escriba un analizador léxico que sustituya cada identificador de un texto por la cadena IDENT salvo que el identificador sea una de las palabras reservadas: If, Then o Else. En este último caso deberá imprimirse respectivamente las cadenas IF, THEN y ELSE. Las anteriores palabras reservadas no son sensibles a la capitalización, es decir, podrán aparecer mezcladas arbitrariamente letras minúsculas y mayúsculas. Por ejemplo, para la palabra reservada Else se admiten también las formas ELSe o eLsE.
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 40
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
%% %class If %standalone Digito = [0-9] Letra = [a-zA-Z] Identificador= {Letra}({Letra}|{Digito})* IF=[I-i][F-f] THEN=[T-t][H-h][E-e][N-n] SEE=[E-e][L-l][S-s][E-e] %% {IF} {System.out.println("IF");} {THEN} {System.out.println("THEN");} {SEE} {System.out.println("ELSE");} {Identificador} {System.out.println("IDENT");}
(Numeros.flex)Escriba un analizador léxico que distinga entre los siguientes tipos de números: entero (INT) entero largo (LONG) y real (FLOAT). Los enteros largos son enteros terminados con una letra l mayúscula o minúscula. Los reales deben incluir de forma obligatoria parte entera y parte decimal separadas por un punto.
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 41
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
%% %class numeros %standalone BLANCO=[ |\r|\n|\t|\f] Num=[0-9]+ Largo= [L-l] p=["."] NumL={Num}{Largo} NumR={Num}{p}{Num} %% {BLANCO} {;} {Num} {System.out.println("INT/entero");} {NumL} {System.out.println("LONG/entero largo");} {NumR} {System.out.println("Float/real");}
NOTAS Y SUGERENCIAS
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 42
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
Preguntar al docente cualquier duda
BIBLIOGRAFIA Compiladores. Alfred V. Aho Editorial. Limusa Java a tope. Compiladores. Traductores y compiladores con Lex, Yacc, Jflex,cup y javacc. Sergio Gálvez Rojas. Miguel Ángel Mora Mata. Versión Electrónica, DEPÓSITO LEGAL: MA-185-2005
ASIGNATURA: PRÁCTICA NO. 5
OBJETIVO:
PROGRAMACION DE SISTEMAS NOMBRE DE LA PRÁCTICA: ANALISIS SINTACTICO El alumno realizara analizadores sintácticos para comprender el funcionamiento de esta fase del compilador FUNDAMENTO TEORICO
El análisis sintáctico consiste en identificar en un texto aquellas cadenas que se ajustan a (encajan en) unos conjuntos de reglas sintácticas, las cuales constituyen una gramática. CUP(Constructor of Useful Parsers) es una herramienta que, a partir de la especificación de
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 43
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
una gramática, es capaz de generar automáticamente un analizador sintáctico (o parser) en Java para dicha gramática. Un ejemplo...
Especificación del analizador sintáctico (entrada para CUP)... terminal NUM, IDENT; non terminal balanceados; balanceados ::= NUM balanceados IDENT|; Especificación del analizador léxico (entrada para JFlex) %% {BLANCO}+ {;} {SALTO} {;} {NUMERO} {return new Symbol(sym.NUM, newInteger(yytext()));} {IDENTIFICADOR} {return new Symbol(sym.IDENT, yytext());} Clase Java principal Import java.io.FileReader; public class Principal { Public static void main(String[] args) {try {FileReader f= newFileReader("entrada.txt"); Lexer anLexico= new Lexer(f); Parser anSintactico= new Parser(anLexico); Object resultado= anSintactico.parse().value; }catch(Exception e){...}}} Este analizador reconoce entradas tales como:51 20 1 pera coco piña25108 azul rojo 12 delfín Pero no:51 20 pera Estructura de una especificación para CUP Zona de declaraciones import y package import java_cup.runtime.Symbol; Zona de componentes de código de usuario: Permite que el usuario pueda personalizar el código del parser generado (p.e. cambiar el cuerpo de algunos métodos o incluir otros nuevos). Zona de declaración de símbolos terminales y no terminales terminal NUM, IDENT; non terminal balanceados;
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 44
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
Zona de declaraciones de precedencia y asociatividad: ayudan a resolver el análisis sintáctico en caso de que tengamos una gramática ambigua. /* Cero o más sentencias precedence (se estudiarán más adelante. */ Zona de la gramática: Contiene un conjunto de reglas (también llamadas producciones). La parte izquierda de cada regla debe ser un símbolo no terminal. La parte derecha de cada regla puede contener tanto terminales como no terminales, y puede tener asociada una acción (escrita en Java y enmarcada entre {: y :} ). El símbolo inicial se considera que es el no terminal de la parte izquierda de la primera regla, a menos que se indique uno explícitamente con la construcción start with no-terminal; en la zona de terminales y no terminales balanceados ::= NUM balanceados IDENT | ;
El analizador sintáctico llama al método next_token () del analizador léxico cada vez que necesita que se reconozca el siguiente token de la entrada
PROGRAMACION DE SISTEMAS [Escriba texto]
.
Página 45
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
La clase Symbol es también utilizada internamente por el analizador sintáctico para representar tanto los símbolos terminales (tokens) como los no terminales. Patrones sintácticos Patrones no recursivos: • Agregado. • Opción. Patrones recursivos: • Lista simple (es decir, no anidada) • Lista anidada Patrones no recursivos:
Patrón recursivo. Lista simple
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 46
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
Existen muchas variantes de la lista, como por ejemplo: • Con separadores y sin delimitadores: azul / verde / rojo • Sin separadores y con delimitadores: @ azul verde rojo @ • Con separadores y con delimitadores: @ azul / verde / rojo @ En cada caso se puede admitir la lista vacía o no. A continuación haremos algunos ejercicios de estos casos. Patrón recursivo: Lista Anidada Una lista anidada es aquella en la que alguno de sus elementos es a su vez una lista. Podemos tener combinaciones de los casos vistos antes. Por ejemplo: ( rojo [alto bajo] verde) 45 – 12 – 23 – @ a b c @ – 76 – @ x y z @ – 10
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 47
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
MATERIAL/EQUIPO Computadora Java Jflex Manual de Practicas de la materia METODOLOGIA Y DESARROLLO
(Block.flex)Escriba un analizador sintáctico que reconozca la siguiente gramática: Begin_Block End_Block Donde puede ser una de las siguientes opciones: a)Msg seguido de un número, dos identificadores y una cadena. b)Ack seguido de un numero y dos identificadores. c)Ready seguido de un identificador o de un número. d)Alarm seguido de un identificador y una cadena
(ListaNumeros.flex)Escriba un analizador sintáctico que reconozca listas (posiblemente vacías) formadas por números enteros (sin signo).
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 48
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
(Transmision.flex)Escriba un analizador sintáctico que reconozca registros de transmisiones en un determinado protocolo. Un registro comienza con la palabra clave Begin_Transmissiony finaliza con End_Transmission. Entre ambas aparece una lista no vacía de elementos Begin_Block... End_Block(véase el ejercicio Block.flex). (ListaMinusculas.flex)Escriba un analizador sintáctico que reconozca cualquier lista (posiblemente vacía) formada por letras minúsculas que pueden estar separadas tanto por el símbolo # como por el –. (Ticket.flex) Escriba un analizador sintáctico que reconozca cualquier ticket de compra. Un ticket está formado por líneas. Cada línea está formada por el nombre de un producto (entrecomillado) seguido del número de unidades compradas (número natural) y del importe parcial (en euros). Las líneas están separadas por retornos de carro. Nota: cualquier ticket tiene, al menos, un producto. (Rutas.flex)Escriba un analizador sintáctico que reconozca nombres de ficheros con sus rutas en DOS. Por ejemplo: C:\ejemplo\leeme.txt. Supóngase que los nombres de directorios y archivos constan de un identificador o de un identificador seguido de un punto y de otro identificador (que hace las veces de extensión). (LlamadaFuncion.flex)Escriba un analizador sintáctico que reconozca las llamadas simples a funciones en un lenguaje de programación. Una llamada tiene elformato:identificador ( parámetros )donde parámetroses una secuencia (posiblemente vacía) de números naturales e identificadores, separados por comas.
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 49
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
RESULTADOS ESPERADOS Block.flex import java_cup.runtime.Symbol; %% %class block %cupsym symblock %unicode %cup %line %column
Blanco = [ |\r|\n|\t|\f] NUM=([0-9])+ Letra= [a-zA-Z] IDENT = {Letra}({Letra}|{NUM})* CADENA = \"[a-z|A-Z]*\"
%%
"BEGIN_BLOCK" {return new Symbol (symblock.BEGIN_BLOCK,yyline+1,yycolumn+1,yytext());} "END_BLOCK" {return new Symbol (symblock.END_BLOCK,yyline+1,yycolumn+1,yytext());}
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 50
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
"msg" {return new Symbol (symblock.msg,yyline+1,yycolumn+1,yytext());} "ready" {return new Symbol(symblock.ready,yyline+1,yycolumn+1,yytext());} "ack" {return new Symbol(symblock.ack,yyline+1,yycolumn+1,yytext());} "alarm" {return new Symbol(symblock.alarm,yyline+1,yycolumn+1,yytext());}
{Blanco}+ {;} {NUM} {return new Symbol (symblock.NUM,yyline+1,yycolumn+1,new Integer (yytext()));} {IDENT} {return new Symbol(symblock.IDENT,yyline+1,yycolumn+1,yytext());} {CADENA} {return new Symbol(symblock.CADENA,yyline+1,yycolumn+1,yytext());}
. {System.out.println("ERROR LÉXICO: Carácter \""+yytext()+"\" no permitido.");} CUP:
terminal NUM, IDENT, CADENA,msg, ready, ack, alarm, BEGIN_BLOCK, END_BLOCK; non terminal cuerpo, inicio; inicio ::= BEGIN_BLOCK cuerpo END_BLOCK |; cuerpo ::= msg NUM IDENT IDENT CADENA |ready NUM |ready IDENT |ack NUM IDENT IDENT |alarm IDENT CADENA |;
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 51
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
PROGRAMACION DE SISTEMAS [Escriba texto]
CODIGO: SCC - 0426 REVISION: 0
Página 52
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
ListaNumeros.flex import java_cup.runtime.Symbol; %% %class numeros2 %cupsym symnumeros2 %unicode %cup %line %column Blanco = [ \t\f] /*Salto = \r|\n|\r\n */ NUM=([0-9])+ %% {Blanco}+ {;} {NUM} {return new Symbol (symnumeros2.NUM,yyline+1,yycolumn+1,new Integer (yytext()));} . {System.out.println("ERROR LÉXICO: Carácter \""+yytext()+"\" no permitido.");}
CUP: terminal NUM; non terminal NUMEROS; NUMEROS ::= NUM NUMEROS |;
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 53
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
Transmision.flex import java_cup.runtime.Symbol; %% %class cuerpo %cupsym symcuerpo PROGRAMACION DE SISTEMAS [Escriba texto]
Página 54
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
%unicode %cup %line %column Blanco = [ |\r|\n|\t|\f] NUM=([0-9])+ Letra= [a-zA-Z] IDENT = {Letra}({Letra}|{NUM})* CADENA = \"[a-z|A-Z]*\" %% "BEGIN_TRANSMITION" {return new Symbol (symcuerpo.BEGIN_TRANSMITION,yyline+1,yycolumn+1,yytext());} "END_TRANSMITION" {return new Symbol (symcuerpo.END_TRANSMITION,yyline+1,yycolumn+1,yytext());} "BEGIN_BLOCK" {return new Symbol (symcuerpo.BEGIN_BLOCK,yyline+1,yycolumn+1,yytext());} "END_BLOCK" {return new Symbol (symcuerpo.END_BLOCK,yyline+1,yycolumn+1,yytext());} "msg" {return new Symbol (symcuerpo.msg,yyline+1,yycolumn+1,yytext());} "ready" {return new Symbol(symcuerpo.ready,yyline+1,yycolumn+1,yytext());} "ack" {return new Symbol(symcuerpo.ack,yyline+1,yycolumn+1,yytext());} "alarm" {return new Symbol(symcuerpo.alarm,yyline+1,yycolumn+1,yytext());} {Blanco}+ {;} {NUM} {return new Symbol (symcuerpo.NUM,yyline+1,yycolumn+1,new Integer (yytext()));} {IDENT} {return new Symbol(symcuerpo.IDENT,yyline+1,yycolumn+1,yytext());} {CADENA} {return new Symbol(symcuerpo.CADENA,yyline+1,yycolumn+1,yytext());} . {System.out.println("ERROR LÉXICO: Carácter \""+yytext()+"\" no permitido.");} Cup: terminal NUM, IDENT, CADENA,msg, ready, ack, alarm, BEGIN_BLOCK, END_BLOCK, BEGIN_TRANSMITION, END_TRANSMITION; non terminal cuerpo, inicio,ini; ini::= BEGIN_TRANSMITION inicio END_TRANSMITION |; PROGRAMACION DE SISTEMAS [Escriba texto]
Página 55
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
inicio ::= BEGIN_BLOCK cuerpo END_BLOCK |; cuerpo ::= msg NUM IDENT IDENT CADENA cuerpo |ready NUM cuerpo |ready IDENT cuerpo |ack NUM IDENT IDENT cuerpo |alarm IDENT CADENA cuerpo |;
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 56
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
ListaMinusculas.flex import java_cup.runtime.Symbol; %% %class listaminuscula %cupsym symlistaminuscula %unicode %cup %line %column
Blanco = [ |\r|\n|\t|\f] LETRA=([a-zA-Z])+ %% {Blanco}+ {;} "-" {return new Symbol (symlistaminuscula.GI,yyline+1,yycolumn+1,yytext());} "#" {return new Symbol (symlistaminuscula.G,yyline+1,yycolumn+1,yytext());} {LETRA} {return new Symbol(symlistaminuscula.LETRA,yyline+1,yycolumn+1,yytext());} . {System.out.println("ERROR LÉXICO: Carácter \""+yytext()+"\" no permitido.");} CUP: terminal LETRA,GI,G;
non terminal lista; lista::= LETRA GI lista |LETRA G lista |LETRA G LETRA |LETRA GI LETRA |;
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 57
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
PROGRAMACION DE SISTEMAS [Escriba texto]
CODIGO: SCC - 0426 REVISION: 0
Página 58
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
Ticket.flex import java_cup.runtime.Symbol; %% %class ticket %cupsym symticket %unicode %cup %line %column Blanco = [ |\r|\n|\t|\f] NUM= [0-9]+ Letra= [a-zA-Z] IDENT = {Letra}({Letra}|{NUM})* %% "." {return new Symbol(symticket.ready,yyline+1,yycolumn+1,yytext());} {Blanco}+ {;} {NUM} {return new Symbol (symticket.NUM,yyline+1,yycolumn+1,new Integer (yytext()));} {IDENT} {return new Symbol(symticket.IDENT,yyline+1,yycolumn+1,yytext());} . {System.out.println("ERROR LÉXICO: Carácter \""+yytext()+"\" no permitido.");} CUP: terminal NUM, IDENT,ready; non terminal inicio; inicio ::= IDENT NUM NUM ready NUM inicio |;
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 59
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
Rutas.flex import java_cup.runtime.Symbol; %% %class rutas %cupsym symrutas %unicode %cup %line %column
Blanco = [ |\r|\n|\t|\f] PROGRAMACION DE SISTEMAS [Escriba texto]
Página 60
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
NUM=([0-9])+ LETRA=[a-zA-Z] IDENT = {LETRA}({LETRA}|{NUM})* %% ":" {return new Symbol (symrutas.PUNTOS,yyline+1,yycolumn+1,yytext());} "." {return new Symbol (symrutas.PUNTO,yyline+1,yycolumn+1,yytext());} "/" {return new Symbol (symrutas.DI,yyline+1,yycolumn+1,yytext());} {Blanco}+ {;} {IDENT} {return new Symbol(symrutas.IDENT,yyline+1,yycolumn+1,yytext());} . {System.out.println("ERROR LÉXICO: Carácter \""+yytext()+"\" no permitido.");} CUP: terminal NUM, IDENT,ready; non terminal inicio; inicio ::= IDENT NUM NUM ready NUM inicio |;
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 61
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
LlamadaFuncion.flex import java_cup.runtime.Symbol; %% %class llamadafuncion %cupsym symllamadafuncion %unicode %cup %line %column Blanco = [ |\r|\n|\t|\f] NUM=([0-9])+ LETRA=([a-zA-Z]) IDENT = {LETRA}({LETRA}|{NUM})*
%% {Blanco}+ {;} "(" {return new Symbol (symllamadafuncion.A,yyline+1,yycolumn+1,yytext());} ")" {return new Symbol (symllamadafuncion.C,yyline+1,yycolumn+1,yytext());} "," {return new Symbol (symllamadafuncion.CO,yyline+1,yycolumn+1,yytext());} {NUM} {return new Symbol (symllamadafuncion.NUM,yyline+1,yycolumn+1,new Integer (yytext()));} PROGRAMACION DE SISTEMAS [Escriba texto]
Página 62
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
{IDENT} {return new Symbol (symllamadafuncion.IDENT,yyline+1,yycolumn+1,yytext());} . {System.out.println("ERROR LÉXICO: Carácter \""+yytext()+"\" no permitido.");}
Lista de numeros separados con gato
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 63
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
import java_cup.runtime.Symbol; %% %class Lexer %cup %line %column BLANCO=[ |\r|\n|\t|\f] NUM=[0-9]+ GATO = "#" PARA = "(" PARC = ")" %% {BLANCO}+ {;} {NUM} {return new Symbol(sym.NUM,yyline+1,yycolumn+1,new Integer(yytext()));} {GATO} {return new Symbol(sym.G,yyline+1,yycolumn+1);} {PARA} {return new Symbol(sym.PARA,yyline+1,yycolumn+1);} {PARC} {return new Symbol(sym.PARC,yyline+1,yycolumn+1);} . {System.out.println("ERROR LEXICO:" + " en la linea: " + (yyline+1) + " en la columna: " +(yycolumn+1) + " el token: " + yytext());} CUP: terminal NUM, G, PARA, PARC; non terminal lista, estructura; estructura ::= PARA lista PARC estructura |; lista ::= NUM G lista | NUM G NUM lista |;
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 64
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
CUESTIONARIO
NOTAS Y SUGERENCIAS
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 65
INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA
MANUAL DE PRÁCTICAS DE LA MATERIA: Lenguajes y autómatas II
CODIGO: SCC - 0426 REVISION: 0
BIBLIOGRAFIA Compiladores. Alfred V. Aho Editorial. Limusa Java a tope. Compiladores. Traductores y compiladores con Lex, Yacc, Jflex,cup y javacc. Sergio Gálvez Rojas. Miguel Ángel Mora Mata. Versión Electrónica, DEPÓSITO LEGAL: MA-185-2005
PROGRAMACION DE SISTEMAS [Escriba texto]
Página 66
View more...
Comments