You are on page 1of 67

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

INGENIERIA EN SISTEMAS COMPUTACIONALES

MANUAL DE PRCTICAS DE LA MATERIA DE:

Lenguajes y autmatas dos

ELABORADO POR:
Francisco de jesus sayas cosme Gilberto Xolot Pio Marcos Hernndez Martnez Gustavo de Jesus Gonzlez Nava

FECHA DE ENTREGA:
30 de septiembre de 2013

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

SAN ANDRS TUXTLA, VER., SEPTIEMBRE DE 2013

ASIGNATURA: PRCTICA NO.1

PROGRAMACION DE SISTEMAS NOMBRE DE LA PRCTICA:


Metacompilador Jflex El alumno se relacionara con el metacompilador jflex, aprender a interactuar con java y generara analizadores lxicos. FUNDAMENTO TEORICO

OBJETIVO:

JFLEX es una herramienta JAVA que permite actuar sobre aquellas cadenas de un fichero de texto que encajan en una expresin regular. El formato de un programa en jflex es similar al ejemplo siguiente:

Zona de cdigo de usuario: Reservada para incluir las instrucciones import /* Cdigo incluido fuera de la clase a generar */ %% Zona de opciones y declaraciones: Las opciones comienzan con un % al inicio de lnea %class Lexer/* Se generara un fichero Lexer.java que incluir la clase Lexer*/ %standalone /* La clase Diego incluir la funcin main Esta funcin recibir como argumento el fichero de texto a analizar */ %% Zona de reglas lxicas: 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]

Pgina 1

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

MATERIAL/EQUIPO Computadora Java Jflex Manual de Practicas de la materia

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 2

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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 extensin. Guardar el en el bin del jflex 2. Compilar en lnea mediante la instruccin 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 instruccin: Donde dije Diego,Diego Diego

CUESTIONARIO

Realizar los siguientes analizadores lxicos:

a) (BinarioPar)Escriba un analizador lxico que sustituya las apariciones de un nmero par escrito en notacin binaria por la cadena "BINARIO_PAR. Se tiene que crear un archivo de entrada que

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 3

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

contenga solo nmeros 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 lxico 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 lxico 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 ms 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 lxico que suprima los comentarios de lnea de un texto (desde un # hasta el fin de la lnea). 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]

Pgina 4

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


"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 nmero");} {palabra} {System.out.println("reconocio una palabra");}

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 5

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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]

Pgina 6

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 7

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


b) Ca_sa %% %class casa %standalone %% casa {System.out.println("Ca_sa");} camisa {System.out.println("Ca_sa");} carcasa {System.out.println("Ca_sa");}

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 8

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

c) Blancos %% %class Espacio %standalone Blanco = [ \t\f]+ %% {Blanco} {System.out.print(" ");}

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 9

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

d)comentario_linea %% %class comentariolinea

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 10

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


%standalone Gato = [#]+[A-Z|a-z]+ %% {Gato} {;}

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 11

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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 realizacin de diferentes analizadores lxicos que permitan tener una nocin para iniciar la fase lxica 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 Glvez Rojas. Miguel ngel Mora Mata. Versin Electrnica, DEPSITO LEGAL: MA-1852005

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 12

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

ASIGNATURA: PRCTICA NO. 2

PROGRAMACION DE SISTEMAS NOMBRE DE LA PRCTICA:


METODOS PUBLICOS Y CONJUNTOS EN JFLEX.

OBJETIVO:

El alumno aprender el uso de mtodos establecidos en jflex para la deteccin de patrones (lexemas) y la utilizacin de patrones en conjunto para simplificar cdigo. FUNDAMENTO TEORICO

String yytext() devuelve la cadena que encaj en el patrn char yycharat(int i) devuelve el i simo carcter de la cadena que encaj int yylength() devuelve la longitud de la cadena que encaj/* El patrn conjunto (operador []) representa un carcter de los incluidos entre los corchetes (se admiten rangos de caracteres usando el smbolo guin). Si el primer carcter del conjunto es el ngulo, entonces el patrn representa cualquier carcter no incluido en el conjunto [aeiou] representa una de las vocales [^A-Za-z0-9] representa un carcter no alfanumrico MATERIAL/EQUIPO Computadora Java Jflex Manual de Practicas de la materia METODOLOGIA Y DESARROLLO

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 13

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


1.- TECLEAR EL SIGUIENTE PROGRAMA

CODIGO: SCC - 0426


REVISION: 0

/* Imprime el ultimo bit de cada nmero 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 nmeros binarios 4.- Verificar la salida. 5.-Compilar siguiendo el mismo procedimiento utilizado en la prctica anterior. 6.- Verificar el funcionamiento de los mtodos yylength y yycharat asi como el formato Realizar los siguientes analizadores lxicos (Asteriscos)Escriba un analizador lxico que inserte un * delante y detrs de cada carcter + que figura en un texto (Puntos)Escriba un analizador lxico que enmarca entre corchetes el carcter que precede a cada uno de los puntos que figuran en un texto. (DiaSemana)Escriba un analizador lxico que sustituya las apariciones de un nmero de la semana (de 1 a 7) por su correspondiente nombre de da.

(Operador)Escriba un analizador lxico que sustituya los operadores de suma +, resta -, producto * y divisin / y potencia ^ por la cadena "OPERADOR. (Hexadecimal)Escriba un analizador lxico que sustituya las apariciones de un nmero escrito en base hexadecimal por la cadena "HEXADECIMAL". (A_Mayusculas)Escriba en maysculas todas las palabras de un texto que comienzan por maysculas. (Considere que una palabra es una secuencia constituida por letras minsculas o maysculas). (Cadenas)Escriba un analizador lxico que sustituya todas las cadenas de un texto por el contenido de la cadena sin las comillas (Por ejemplo: "hola" sera sustituido por hola). Se define como cadena cualquier texto enmarcado entre comillas dobles con la condicin de que en su contenido no figuran ni comillas dobles ni saltos de lnea.

RESULTADOS

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 14

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

a) UltimoBit

/* Imprime el ultimo bit de cada nmero 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]

Pgina 15

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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]

Pgina 16

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 17

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


c)punto /* Imprime despues*/ %% %class Corche %standalone %% (".")+ {int Primero=yylength();} System.out.print(yytext()+"["+yycharat(Primero)+"]"); }

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 18

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

d) DiaSemana /* Imprime el ultimo bit de cada nmero 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]

Pgina 19

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

e)operador /* Imprime el ultimo bit de cada nmero binario */ %% %class operador

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 20

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


%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");}

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 21

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

f) A_Mayusculas /*(A_Mayusculas)Escriba en maysculas todas las palabras de Un texto que comienzan por maysculas. (Considere que una palabra es una secuencia constituida por letras minsculas o maysculas).*/ %% %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]

Pgina 22

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

g) cadenas /* Imprime el ultimo bit de cada nmero binario */ %% %class cadenas

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 23

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


%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(" ");}

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 24

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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]

Pgina 25

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


Compiladores. Alfred V. Aho Editorial. Limusa

CODIGO: SCC - 0426


REVISION: 0

Java a tope. Compiladores. Traductores y compiladores con Lex, Yacc, Jflex,cup y javacc. Sergio Glvez Rojas. Miguel ngel Mora Mata. Versin Electrnica, DEPSITO LEGAL: MA-1852005

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 26

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

NOMBRE DEL ALUMNO(A):

ASIGNATURA: PROGRAMACION DE SISTEMAS NOMBRE DE LA PRCTICA: MACROS, ANALISIS DE VARIOS PATRONES


Aplicar macros y definir patrones para la utilizacin de expresiones regulares

PRCTICA NO. 3

OBJETIVO:

FUNDAMENTO TEORICO Una macro asocia un identificador a una expreg. Su utilidad es doble, por un lado se favorece la reutilizacin, y por otra se aumenta la legibilidad del analizador lxico 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 identificacin de nmeros y palabras Teclear el siguiente ejemplo: /* Muestra los identificadores de un texto */ %% %class Lexer %standalone Digito = [0-9]

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 27

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


Letra = [a-zA-Z] Identificador= {Letra}({Letra}|{Digito})* %% {Identificador} {System.out.print("IDENT");}

CODIGO: SCC - 0426


REVISION: 0

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 metodologa de compilacin de las anteriores practicas

RESULTADOS ESPERADOS Prctica 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] Pgina 28

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 29

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

a) Real /*Escriba un analizador lxico que sustituya las apariciones de nmero reales en notacin cientfica 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]

Pgina 30

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

b) Horas /*(Horas.flex)Escriba un analizador lxico que sustituya las expresiones horarias que encajan o bien con el patrn HH:MM o bien con el patrn H:MM por la cadena "HORA". Tenga en cuenta que las horas deben ser correctas. Por ejemplo: 29:80 no sera 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] Pgina 31

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 32

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

c) May_min /*(May_Min.flex) Sustituye las palabras de un texto que empiezan por minsculas por la cadena MINUSCULA y las palabras que empiecen por maysculas 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]

Pgina 33

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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 lxico que imprima todas las fechas de un texto que se ajusten a uno de dichos formatos indicando adems qu formato fue usado (Ignore la problemtica relacionada con los aos bisiestos). */ %% %class Fechas %standalone BLANCO=[ |\r|\n|\t|\f] Aos = [0-9]+ Meses = [1-12] Dias = [1-31] D = ["/"]* americano = {Aos}{D}{Dias}{D}{Meses} europeo = {Dias}{D}{Meses}{D}{Aos} %% {BLANCO}+ {;} {americano} {System.out.println("formato americano: "+yytext());} {europeo} {System.out.println("formato europeo: "+ yytext());}

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 34

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 35

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

CUESTIONARIO Realizar lo siguiente utilizando macros:

(Real.flex)Escriba un analizador lxico que sustituya las apariciones de nmero reales en notacin cientfica 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 lxico que sustituya las expresiones horarias que encajan o bien con el patrn HH:MM o bien con el patrn H:MM por la cadena "HORA". Tenga en cuenta que las horas deben ser correctas. Por ejemplo: 29:80 no sera una hora correcta. Utiliza el anlisis de varios patrones para realizar los siguientes analizadores:
(May_Min.flex) Sustituye las palabras de un texto que empiezan por minsculas por la cadena

MINUSCULA y las palabras que empiecen por maysculas 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 lxico que imprima todas las fechas de un texto que se ajusten a uno de dichos formatos indicando adems qu formato fue usado (Ignore la problemtica relacionada con los aos 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]

Pgina 36

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

javacc. Sergio Glvez Rojas. Miguel ngel Mora Mata. Versin Electrnica, DEPSITO
LEGAL: MA-185-2005

ASIGNATURA: PRCTICA NO.4

PROGRAMACION DE SISTEMAS NOMBRE DE LA PRCTICA: AMBIGUEDAD

OBJETIVO:

Conocer, identificar y eliminar la ambigedad en jflex

FUNDAMENTO TEORICO El orden de las reglas lxicas es relevante cuando los patrones son ambiguos. Dos patrones son ambiguos si existe una cadena que encaja en ambos.

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 37

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

1.El analizador lee la entrada hasta encontrar la cadena ms larga que encaje con algn patrn. 2.En caso de empate se escoge la regla lxica 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 ");} Cul es la salida del analizador para las entradas "a", "aaaa", "abab" y "ababb"?

OTRO EJEMPLO

/* Identifica los nmero 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]

Pgina 38

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


. {}

CODIGO: SCC - 0426


REVISION: 0

OTRO EJEMPLO MAS:

/* Identifica los nmero 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]

Pgina 39

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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 lxico 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 capitalizacin, es decir, podrn aparecer mezcladas arbitrariamente letras minsculas y maysculas. Por ejemplo, para la palabra reservada Else se admiten tambin las formas ELSe o eLsE.

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 40

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


%% %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");}

CODIGO: SCC - 0426


REVISION: 0

(Numeros.flex)Escriba un analizador lxico que distinga entre los siguientes tipos de nmeros: entero (INT) entero largo (LONG) y real (FLOAT). Los enteros largos son enteros terminados con una letra l mayscula o minscula. Los reales deben incluir de forma obligatoria parte entera y parte decimal separadas por un punto.

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 41

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


%% %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");}

CODIGO: SCC - 0426


REVISION: 0

NOTAS Y SUGERENCIAS

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 42

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


Preguntar al docente cualquier duda

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 Glvez Rojas. Miguel ngel Mora Mata. Versin Electrnica, DEPSITO
LEGAL: MA-185-2005

ASIGNATURA: PRCTICA NO. 5

PROGRAMACION DE SISTEMAS NOMBRE DE LA PRCTICA: ANALISIS SINTACTICO


El alumno realizara analizadores sintcticos para comprender el funcionamiento de esta fase del compilador FUNDAMENTO TEORICO

OBJETIVO:

El anlisis sintctico consiste en identificar en un texto aquellas cadenas que se ajustan a (encajan en) unos conjuntos de reglas sintcticas, las cuales constituyen una gramtica. CUP(Constructor of Useful Parsers) es una herramienta que, a partir de la especificacin de

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 43

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

una gramtica, es capaz de generar automticamente un analizador sintctico (o parser) en Java para dicha gramtica. Un ejemplo...

Especificacin del analizador sintctico (entrada para CUP)...


terminal NUM, IDENT; non terminal balanceados; balanceados ::= NUM balanceados IDENT|; Especificacin del analizador lxico (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 pia25108 azul rojo 12 delfn Pero no:51 20 pera Estructura de una especificacin para CUP Zona de declaraciones import y package import java_cup.runtime.Symbol; Zona de componentes de cdigo de usuario: Permite que el usuario pueda personalizar el cdigo del parser generado (p.e. cambiar el cuerpo de algunos mtodos o incluir otros nuevos). Zona de declaracin de smbolos terminales y no terminales terminal NUM, IDENT; non terminal balanceados;

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 44

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

Zona de declaraciones de precedencia y asociatividad: ayudan a resolver el anlisis sintctico en caso de que tengamos una gramtica ambigua. /* Cero o ms sentencias precedence (se estudiarn ms adelante. */ Zona de la gramtica: Contiene un conjunto de reglas (tambin llamadas producciones). La parte izquierda de cada regla debe ser un smbolo no terminal. La parte derecha de cada regla puede contener tanto terminales como no terminales, y puede tener asociada una accin (escrita en Java y enmarcada entre {: y :} ). El smbolo inicial se considera que es el no terminal de la parte izquierda de la primera regla, a menos que se indique uno explcitamente con la construccin start with no-terminal; en la zona de terminales y no terminales balanceados ::= NUM balanceados IDENT | ;

El analizador sintctico llama al mtodo next_token () del analizador lxico cada vez que necesita que se reconozca el siguiente token de la entrada

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 45

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

La clase Symbol es tambin utilizada internamente por el analizador sintctico para representar tanto los smbolos terminales (tokens) como los no terminales. Patrones sintcticos Patrones no recursivos: Agregado. Opcin. Patrones recursivos: Lista simple (es decir, no anidada) Lista anidada Patrones no recursivos:

Patrn recursivo. Lista simple

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 46

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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 vaca o no. A continuacin haremos algunos ejercicios de estos casos. Patrn 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]

Pgina 47

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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 sintctico que reconozca la siguiente gramtica:


Begin_Block <cuerpo> End_Block Donde <cuerpo> puede ser una de las siguientes opciones: a)Msg seguido de un nmero, dos identificadores y una cadena. b)Ack seguido de un numero y dos identificadores. c)Ready seguido de un identificador o de un nmero. d)Alarm seguido de un identificador y una cadena

(ListaNumeros.flex)Escriba un analizador sintctico que reconozca listas (posiblemente


vacas) formadas por nmeros enteros (sin signo).

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 48

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

(Transmision.flex)Escriba un analizador sintctico 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 vaca de elementos Begin_Block... End_Block(vase el ejercicio Block.flex). (ListaMinusculas.flex)Escriba un analizador sintctico que reconozca cualquier lista (posiblemente vaca) formada por letras minsculas que pueden estar separadas tanto por el smbolo # como por el . (Ticket.flex) Escriba un analizador sintctico que reconozca cualquier ticket de compra. Un ticket est formado por lneas. Cada lnea est formada por el nombre de un producto (entrecomillado) seguido del nmero de unidades compradas (nmero natural) y del importe parcial (en euros). Las lneas estn separadas por retornos de carro. Nota: cualquier ticket tiene, al menos, un producto. (Rutas.flex)Escriba un analizador sintctico que reconozca nombres de ficheros con sus rutas en DOS. Por ejemplo: C:\ejemplo\leeme.txt. Supngase 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 extensin). (LlamadaFuncion.flex)Escriba un analizador sintctico que reconozca las llamadas simples a funciones en un lenguaje de programacin. Una llamada tiene elformato:identificador ( parmetros )donde parmetroses una secuencia (posiblemente vaca) de nmeros naturales e identificadores, separados por comas.

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 49

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


RESULTADOS ESPERADOS Block.flex import java_cup.runtime.Symbol; %% %class block %cupsym symblock %unicode %cup %line %column

CODIGO: SCC - 0426


REVISION: 0

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]

Pgina 50

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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 LXICO: Carcter \""+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]

Pgina 51

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 52

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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 LXICO: Carcter \""+yytext()+"\" no permitido.");}

CUP: terminal NUM; non terminal NUMEROS; NUMEROS ::= NUM NUMEROS |;

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 53

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

Transmision.flex import java_cup.runtime.Symbol; %% %class cuerpo %cupsym symcuerpo PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 54

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


%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]*\" %%

CODIGO: SCC - 0426


REVISION: 0

"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 LXICO: Carcter \""+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]

Pgina 55

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


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

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 56

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


ListaMinusculas.flex import java_cup.runtime.Symbol; %% %class listaminuscula %cupsym symlistaminuscula %unicode %cup %line %column

CODIGO: SCC - 0426


REVISION: 0

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 LXICO: Carcter \""+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]

Pgina 57

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 58

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


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})*

CODIGO: SCC - 0426


REVISION: 0

%% "." {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 LXICO: Carcter \""+yytext()+"\" no permitido.");} CUP: terminal NUM, IDENT,ready; non terminal inicio; inicio ::= IDENT NUM NUM ready NUM inicio |;

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 59

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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] Pgina 60

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


NUM=([0-9])+ LETRA=[a-zA-Z] IDENT = {LETRA}({LETRA}|{NUM})* %%

CODIGO: SCC - 0426


REVISION: 0

":" {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 LXICO: Carcter \""+yytext()+"\" no permitido.");} CUP: terminal NUM, IDENT,ready; non terminal inicio; inicio ::= IDENT NUM NUM ready NUM inicio |;

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 61

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas 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]

Pgina 62

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

{IDENT} {return new Symbol (symllamadafuncion.IDENT,yyline+1,yycolumn+1,yytext());} . {System.out.println("ERROR LXICO: Carcter \""+yytext()+"\" no permitido.");}

Lista de numeros separados con gato

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 63

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


import java_cup.runtime.Symbol;

CODIGO: SCC - 0426


REVISION: 0

%% %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]

Pgina 64

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II

CODIGO: SCC - 0426


REVISION: 0

CUESTIONARIO

NOTAS Y SUGERENCIAS

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 65

INSTITUTO TECNOLOGICO SUPERIOR DE SAN ANDRES TUXTLA AREA ACADEMICA

MANUAL DE PRCTICAS DE LA MATERIA: Lenguajes y autmatas II


BIBLIOGRAFIA Compiladores. Alfred V. Aho Editorial. Limusa

CODIGO: SCC - 0426


REVISION: 0

Java a tope. Compiladores. Traductores y compiladores con Lex, Yacc, Jflex,cup y javacc. Sergio Glvez Rojas. Miguel ngel Mora Mata. Versin Electrnica,
DEPSITO LEGAL: MA-185-2005

PROGRAMACION DE SISTEMAS [Escriba texto]

Pgina 66

You might also like