Práctica No. 4 Programas en Lex

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

Generador de analizadores léxicos FLEX

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

UNIVERSIDAD DEL ISTMO Ingeniería en computación Compiladores. Construcción de un sencillo analizador léxico.

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

Teoría de Autómatas y Lenguajes Formales LEX BISON Dr. Eric Jeltsch F. Introducción para los laboratorios y actividades relacionadas.

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

Elementos de un programa en C

Tema 2 Introducción a la Programación en C.

Preliminares. Tipos de variables y Expresiones

Fundamentos de Programación 2017-I

Generador de analizadores sintácticos BISON

GUÍA BÁSICA DE FLEX Y BISON

MIA RICARDO GONZALEZ LOZANO APLICACIONES EN LENGUAJE C

ENTORNO DE DESARROLLO Y COMPILACIÓN DE PELLES C

Una Herramienta para el Análisis Léxico: Lex

Las Etapas de la Compilación

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERÍA APUNTES DE CÁTEDRA EL METACOMPILADOR FLEX

Documentación Técnica: 1er Proyecto

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

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

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

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

Lenguaje de Programación: Compiladores de C y C++

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

La funcionalidad de carga automática de órdenes estará habilitada únicamente para usuarios con perfil Operador (perfil "A").

Flex a la rápida. José Ignacio Medina

Lenguaje C Preprocesador, Compilación y Enlazado.

Laboratorio 1: Terminal de Linux y primer programa en C

FLEX: Un generador de analizadores léxicos. AT&T Lex (más común en UNIX) MKS Lex (MS-Dos) Flex Abraxas Lex Posix Lex ScanGen JLex...

MANUAL DEL PROGRAMA EXCEL LABORAL

Procesos e Hilos en C

PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos

MANUAL DE USUARIO MODULO DE ACTIVOS FIJOS

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid

Practica 01: Programación en C bajo Linux y funciones

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

VBA. Visual Basic para Aplicaciones. Guía 1. Visual Basic para Aplicaciones en Office 1

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

Sistemas Operativos Practica 1: procesos y concurrencia.

CONALEP TEHUACÁN 150. INSTALACIÓN DE SISTEMAS MICROPROCESADOS. GRUPO 309 SOMA UNIDAD 2. INTRODUCCIÓN A LA PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR

TEMA 3: EL LENGUAJE C: PRESENTACIÓN

Programación En Lenguaje C

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

Construcción de una calculadora con Flex y Bison. Construcción de una calculadora con Flex y Bison. Índice (I)

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS

Hoja técnica sobre yacc 1 y lex 2. Introducción. lex PL, 2014/2015 1

INTRODUCCIÓN AL LENGUAJE C

Organización de la información en disco: archivos y carpetas

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Programación. Test Autoevaluación Tema 3

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C

Fundamentos de programación

Ficha de Aprendizaje N 1

Introducción a Flex y Bison

Laboratorio 01: Programar en lenguaje ANSI C bajo Windows

Fundamentos de Programación 2017-I

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

Sintaxis y Convenciones de Java. M. en C. Erika Vilches

PASOS PARA CREAR FUNCIONES CON VBA

TP N 4 Redirección de entrada y salida estándar

Laboratorio. Instalación de Visual Studio Community. Back To Basics Instalando Visual Studio Community. Versión: 1.0.

Tecleando. TECLADO: uso de mayúsculas y minúsculas, espaciador y borrar.

Funciones como Subprogramas en C++

Ubuntu Server HOW TO : DHCP

Funciones básicas del depurador

MANUAL DE INSTALACIÓN COI

MANUAL LOTTERY V2. Figura 1: Web ubicación archivo ejecutable

Microsoft Word. Microsoft Word 2013 SALOMÓN CCANCE. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

LENGUAJE. Tema 1 - Introducción

Conectar LibreOffice con Firebird mediante ODBC

UNIDAD 4. MODIFICAR TABLAS DE DATOS

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

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

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)

USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++

Depurar programas

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

Una introducción al compilador C de GNU

Construir una Interfaz Gráfica

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

Tema: Introducción al IDE de Microsoft Visual C#.

Manual de Cargos Automáticos

I. Operaciones con matrices usando Mathematica

Herramientas computacionales para la matemática MATLAB: Cómo guardar el trabajo?

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

Práctica 3 Ambiente de desarrollo Visual

Compilación de Programas C en UNIX y LINUX

Fundamentos de Ordenadores. Depurar programas usando Nemiver

MACROS AUTOMÁTICAS CON VBA EXCEL Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

1

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013

Transcripción:

Práctica No. 4 Programas en Lex Objetivo El objetivo de esta práctica es conocer el programa flex y utilizarlo para crear y compilar algunos ejemplos de programas Lex autónomos. Introducción Podemos definir a Lex cómo una herramienta para construir analizadores léxicos o lexers. Un lexer lee un flujo de entrada (normalmente de stdin o de algun otro archivo) y lo divide en unidades léxicas (llamadas tokens) cómo un producto final o para ser procesadas por otro programa. Lex fué desarrollado en los años 70 en los laboratorios Bell de la AT&T dentro del ambiente Unix. Para escribir una especificación léxica en Lex, es necesario crear un conjunto de patrones (Expresiones Regulares) que, cuando el programa se ejecute, servirán para identificar tokens en el flujo de entrada y, si así se especifica, ejecutar ciertas acciones asociadas a cada expresión regular. Actividades 1.- Captura y compilación de programas lex autónomos 1.1- Usando un editor de texto, captura el siguiente ejemplo de programa lex y guárdalo en un archivo llamado ejem1.l /* archivo: ejem1.l */ % #include<stdio.h> % [0-9]+ printf("numero\n"); [a-za-z][a-za-z0-9]* printf("palabra\n"); main() yylex(); int yywrap() return 1; 1.2.- Compila este programa lex con el comando: flex -oejem1.c ejem1.l Este comando debe generar un archivo llamado ejem1.c. Usando el comando dir ejem1* determina si el archivo existe y su tamaño y fecha: Archivo ejem1.c Tamaño: Fecha: 1.3.- Compilación del programa ejem1.c Para ejecutar el lexer, nos falta compilar el programa en C creado por el comando lex. Esto lo hacemos tecleando: tcc ejem1.c Ejecuta el comando anterior y usando el comando dir ejem1* determina si existe el archivo ejecutable ejem1.exe, su tamaño y fecha Archivo ejem1.exe Tamaño: Fecha:

1.4.- Antes de probar la ejecución del lexer, describe en tus propias palabras la expresión regular de cada una de las reglas: Regla Interpretación [0-9]+ [a-za-z][a-za-z0-9]* 1.5.- Ejecución del lexer ejem1.exe Para ejecutar el lexer creado en el inciso anterior sólo debemos teclear su nombre, así que ejecuta el lexer ejem1.exe tecleando ejem1 y reporta las salidas generadas para cada una de las siguientes entradas: a b ab 1 12 12.34 abc123 Para detener la ejecución del lexer, teclea Ctrl+D (que genera un EOF, fin de archivo). Concuerdan los resultados con tu interpretación de las reglas? Si no, trata de reinterpretar las reglas. 1.6.- Modificación de ejem1.l Usando un editor de texto vamos ahora a modificar la definición del lexer ejem1.l cambiando la segunda regla: Actual: [a-za-z][a-za-z0-9]* Modificada: [a-za-z][a-za-z0-9]+ Cómo se interpreta ahora esta nueva regla [a-za-z][a-za-z0-9]+? 1.7.- Recompíla el lexer con flex: flex -oejem1.c ejem1.l OK: y compíla el programa en C generado: tcc ejem1.c OK: 1.8.- Ejecuta la nueva versión del lexer (tecleando ejem1) y reporta las salidas para cada una de las siguientes entradas: a b ab 1 12 12.34 abc123

Concuerdan los resultados con tu interpretación de las reglas? Si no, trata de reinterpretar las reglas. 2.- Segundo ejemplo. 2.1.- Captura el siguiente programa lexer y guárdalo en un archivo llamado ejem2.l: /* archivo: ejem2.l */ % #include <stdio.h> % end printf("regla 1 -> Fin.\n"); return 0; [a-z] printf("regla 2: letra minuscula.\n"); [A-Z] printf("regla 3: letra mayuscula.\n"); [a-za-z]+ printf("regla 4: Palabra.\n"); [0-9]+ printf("regla 5: Numero entero.\n"); [0-9]*.[0-9]+ printf("regla 6: Numero fraccionario.\n"); main() yylex(); int yywrap() return 1; 2.2.- Compila este programa lex con el comando: flex -oejem2.c ejem2.l Este comando debe generar un archivo llamado ejem2.c. Usando el comando dir ejem2* determina si el archivo existe y su tamaño y fecha: Archivo ejem2.c Tamaño: Fecha: Compila el programa en C creado por el comando flex tecleando: tcc ejem2.c Ejecuta el comando anterior y usando el comando dir ejem2* determina si existe el archivo ejecutable ejem2.exe, su tamaño y fecha Archivo ejem2.exe Tamaño: Fecha: 2.3.- Antes de probar la ejecución del lexer, describe en tus propias palabras la interpretación de la expresión regular de cada una de las reglas: Regla end Interpretación [0-9]+ [a-z] [A-Z]

[a-za-z]+ [0-9]*.[0-9]+ 2.4.- Ejecuta el lexer ejem2 y reporta la salida para cada una de las siguientes entradas: a A ab 1 12 12.34.45 Hola end Concuerdan los resultados con tu interpretación de las reglas? Si no, trata de reinterpretar las reglas. 2.5.- Modificación de ejem2.l i).- Se quiere modificar la regla de números fraccionarios para que todo número fraccionario tenga al menos un dígito en la parte entera. Cúal es la regla que debe modificarse? Qué modificación se requiere? Regla a modificarse: Regla modificada: ii) Aplica la modificación al archivo ejem2.l, compila con flex, genera el ejecutable con tcc y prueba que la nueva regla funciona adecuadamente con las entradas siguientes: 1.23.45 123 end Funciona adecuadamente la modificación? Sí: No: En caso negativo, revisa la modificación que se realizó y cámbiala si lo consideras necesario para poder cumplir con lo que se solicita. 3.- Expansión de ejem2.l Se requiere agregar una regla 7 para identificar un nuevo tipo de token llamado variable que consiste en un _ (guión bajo) seguido de cualquier letra mayúscula seguido de al menos una letra minúscula. Su acción asociada es desplegar la frase Regla 7.- Variable 3.1.- Cual es la expresión regular que define este tipo de token? Y cuál es su acción asociada?

Expresión regular: Acción asociada: 3.2.- Agrega esta regla al archivo ejem2.l, compila con flex, genera el ejecutable con gcc y prueba que la nueva regla funciona adecuadamente con las entradas siguientes: Entrada hola _Hola _HOLA end Salida del lexer Funciona adecuadamente la modificación? Sí: No: En caso negativo, revisa la modificación que se realizó y cambíala si lo consideras necesario para poder cumplir con lo que se solicita. 4.- Comentarios y conclusiones