PROCESADORES DE LENGUAJES

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

Generador de analizadores léxicos FLEX

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

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

1. Funcionamiento de lex

Qué es Lex? Busca concordancias de un conjunto de expresiones regulares y un archivo de entrada y ejecuta acciones asociadas.

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

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

Seminario de introducción a Flex

Construcción de un analizador léxico para ALFA con Flex. Construcción de un analizador léxico para ALFA con Flex. Índice (I)

Construcción de un analizador léxico para ASPLE con Lex/Flex. Construcción de un analizador léxico para ASPLE con Lex/Flex

Unidad III Análisis Léxico. M.C. Juan Carlos Olivares Rojas

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

8- LEX-Expresiones regulares

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

Funcionamiento del A.L.

GUÍA BÁSICA DE FLEX Y BISON

12 La herramienta LEX

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

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

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

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

DESARROLLO DE LA PRÁCTICA DE ANÁLISIS SINTÁCTICO

ANÁLISIS LÉXICO EXPRESIONES REGULARES

Bison. Introducción. Índice. Introducción Uso de Bison con Flex. Formato del fichero de especificación de Bison

10 Introducción a BISON/YACC

Flex a la rápida. José Ignacio Medina

Tema 2: Análisis léxico

ANALIZADOR LEXICO LEX

PHP: Lenguaje de programación

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

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

Tema 3.- Predicados y sentencias condicionales

YACC (Yet Another Compiler Compiler) LALR(1) Parser Generator

Generador de analizadores sintácticos BISON

Tema 2.- Expresiones y funciones

Programación en Lenguaje C

Teoría de la Computación

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

PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009

Tema 2. Análisis lexicográfico

MANEJO DE EXPRESIONES REGULARES

Introducción a los generadores de analizadores léxicos y sintácticos FLEX y BISON: Implementación de una pequeña calculadora

Sintaxis de C Ing. Jose Maria Sola Dr. Oscar Ricardo Bruno

8.1. Introdución. %% [b\ t]+ $ ;

CAPITULO 4: ENTRADA Y SALIDA DE DATOS.

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 2.

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

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

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

Analizador Léxico. Programación II Margarita Álvarez. Analizador Léxico - Funciones

Analizador Sintáctico RECURSIVO

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

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

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

Objetivos Que el estudiante logre conocer, comprender y manejar conceptos y técnicas vinculados con el Analizador Léxico, para lo cual debe:

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

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

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

Elementos de un programa en C

YACC. Los símbolos terminales que la gramática empleará. El axioma o símbolo inicial de la gramática. %token. %start

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

Lenguaje de programación C. Introducción

Analizador Léxico en LEX

Introducción a la Programación

LENGUAJE. Tema 2 Elementos de un programa

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

Manual de referencia del lenguaje Micro-C

Una expresión es una combinación de uno o más operandos y operadores para obtener un resultado.

JavaScript: Lenguaje de programación

Programación. Test Autoevaluación Tema 3

Tema 5 Tabla de Símbolos

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Uso de la herramienta YACC

Lección 2 Introducción al lenguaje C

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

µ-c: Manual de referencia del lenguaje Micro-C

Flex, versión 2.5. Un generador de analizadores léxicos rápidos. Edición 2.5, Abril Vern Paxson

Compiladores: Análisis Léxico. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Aho, A.V., Sethi, R., Ullman, J.D. (1990), Compiladores: principios, técnicas y herramientas, Tema 3, páginas:

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

Examen Teórico (1/3 de la nota final)

INTRODUCCIÓN AL LENGUAJE C

Tema: Autómatas de Estado Finitos

Tema 5. Entrada y Salida

PROGRAMA TEMA I.- INTRODUCCIÓN

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Introducción a Flex y Bison

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

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

Examen de Procesadores de Lenguaje

Analizador De léxico. V A R i : I N T E G E R ; \n...

Lenguaje C. Estructuración de Datos: Arreglos. Funciones de Entrada y de Salida. Segundo Cuatrimestre 2015

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

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

Tema 05: Elementos de un programa en C

SSL Guia de Ejercicios

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Transcripción:

PROCESADORES DE LENGUAJES Análisis léxico con Prof. Dr. Nicolás Luis Fernández García Departamento de Informática y Análisis Numérico Escuela Politécnica Superior Universidad de Córdoba Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 1 / 36

Contenido del tema 1 Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 2 / 36

Características de la generación automática Los componentes léxicos se denotan mediante expresiones regulares. El generador léxico crea automáticamente el código a partir de las expresiones regulares. Generadores léxicos: lex, flex, pclex, jlex,... Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 3 / 36

COMPONENTES LÉXICOS Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 4 / 36

COMPONENTES LÉXICOS EXPRESIONES REGULARES Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 5 / 36

COMPONENTES LÉXICOS EXPRESIONES REGULARES AFN Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 6 / 36

COMPONENTES LÉXICOS EXPRESIONES REGULARES AFN AFD Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 7 / 36

COMPONENTES LÉXICOS EXPRESIONES REGULARES AFN AFD ANALIZADOR LÉXICO Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 8 / 36

COMPONENTES LÉXICOS EXPRESIONES REGULARES AFN LEX AFD ANALIZADOR LÉXICO Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 9 / 36

LEX Creado por M. E. Lesk y E. Schmidt (Bell Laboratories). Genera analizadores léxicos para C, Fortran, Raftor. Hay versiones para Unix, Linux, DOS, etc. Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 10 / 36

Funcionamiento de LEX nombre.l lex.yy.c Expresiones regulares LEX yylex() fichero de lex Analizador léxico Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 11 / 36

Funcionamiento de LEX Unix > lex nombre.l > cc -g lex.yy.c -ll -o nombre.exe Linux > flex nombre.l > gcc -g lex.yy.c -lfl -o nombre.exe Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 12 / 36

Ejecución >./nombre.exe Redirigiendo la entrada y la salida >./nombre.exe < fichero entrada >./nombre.exe < fichero entrada > fichero salida Usando argumentos desde la ĺınea de comandos >./nombre.exe fichero entrada >./nombre.exe fichero entrada fichero salida Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 13 / 36

Estructura del fichero de LEX declaraciones (opcional) % % reglas de traducción de las expresiones regulares % % funciones auxiliares (opcional) Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 14 / 36

LEX: expresiones regulares Símbolos especiales: + : disyunción + ( ): agrupación de expresiones regulares + *: repetición de un patrón cero o más veces. + +: repetición de un patrón una o más veces. +?: el patrón puede aparecer cero o una vez. + : delimitadores de cadenas +.: cualquier carácter distinto del salto de ĺınea (\n). + \n: salto de ĺınea + $ : carácter de final de ĺınea + [ ]: delimitadores de clases de caracteres + ˆ : inicio de ĺınea y complementario de una clase. Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 15 / 36

LEX: expresiones regulares Nota Si se antepone la barra \ delante de un símbolo especial entonces sólo se representa a sí mismo: \. sólo representa el punto. Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 16 / 36

Ejemplo (LEX: expresiones regulares 1 / 3) Expresión regular Significado a b a, b [ab] a, b ab ab ab+ ab, abb, abbb, (ab)+ ab, abab, ababab, ab* a, ab, abb, (ab)* ɛ, ab, abab, ab{1,3} ab, abb, abbb Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 17 / 36

Ejemplo (LEX: expresiones regulares 2 / 3) Expresión regular Significado [a-z] a, b, c,, z [a \-z] a,, z [-az], a, z [az-] a, z, [a-za-z] a, b,, z, A, B,, Z [a-za-z0-9] a, b,, z, A, B,, Z, 0, 1,, 9 [a-za-z0-9]* cero o más veces a, b, c,, 9 [a-za-z0-9]+ una o más veces a, b, c,, 9 Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 18 / 36

Ejemplo (LEX: expresiones regulares 3 / 3) Expresión regular Significado [ \t \n] espacio en blanco, tabulador y salto de ĺınea [ˆ ab] cualquier carácter distinto de a o b [a ˆ b] a, acento circunflejo, b a/b a sólo si va seguido de b a$ a si va seguido del carácter \n a/ \n a si va seguido del carácter \n ˆ abc abc si está escrito al principio de la ĺınea [\40-\176] caracteres ASCII imprimibles desde octal 40 (espacio) hasta octal 176 (tilde ) Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 19 / 36

LEX: Zona de declaraciones (opcional) Código extendido de lenguaje C delimitado por %{ y } % + Ficheros de cabecera. + Macros. + Prototipos de funciones. + Variables globales + Etc. Directivas de lex: %a, %n %o, %p,... Declaración de definiciones regulares. Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 20 / 36

LEX: Zona de declaraciones (opcional) Directivas de lex (tablas internas): + %x ESTADO: permite activar reglas condicionales (véase el ejemplo del comentario). + %a número: cambia el número de transiciones empaquetadas. + %n número: cambia el número de transiciones. + %e número: cambia el número de nodos. + %p número: cambia el número de posiciones. + Etc Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 21 / 36

Ejemplo (Definiciones regulares 1/2) numero [0-9] letra [a-za-z] identificador {letra}({letra} {numero})* Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 22 / 36

Ejemplo (Definiciones regulares 2/2) La definición regular identificador definida como {letra}({letra} {numero}) es transformada en [a za Z]([a za Z] [0 9]) Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 23 / 36

LEX: Zona de reglas de traducción expresión regular sentencia de lenguaje C expresión regular { sentencias de lenguaje C } Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 24 / 36

Ejemplo (: zona de reglas) % % [ \t] { ; } /* saltar los espacios y los tabuladores */ {numero}+\.? {numero}*\.{numero}+ { sscanf(yytext," %lf",&yylval.val); return NUMBER; } \n {lineno++; return FIN;}. {return yytext[0];} /* Devuelve cualquier otro carácter */ Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 25 / 36

LEX: resolución de ambigüedades Si una secuencia de caracteres se puede emparejar con varias expresiones regulares, 1 tiene preferencia la expresión regular que denote la cadena de caracteres de mayor longitud. 2 si la longitud de la cadena es igual, tiene preferencia la que aparezca en primer lugar. Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 26 / 36

Ejemplo (: resolución de la ambigüedad de if) % % if { return IF; } {identificador} { Symbol *s; if ((s=lookup(yytext)) == 0) s = install (yytext, INDEFINIDA, 0.0); yylval.sym = s; return s->tipo == INDEFINIDA? VAR : s->tipo; } Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 27 / 36

LEX: comandos especiales ECHO: imprime por pantalla el texto reconocido. BEGIN: cambia a un estado definido por el programador (véase el ejemplo del comentario). REJECT: rechaza el texto reconocido para que pueda ser procesado por otra regla (véase el ejemplo de pink). Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 28 / 36

Ejemplo (ECHO) Imprime por pantalla todos los caracteres % %. \n % % ECHO; Equivalencia % %. \n % % printf(" %s",yytext"); Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 29 / 36

LEX: Zona de funciones auxiliares (opcional) Código de funciones auxiliares utilizadas por las reglas de traducción También se pueden incluir + Ficheros de cabecera. + Macros. + Prototipos de funciones. + Declaración de variables globales + Etc. Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 30 / 36

LEX: variables globales predefinidas yytext: cadena que contiene el texto reconocido (tipo: char *) yyleng: longitud de yytext (tipo: int) yyin: Puntero al fichero de entrada Tipo: FILE * Valor por defecto: stdin, el teclado yyout: Puntero al fichero de salida Tipo: FILE * Valor por defecto: stdout, la pantalla Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 31 / 36

LEX: funciones predefinidas yylex(): contiene el analizador léxico generado por flex o lex yymore(): indica a lex que añada el siguiente componente léxico al componente léxico actual (véase el ejemplo hiper). yywrap(): se ejecuta cuando el analizar léxico encuentra el fin de fichero: Si devuelve 0, el analizador léxico continúa explorando. Si devuelve 1 (valor por defecto), el analizador léxico devuelve un componente léxico nulo para indicar el fin del fichero. Esta función puede ser redefinida por el programador. yyless(n): retiene los primeros n caracteres de yytext y devuelve el resto al dispositivo de lectura. Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 32 / 36

Ejemplo (: zona de declaraciones 1/3) %{ #include "macros.h" #include "hoc3.h" #include "y.tab.h" extern char *progname; extern int lineno; %} /* definiciones regulares */ numero [0-9] letra [a-za-z] identificador {letra}({letra} {numero})* Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 33 / 36

Ejemplo (: zona de reglas 2/3) % % [ \t] { ; } /* saltar los espacios y los tabuladores */ {numero}+\.? {numero}*\.{numero}+ { sscanf(yytext," %lf",&yylval.val); return NUMBER; } {identificador} ; {return FIN ;} \n {lineno++; return FIN;} { Symbol *s; if ((s=lookup(yytext)) == 0) s = install (yytext, INDEFINIDA, 0.0); yylval.sym = s; return s->tipo == INDEFINIDA? VAR : s->tipo; }. {return yytext[0];} /* Devuelve cualquier otro carácter */ Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 34 / 36

Ejemplo (: zona de funciones auxiliares 3/3) /***** Zona de funciones auxiliares *****/ extern FILE *yyin, *yyout; main(int cantidad, char *palabras[]) { switch(cantidad) { case 2: yyin=fopen(palabras[1], r ); break; case 3: yyin=fopen(palabras[1], r ); yyout=fopen(palabras[2], w ); } yylex(); } Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 35 / 36

PROCESADORES DE LENGUAJES Análisis léxico con Prof. Dr. Nicolás Luis Fernández García Departamento de Informática y Análisis Numérico Escuela Politécnica Superior Universidad de Córdoba Universidad de Córdoba: Escuela Politécnica Superior Ingeniería Informática 36 / 36