UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO JFLEX LENGUAJES FORMALES Y AUTÓMATAS CURSO 2005/2006

Documentos relacionados
Principios de Computadoras II

MANEJO DE EXPRESIONES REGULARES

Escribir la expresión regular de un número entero que no acepte que el primer dígito sea cero salvo el número 0. Solución: 0 [1-9][0-9]*

Generador de analizadores léxicos FLEX

JLex. JLex. Instalación JLex. Generación y Ejecución del Analizador Léxico. Lex en Java

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Elementos de un programa en C

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

TUTORIAL SOBRE EXPRESIONES REGULARES EN JAVASCRIPT PARA VALIDACIÓN DE CAMPOS EN FORMULARIOS HTML:

Ficha de Aprendizaje N 13

El lenguaje C. 1. Identificadores, constantes y variables

1 Estructura básica de un programa C++

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Programación orientada a objetos. Resumen de Temas Unidad 4: Sobrecarga

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

SENA Distrito Capital Centro de Electricidad, Electrónica y Telecomunicaciones ADSI - Ing. Espec. Javier Vaquiro

GUÍA DE ESTILO EN JAVA

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

Modelos de Computación I. Ingeniería Informática

1 ELEMENTOS BASICOS DEL LENGUAJE

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Lenguajes y Gramáticas

Fundamentos de JAVA. Angel Kuri Enero, /2/2006

Lenguaje C. Tipos de Datos Simples y Estructuras de Control

Programación en java. Estructuras algorítmicas

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8.

Datos y tipos de datos

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

LENGUAJE. Tema 2 Elementos de un programa

Elementos léxicos del lenguaje de programación Java

Tema 2. El lenguaje JAVA

Tema 3 Elementos básicos de programación

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Operadores y Expresiones

UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007

Analizador Léxico. UCR ECCI CI-2414 Recuperación de Información Prof. M.Sc. Kryscia Daviana Ramírez Benavides

Tema 2. El lenguaje de programación Java (Parte 1)

Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C

Curso de Programación Avanzada en C

4. Operadores Operador asignación

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores

Agenda. BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar.

Tema 3.- Predicados y sentencias condicionales

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Java para programadores

Estatutos de Control C# Estatutos de Decisión (Selección)

Curso Introducción JAVA Pág.: 1

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

Se guardan en archivos con extencion c y los cabezales con extension h

Representación de la información

Hoja de ejercicios del Tema 3

Las plantillas permiten definir funciones genéricas.

Estructura de Datos [Tipos de datos concretos y tipos de datos abstractos]

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Programación estructurada (Introducción a lenguaje C)

Tema 4. Operadores y Expresiones

Sistemas de numeración, operaciones y códigos.

Normas de estilo para la codificación de programas

DOCUMENTACIÓN PARA EL TRABAJO CON LA PLATAFORMA GUADALBOT

Lenguajes, Gramáticas y Autómatas Conceptos

Elementos léxicos del lenguaje de programación C

TEMA 4. ELEMENTOS BÁSICOS DE PROGRAMACIÓN

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Tema: Excel Formulas, Funciones y Macros

Fundamentos de Programación Visual Basic

MANUAL DE RUBY (PARTE I) Luis José Sánchez González

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Programación básica C++

Preliminares. Tipos de variables y Expresiones

Tema 3 Constantes, Variables y Tipos

Funciones mas importantes para el manejo de Caracteres

5. Sentencias selectivas o condicionales

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Proyecto Unico Interpretador de SetCalc

Gestor de aplicaciones Java. Esta herramienta es el intérprete de los archivos de clase generados por el javac (compilador).

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

TIPOS DE VARIABLES EN PHP. DECLARACIÓN Y ASIGNACIÓN. LA INSTRUCCIÓN ECHO PARA INSERTAR TEXTO O CÓDIGO. (CU00816B)

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

Formato para prácticas de laboratorio

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

LENGUAJE DE PROGRAMACION I. Ing. JAVIER ECHEGARAY ROJO Ing. WILDER ROMAN MUNIVE. Ing. Javier Echegaray Rojo / Ing. Wilder Román Munive Pag 1

Generador de analizadores sintácticos BISON

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

Programación Estructurada

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González.

Algoritmos. Intro. Prof. Raquel Torres Peralta / Gerardo Sanchez S. Unison

INICIACIÓN A LA PROGRAMACIÓN LENGUAJE JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Programación. Ejercicios Tema 3. Elementos Básicos del Lenguaje C

Transcripción:

UNIVERSIDAD DE SEVILLA E. T. S. INGENIERÍA INFORMÁTICA LENGUAJES Y SISTEMAS INFORMÁTICOS PRÁCTICAS DE LABORATORIO JFLEX LENGUAJES FORMALES Y AUTÓMATAS CURSO 2005/2006

Qué es el análisis léxico? El análisis léxico consiste en identificar en un texto aquellas cadenas que se ajustan (encajan en) a un determinado patrón lingüístico Aunque la inauguración de la Feria Internacional del Turismo y el Ocio (FITO'04) se pensaba realizar el 25/06/2004, la falta de 250.000.000 euros ha determinado que los consejeros D. José Fernández Díaz y Dña. María Pérez Gómez pospongan dicho acontecimiento hasta el 25 de octubre en el que se espera recibir una subvención de 75 millones de euros procedentes de la UE y de 150 de las arcas del estado. Patrón Cadenas que encajan en el patrón FECHA SIGLAS 25/06/2004 25 de octubre FITO'04 UE CANTIDADES 250.000.000 euros 75 millones de euros 150 Las expresiones regulares son uno de los medios más habituales para representar patrones léxicos

Qué son las Expresiones Regulares (ExpReg)? Una expresión regular (ExpReg) representa un conjunto de cadenas mediante una expresión en la que se mezclan símbolos y operadores ExpReg "casa" a e i o u Cadenas representadas casa a e i o u (0 1)(0 1) 00 01 10 11 be+ be bee beee beeee... SIMBOLOS BÁSICOS Caracteres: Incluye los recogidos en la norma UNICODE. Los caracteres: ( ) { } [ ] < > \. * +? ^ $ /. " ~! deben ser precedidos por la barra (\) o encerrados entre comillas dobles ya que se usan también como operadores dentro de las expresiones regulares Secuencias de escape: Donde se recogen los símbolos no imprimibles o especiales \n fin de línea \r retorno de carro \t tabulador \f alimentación de hoja

Qué es la herramienta JFLEX? JFLEX es una herramienta JAVA que permite actuar sobre aquellas cadenas de un fichero de texto que encajan en una expresión regular 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 incluira 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 expreg junto con sus acciones /* Cambia en un texto digo por Diego */ "digo" { System.out.print("Diego"); } Toda parte de la entrada que no encaja en el patrón es devuelta tal cual por defecto Donde dije digo, digo Diego Donde dije Diego, Diego Diego Entrada Salida

Cómo se ejecuta JFLEX?.flex JFLEX.java java JFlex.Main Lexer.flex javac Lexer.java JAVAC.class.txt JAVA Salida Ejecución java Lexer Entrada.txt

Operadores básicos Nombre Patrón Descripción Unión Concatenación α β αβ Cadenas que encajen en α o en β Cadenas que encajen en α seguidas de cadenas que encajen en β Cierre estrella Cierre positivo Opción Comodín α* α+ α?. Cero o más repeticiones de cadenas que encajen en α Una o más repeticiones de cadenas que encajen en α Una o ninguna aparición de una cadena que encaje en α Cualquier carácter salvo el salto de línea Paréntesis (α) Cadenas que encajen en α ("+" "-")?(0 1 2 3 4 5 6 7 8 9)+ representa un número entero (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. (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". (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. (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).

Métodos públicos 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ó /* Imprime el ultimo bit de cada numero binario */ %class UltimoBit %standalone % (0 1)+ { int ultimo=yylength()-1; System.out.print("[Binario "+yytext()); System.out.print(" Ultimo Bit: "+yycharat(ultimo)+"]"); } (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.

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

Macros 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 /* Muestra los identificadores de un texto */ 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} %class Lexer %standalone Digito = [0-9] Letra = [a-za-z] Identificador = {Letra}({Letra} {Digito})* {Identificador} {System.out.print("IDENT");} (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.

Análisis de varios patrones /* Identifica enteros y palabras de un texto*/ Esquema para el análisis léxico de varios patrones Reglas léxicas para los caracteres blancos %class Lexer %standalone Blanco = [\r\n \t\f] Entero = ("+" "-")?[0-9]+ Palabra = [a-za-z]+ {Blanco}+ {} Reglas léxicas para los patrones a analizar {Entero} {System.out.print("INT: "+yytext()+"\n");} {Palabra} {System.out.print("WORD: "+yytext()+"\n");} Regla léxica cuando no encaja ningún patrón. {System.out.print("OTHER: "+yytext()+"\n");} (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).

Ambigüedad: Reglas de desambiguación 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. Regla de desambiguación: 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] ababc P2 PP {Blanco}+ {} a b {System.out.print("P1 ");} (ab)* {System.out.print("P2 ");} (a b)* {System.out.print("P3 ");}. {System.out.print("PP ");} c encaja en PP abab encaja en P2 o P3 aba encaja en P3 ab encaja en P2 o P3 a encaja en P1, P3 o PP ababc no encaja en ningún patrón Cuál es la salida del analizador para las entradas "a", "aaaa", "abab" y "ababb"?

Ambigüedad: Ejemplo de prioridad según el orden /* 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");}. {} /* 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");}. {} 0001111 es de BASE 3 es de BASE 2 (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. (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.