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

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

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

Principios de Computadoras II

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

MANEJO DE EXPRESIONES REGULARES

Datos Elementales y formato de un programa en Java

Curso de Java Introducción a la Programación I

PROCESADORES DE LENGUAJES

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

PHP: Lenguaje de programación

Informática Ingeniería en Electrónica y Automática Industrial

Sintaxis básica, variables y 7pos

Sintaxis básica, variables y 7pos

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

Generador de analizadores léxicos FLEX

1. Funcionamiento de lex

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Clase 06: Definiciones regulares

Teoría de Autómatas y Lenguajes Formales, IS17 Ingeniería Técnica en Informática de Sistemas. Práctica 1: Introducción al Analizador Léxico FLEX

UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO

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

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

Prácticas de Lenguajes, Gramáticas y Autómatas

Fundamentos de la programación

FORMATO DEL FICHERO CON LA TABLA DE SÍMBOLOS

Curso Informática Lección 3. Tipos de datos, constantes y variables

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Funcionamiento del A.L.

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

CAPITULO 2: VARIABLES Y CONSTANTES

JavaScript: Lenguaje de programación

Tipos de Datos en C. Palabras reservadas en C

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa

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

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Datos y tipos de datos

Estructura de Datos Unidad 1: Repaso del Lenguaje Java

Definición Es una directiva using que ayuda al compilador a localizar una clase que se usa en la aplicación.

Lección 2 Introducción al lenguaje C

Objetivo N 2. Conocer la Estructura General de un Programa en C++ Estructura de Datos Prof. Egilde Márquez

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

8- LEX-Expresiones regulares

Lex. Lex. Ing. Adrian Ulises Mercado Martínez. Enero 30, Ing. Adrian Ulises Mercado Martínez Lex Enero 30, / 27

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

FLEX: A FAST LEXICAL ANALYZER GENERATOR

Desarrollo de lenguajes y Compiladores [MII-771] Capítulo 1: Lenguajes y Gramáticas Formales

UIT-T Z.314 SECTOR DE NORMALIZACIÓN DE LAS TELECOMUNICACIONES DE LA UIT

Los tipos de datos primitivos

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

Informática Ingeniería en Electrónica y Automática Industrial

Tema 2 Elementos básicos en C

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

Programación Orientada a Objetos

CAPITULO 4: ENTRADA Y SALIDA DE DATOS.

Prácticas de Lenguajes, Gramáticas y Autómatas

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

Características de JavaScript

Tema 2.- Expresiones y funciones

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

FUNDAMENTOS DE INFORMÁTICA

INICIACIÓN A LA PROGRAMACIÓN EN C

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

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Lex (flex,... ) Generación de analizador léxico p.1

Tipos de variables. Lenguaje C. Departamento de Electrónica. Tipos de datos, variables y constantes. Fundación San Valero

ANÁLISIS LÉXICO EXPRESIONES REGULARES

Laboratorio de Arquitectura de Redes. Datos en lenguaje C

Parte de Algoritmos, de la asignatura de Programación Máster de Bioinformática Cadenas y expresiones regulares

Tema 2. Tipos predefinidos

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

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

Componentes de XML. 30/10/06 J. Manuel Alcazar Donaire

12 La herramienta LEX

08 Análisis léxico IV

Tema 2: Análisis léxico

Informática General Cátedra: Valeria Drelichman Pedro Paleo Leonardo Nadel Norma Morales

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

Recopilación de ejercicios sobre expresiones regulares en exámenes de Compiladores e intérpretes

El lenguaje de programación JKL

Seminario de introducción a Flex

PRINCIPIOS DE PROGRAMACIÓN. Mtro. en Ingeniería de Software. Especialidad en e-commerce Ismael Jiménez Hernández

Tipos de datos y Operadores Básicos

Tema 2: Análisis léxico

Informática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador.

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

1. Define que es un Autómatas finitos determinanticos y cuáles son sus elementos constitutivos (explique cada uno de ellos).

Programación Orientada a Objetos. Orientación a Objetos en Java

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

Pruebas de escritorio

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

Transcripción:

UNIVERSIDAD DE SEVILLA E. T. S. INGENIERÍA INFORMÁTICA LENGUAJES Y SISTEMAS INFORMÁTICOS PRÁCTICAS DE LABORATORIO ANÁLISIS LÉXICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007

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 FECHA SIGLAS CANTIDADES Cadenas que encajan en el patrón 25/06/2004 25 de octubre FITO'04 UE 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 (0 1)(0 1) be+ Cadenas representadas casa a e i o u 00 01 10 11 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 Zona de opciones y declaraciones: Las opciones comienzan con un % al inicio de línea Zona de reglas léxicas: Incluyen las expreg junto con sus acciones /* Código incluido fuera de la clase a generar */ %% %class Diego /* Se generara un fichero Diego.java que incluira la clase Diego */ %standalone /* La clase Diego incluirá la función main Esta función recibirá como argumento el fichero de texto a analizar */ %unicode /* Admite caracteres Unicode en la entrada*/ %% /* Cada vez que encuentra digo imprime Diego */ "digo" { System.out.print("Diego"); } OJO: toda parte de la entrada que no encaja en ninguna expresión regular es imprimida por pantalla 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 Ejemplo.flex javac Ejemplo.java JAVAC.class.txt JAVA Salida Ejecución java Ejemplo Entrada.txt

Operadores básicos Nombre Unión Concatenación Cierre estrella Cierre positivo Opción Comodín Paréntesis Patrón α β αβ α* α+ α?. (α) Descripción Cadenas que encajen en α o en β Cadenas que encajen en α seguidas de cadenas que encajen en β 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 Cadenas que encajen en α ("+" "-")?(0 1 2 3 4 5 6 7 8 9)+ representa un número entero (BinarioPar.flex) 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.flex) Escriba un analizador léxico que sustituya las cadenas casa, camisa y carcasa que figuran en un texto por la cadena "CA_SA". (Blancos.flex) 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.flex) 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 (pide memoria) 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 %unicode %% (0 1)+ { int ultimo=yylength()-1; System.out.print("[Binario "+yytext()); System.out.print(" Ultimo Bit: "+yycharat(ultimo)+"]"); } (Asteriscos.flex) Escriba un analizador léxico que cada vez que encuentre un símbolo +, sustituya el carácter que se encuentra a su izquierda y el que se encuentra a su derecha (si existen) por sendos símbolos *. (Puntos.flex) 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.flex) 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.flex) Escriba un analizador léxico que sustituya los operadores de suma +, resta -, producto * y división / y potencia ^ por la cadena "OPERADOR. (Hexadecimal.flex) Escriba un analizador léxico que sustituya las apariciones de un número escrito en base hexadecimal por la cadena "HEXADECIMAL". (A_Mayusculas.flex) 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.flex) 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.