Funcionamiento del A.L.

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

Procesadores de lenguaje Tema 2 Análisis léxico

Principios de Computadoras II

Elementos de un programa en C

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

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

Lección 2 Introducción al lenguaje C

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

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

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

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

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

Programación en java. Estructuras algorítmicas

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

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

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

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

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:

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

Conceptos básicos: 1,2 puntos

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

2ª Convocatoria 2008/2009 (15-IX-2009) 4º Ing. Informática. CPS. Universidad de Zaragoza Tiempo de realización: 3 horas

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

GUÍA BÁSICA DE FLEX Y BISON

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

!!!!!!!! !!!!! Práctica!4.! Programación!básica!en!C.! ! Grado!en!Ingeniería!!en!Electrónica!y!Automática!Industrial! ! Curso!2015H2016!

PHP: Lenguaje de programación

Lenguaje de programación C. Introducción

Flex a la rápida. José Ignacio Medina

Estructura de Datos: Archivos

Elementos léxicos del lenguaje de programación C

Curso de Programación Avanzada en C

Las Etapas de la Compilación

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

INICIACIÓN A LA PROGRAMACIÓN EN C

Procesadores de lenguaje Tema 6 La tabla de símbolos

Generador de analizadores sintácticos BISON

OPERADORES Y EXPRESIONES

Programación. Test Autoevaluación Tema 3

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

DESCRIPCIÓN ESPECÍFICA NÚCLEO: Núcleo Sector Comercio y Servicios.

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

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

Datos y tipos de datos

Estructuras de Datos Declaraciones Tipos de Datos

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

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

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

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Lenguajes de programación

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

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

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

LENGUAJE. Tema 2 Elementos de un programa

4. (Junio 2005) Se está diseñando un lenguaje de programación para manejar objetos gráficos. Entre las constantes que tiene que manipular están las

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso v1.0 (05.03.

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

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

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

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

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

Tabla de Símbolos. Programación II Margarita Álvarez

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

PLANES CURRICULARES GRADO9º/ 01 PERIODO

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

Programación En Lenguaje C

Tema: Autómata de Pila

Scripting en el cliente: Javascript. Tecnologías Web

Guía práctica de estudio 05: Diagramas de flujo

Fundamentos de Programación 2017-I

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

Expresiones y sentencias

UNIDAD I. ALGORITMOS

PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR:

Lenguaje C. Tipos de Datos Simples y Estructuras de Control

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

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


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

Sintaxis básica, variables y 7pos

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

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

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

Documentación Técnica: 1er Proyecto

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación

Representación de datos y aritmética básica en sistemas digitales

2.1.- EJEMPLO DE UN PROGRAMA FORTRAN

Práctica 4 Manejo Avanzado de Bison

Aritmética de Enteros

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

EXAMEN PARCIAL TRABAJO INTEGRADOR (TI) EVALUACIÓN CONTINUA PESO PORCENTUAL PESO PORCENTUAL 1 30% 06-MAY-14 30% 03-MAY-14 20% 20%

Programación Estructurada

Representación de la Información en los Sistemas Digitales

El lenguaje C. 1. Identificadores, constantes y variables

2. ENTIDADES PRIMITIVAS PARA EL DESARROLLO DE ALGORITMOS

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

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

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Unidad II Fundamentos de C++ M.C. Juan Carlos Olivares Rojas

Transcripción:

ANALIZADOR LEXICO 1

Funcionamiento del A.L. Programa fuente Analizador léxico Componente léxico Obtén el siguiente componente léxico Analizador sintáctico Tabla de símbolos 2

Maneja el fichero del programa fuente: abrir, leer y cerrar. Gestionar posibles errores de lectura. Genera tokens en base a la demanda. 3

Funciones Rechaza cualquier texto en el que aparezcan caracteres ilegales ( alfabeto) Rechaza combinaciones ilegales (no permitidas por las especificaciones léxicas). 4

El A.L. ignora elementos innecesarios para la siguiente fase, como tabuladores, comentarios, espacios en blanco, etc. 5

Sitúa el error en el programa fuente. Lleva la cuenta de las líneas procesadas. Devuelve el par (token, lexema). 6

Ejemplo 7

Para algunos tipos de tokens debe leer caracteres hasta que lea uno que no pertenece a la categoría del token que se está leyendo. Este es devuelto al buffer de entrada 8

Ejemplo En la cadena Grande / 307>= identificador ver si no es prefijo de ningún otro Debe tratar de leer el token mas largo 9

Recuperación de errores Ignorar los caracteres no válidos hasta formar un token válido. Borrar caracteres extraños. Insertar un carácter que pudiera faltar. Reemplazar un carácter presuntamente incorrecto por uno correcto. Conmutar las posiciones de dos caracteres adyacentes 10

Conceptos Lexema Secuencia de caracteres que concuerda con un patrón numerousuarios Atributos Estructura de datos de cada token para almacenarse en la TS [puntero, Lexema, Tipo, línea] Patrón - Descripción del componente léxico mediante una regla.

Reconocimiento de palabras reservadas Resolución implícita Considerar las palabras reservadas como identificadores Insertar las palabras clave como tal en la tabla de símbolos Buscar identificadores en la tabla de símbolos Resolución explícita Se indican todos los patrones de cada palabra reservada Se integran en el diagrama de transiciones global 12

Tabla de Símbolos do end for while cont Pal. reservada Pal. reservada Pal. reservada Pal. reservada Identificador Zona de Palabras Reservadas Zona de identificadores 13

Especificación de A.L Identificar la colección de tokens Estructurar la colección de tokens Describir el lenguaje como expresiones regulares Especificar un Diagrama de Transición Traducir el Diagrama a una tabla de transición 14

ESPECIFICACIÓN DEL FUNCIONAMIENTO 15

Lex (Lexical Analyzer Generator) La herramienta es llamada el compilador Lex, Flex Su especificación de entrada el lenguaje Lex(c,c++).

Herramienta Lex Se crea mi_especificacion.lex utilizando el lenguaje Lex mi_especificacion.lex es procesado utilizando el compilador Lex para producir un programa C llamado lex.yy.c. El programa lex.yy.c contiene una representación de un diagrama de transición construido a partir de las e.r. de mi_especificacion.lex, y una rutina estándar llamada yylex() que usa la tabla para reconocer lexemas.

lex.yy.c es procesado utilizando un compilador C para producir un programa objeto mi_analizador_lex.exe el cual es el analizador lexicográfico, que transforma la entrada (mi_programa.c) en una secuencia de tokens.

mi-especificacion.lex (programa fuente lex) Compilador lex (mi_especificacion.lex) Lex.yy.c Lex.yy.c Compilador C (cc lex.yy.c) Mi_analizador_lex.exe Mi_programa.c (archivo fuente) Mi_analizador_lex.exe Secuencia de tokens Éste es el analizador lexicográfico

Especificaciones Lex Consiste de tres partes o secciones: 1. Definiciones auxiliares 2. %% reglas de traducción %% 3. rutinas definidas por el usuario (opcional)

1. Definiciones Auxiliares Pueden ser de dos tipos: Fragmentos de declaraciones y/o código en lenguaje C delimitado por%{ y%} e incluyen declaraciones de variables, constantes, etc. Las declaraciones involucradas tendrían alcance global en el programa fuente generado. %{... %} Definiciones de expresiones regulares de la siguiente manera: R1 D1 R2 D2...... Rn Dn donde Dj <> Di (Para todo i<> j) y Ri es un e.r

2. Reglas de traducción R1 {acción1} R2 {acción2}...... Rm {acciónm} Donde Ri es una e.r llamada patrón {acción i} es un fragmento de código C que describe la acción Que el analizador realizará al momento de reconocer el patrón Ri.

Funciones de Lex Dentro de las acciones y dentro de la sección rutinas definidas por el usuario. input() Toma el siguiente caracter en la entrada. output(c) Escribe el contenido de c en la salida. yytext[] Secuencia de caracteres que unifican con un patrón. yyleng Longitud de la secuencia de caracteres en yytext[].

3. Funciones definidas por el usuario Pueden incluir rutinas que permitan modularizar, simplificar la complejidad y reutilizar código en el diseño de las acciones.

Ejemplo Declaraciones %{ int palabra=0, numero=0; %} Definiciones e.r. Numero [0-9]+ Palabra [a-za-z]+ %% "bye {bye();return 0;} "quit {bye();return 0;} "resume" {bye();return 0;} {Palabra} {printf("se leyo la palabra : %s", yytext);palabra++;} {Numero} {printf("se leyo el numero : %d", atoi(yytext));numero++;}. printf("%s",yytext[0]); %% main(){ printf("ejem1.l\neste ejemplo, distingue entre un numero entero y palabras.\nintroduzca bye, quit o resume para terminar.\n"); yylex(); } bye() { printf("se leyeron %d entradas, de las cuales se reconocieron\n%d\tenteros\ny\n%d\tpalabras.\n", (palabra+numero), numero, palabra); } Reglas Funciones

Tarea 4 Checa las antologías de Lex en la página e investiga más acerca del lenguaje

DIAGRAMA DE TRANSICIÓN Un DT debe leer caracteres hasta completar un token, y retornarlo (en los estados de aceptación) En un DT se considerará que las entradas para las que no hay transición desde cada estado son error. 27

De los estados de aceptación de un DT no deben salir transiciones. En el caso de tiras no especificas, se necesita otro estado al que ir cuando se lea un carácter que no pueda formar parte del patrón. Estados con retroceso. 28

Simbología x 29

Ejemplo expresión regular [0-9]+ = digito+ entero 30

Ejemplo 1 Construir un diagrama de transiciones para el reconocimiento de números enteros con signo negativo o sin signo y los operadores suma ( + ) e incremento ( ++ ) 31

DT 1 - d 7 5 d t 6 * Entero + 2 d + t 4 Incremento = {dígitos,+,-} Notación: d = dígito t = otro (ER: (- ε) d+ 36 * Suma 32

Ejemplo 2 Construir un diagrama de transiciones para el reconocimiento de: Identificadores (empieza con letra y puede llevar más letras ó dígitos) números enteros sin signo palabras reservadas do y done. 33

= {dígitos, letras,+,-} Notación d = dígito l = letra d 1 a 2 l d f 4 6 2 a 3 d l t t 3 5 DT d 8 * Do t o n e t t * Identificador * Entero t = otro f = otro alfanumérico (dígito o letra) a n = ir al estado n (ER: l (l d)* 7 9 10 11 f t f f a 2 a 2 a 3 a 2 * Done 34

Implementación del A.L. Esto es a través de la construcción de una Tabla de Transiciones. Las filas se etiquetan con los estados del DT. Las columnas se etiquetan con las posibles entradas. Notación: 0 significa ERROR - significa estado de aceptación 35

L d d o n e t 1 2 4 6 2 2 2 0 2 2 2 2 2 2 2 3 3 - - - - - - - 4 5 4 5 5 5 5 5 5 - - - - - - - 6 2 2 2 7 2 2 3 7 2 2 2 2 9 2 8 8 - - - - - - - 9 2 2 2 2 2 10 3 10 2 2 2 2 2 2 11 11 - - - - - - - *Ident. *Entero *Do *Done 36

A.L. Estado= TablaTransiciones[Estado, Entrada] El A.L. intentará llegar a un estado de aceptación. Ejemplo: hola 29 done dos 37

Tabla de Análisis 1 h 2 2 O 2 2 L 2 2 A 2 2 \n 3 *Ident. 1 \n Ignora 1 2 4 4 9 4 4 \n 5 *Entero 1 \n Ignorar 1 d 6 6 o 7 7 n 9 9 e 10 10 \n 11 *Done 1 \n Ignora 1 d 6 6 o 7 7 s 2 2 EOF 3 *Ident. 38

Practica 5 Ejercicio 1: Construir un diagrama de transiciones para el reconocimiento de operadores relacionales: <, <=, < >, =, >=, > Ejercicio 2: Construir un diagrama de transiciones para el reconocer números en notación científica ejemplo ± 3 e ± 5, puede o no llevar signo en la base y en la potencia 39

Ejercicio 3: Construir un diagrama de transiciones para el reconocer números reales en los que puede o no llevar el signo y antes del punto puede o no llevar dígitos pero después del punto debe de llevar al menos un punto. Ejercicio 4: Construir un diagrama de transiciones para reconocer las siguientes estructuras while y for en su forma mas común para el lenguaje c. 40

Ejercicio 5: Construir un diagrama de transiciones para el reconocer operaciones aritméticas con los operadores +,-,* y /. Ejercicio 6: Construir un diagrama de transiciones para reconocer los siguientes componentes léxicos read, print, palabras reservadas pradir, redir, ident, raya (_), punto (. ) 41

Ejercicio 7: Construir un diagrama de transiciones para reconocer expresiones lógicas con operadores lógicos and, or, not. 42

8. Para los ejercicios en los que desarrollaste el DT, ahora desarrolla la TT correspondiente a cada uno. 43

Desarrollar DT TT Ejercicio 9 para reconocer números binarios (Terminan en B), decimales (terminan en D), octales (terminan en O) y hexadecimales (terminan en H ) e identificadores Analizar el archivo fuente 355555O 34678D sumab 355555H34678H 1253612B contd 1010101010B 10101010D 101010O 1010101010H 3AFH 01123H temph 44