Práctica 3 Introducción al Manejo de Bison

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

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

Teoría de la Computación

Teoría de la Computación

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

Práctica 4 Manejo Avanzado de Bison

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

Práctica 4 Manejo avanzado de Bison

Elementos de un programa en C

Construcción de tablas de análisis sintáctico LL(1)

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

GRAMATICAS LIBRES DEL CONTEXTO

Generador de analizadores léxicos FLEX

Fundamentos de Programación 2017-I

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

Introducción a Flex y Bison

Generador de analizadores sintácticos BISON

EQUIVALENCIAS EN C DE CONSTRUCCIONES SECUENICIALES EN PSEUDOCÓDIGO

Procesadores de Lenguaje

INICIACIÓN A LA PROGRAMACIÓN EN C

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

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

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

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

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

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

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

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

Tema: Entorno a C# y Estructuras Secuenciales.

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

OPERADORES Y EXPRESIONES

Tema: Autómata de Pila

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Procesadores de Lenguaje

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

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

Asignatura: Estructuras de Datos. Año Escolar: Grado y Sección: 6to INF A-B Docente: Ing. Yesika Medina

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

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

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

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

EJERCICIOS del TEMA 3: Lenguajes independientes del contexto

Universidad de Costa Rica. Escuela de Ciencias de la Computación e Informática CI-2700 TÓPICOS ESPECIALES - COMPILADORES.

Procesadores de Lenguaje

Fundamentos de Programación 2017-I

Ficha de Aprendizaje N 13

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Programación En Lenguaje C

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

Programación Avanzada

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:

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

INTRODUCCIÓN AL LENGUAJE C

Segunda Práctica. Teoría de Autómatas y Lenguajes Formales I. Escuela Politécnica Superior Universidad Autónoma de Madrid.

MATEMÁTICAS PARA LA COMPUTACIÓN CAPÍTULO 1. SISTEMAS NUMÉRICOS

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

TEMA 4. ESTRUCTURAS DE CONTROL

Tema 13: Apuntadores en C

Tema 4. Operadores y Expresiones

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

Lenguaje de programación C. Introducción

OPTIMIZACIÓN DE CÓDIGO

El lenguaje C. 1. Identificadores, constantes y variables

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

Programación Estructurada

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

Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales

JavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores.

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

Preliminares. Tipos de variables y Expresiones

2^10 2^9 2^8 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 SUMA

Laboratorio 1: Terminal de Linux y primer programa en C

Lenguajes de programación

FÓRMULAS Y FUNCIONES

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

El análisis descendente LL(1) 6, 7 y 13 de abril de 2011

ENTORNO DE DESARROLLO Y COMPILACIÓN DE PELLES C

Unidad 4. Autómatas de Pila

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

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

Tema: Tabla de Símbolos

Profs. Carlos Pérez y Ricardo Monascal

Unidad II: Análisis semántico

Introducción a C++ y Code::Blocks

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

Programación Estructurada

MIA RICARDO GONZALEZ LOZANO APLICACIONES EN LENGUAJE C

1. (F, +) es un grupo abeliano, denominado el grupo aditivo del campo.

Operación que hiciste en la calculadora

Programación en java. Estructuras algorítmicas

Programación. Test Autoevaluación Tema 3

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

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

Funciones como Subprogramas en C++

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

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

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

Principios de Computadoras II

Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer, utilizar y diseñar gramáticas de libre contexto

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

Transcripción:

Práctica 3 Introducción al Manejo de Bison Tareas 1. Estudia la sección sobre Bison en el documento Intro_Flex_Bison.pdf (página 10 a nal) y descarga el manual de Bison como soporte para consultas (bison.pdf). 2. Lee la introducción de esta práctica y realiza los ejercicios 1 a 4 propuestos. 3. Elabora la memoria de la práctica y entrégala junto con los cheros fuente de los ejercicios 2 a 4 por el mismo procedimiento que en las prácticas anteriores. La fecha tope de entrega será hasta el día anterior al comienzo de la Práctica 4. Debes crear un directorio que contenga exclusivamente el chero con la memoria en formato PDF, los cheros fuente con tu código (.l de Flex y.y de Bison) y los de prueba (.txt de texto). No uses subdirectorios. En caso de que el chero.zip resultante tenga un tamaño mayor de 512 KB deberás repetir la creación del directorio dividiéndolo en varios cheros.zip de como máximo 512 KB cada uno, en ese caso llama a los cheros resultantes nipprx1.zip, nipprx2.zip, etc. Introducción El objetivo principal de esta práctica es familiarizarse con la herramienta de creación de analizadores sintácticos Bison, entender cómo utilizarla en conjunción con Flex y aplicar lo aprendido sobre teoría lenguajes. Para ello, se plantea un ejercicio guiado para desarrollar un reconocedor de palabras del lenguaje formado por las expresiones de enteros bien escritos que utilizan `+' y ` ' y otros dos ejercicios para desarrollar reconocedores de palabras para otros lenguajes. Ejercicio 1 Bison es una herramienta que, usada conjuntamente con Flex, permite construir compiladores. En la asignatura Teoría de la Computación nos interesa para producir programas 1

capaces de reconocer palabras que pertenecen a un lenguaje generado por una gramática libre de contexto. Así, en esencia, un chero fuente Bison contendrá la descripción de una gramática y el ejecutable que se genere permitirá determinar si una entrada textual corresponde o no al lenguaje generado por dicha gramática. A diferencia de Flex, se considera toda la entrada como una única expresión sobre la que se verica si pertenece o no al lenguaje generado por la gramática. Un chero fuente Bison tiene una estructura como la siguiente: %token α 1 α 2... α n %start β 1 β 1 : β i... β j... β i : α i β i β k β j : β j α i β k β k : α i λ Donde {α 1, α 2,..., α n } representa el alfabeto o conjunto de símbolos terminales de la gramática, β 1 sería el símbolo inicial de la gramática (no terminal), y β 1,..., β i, β j, β k serían reglas de producción de la gramática. Para el ejemplo de estructura expuesto β 1 produciría no terminales, β i produciría terminales por la izquierda con no terminales o sólo no terminales, β j produciría terminales por la derecha con no terminales o sólo no terminales y, nalmente β k sólo produciría terminales. Los símbolos terminales se denominan tokens en Bison. En la descripción de la gramática en Bison no es necesario declarar las variables de la gramática (conjunto de no terminales de la gramática), ya que todo lo que no sean tokens (que si se declaran) se considerarán variables. Supongamos que se quiere reconocer las palabras del lenguaje formado por las expresiones enteras con paréntesis que utilizan `+' y ` ' (p. ej. 4, 4 + 2,(4 + 3) 5,... ). Para ello se podría crear la siguiente gramática incontextual: S T T T + T T T ENT ERO (S) Una primera aproximación a la codicación en Bison (chero fuente.y): 2

%token P ARIZ P ARD MAS P OR ENT ERO %start s s : t t MAS t t P OR t t : ENT ERO P ARIZ s P ARD Adicionalmente, se necesitaría crear un analizador léxico con Flex que permitiera reconocer las ocurrencia de los diferentes tokens de la gramática (chero fuente.l): %{ #include y.tab.h /* GENERADO AUTOMÁTICAMENTE POR BISON */ %} [+ ]?[0 9] + return(ent ERO) + return(m AS) return(p OR) ( return(p ARIZ) ) return(p ARD) \n return(0) \t {/* Ignora tabuladores y blancos */} Se añaden algunas deniciones de funciones necesarias al código fuente del programa en Bison (fuente.y): 3

%{ #include <stdio.h> %} %token P ARIZ P ARD MAS P OR ENT ERO %start s s : t t MAS t t P OR t t : INT EGER P ARIZ s P ARD int yyerror(char s){ printf( %s\n, s) return 0 } int main(){ yyparse() } Para compilar: bison -yd fuente.y (genera y.tab.c e y.tab.h) flex fuente.l (genera lex.yy.c) gcc y.tab.c lex.yy.c -lfl -o ejecutable./ejecutable <argumento_1>...<argumento_n> El programa de nombre ejecutable reconoce todas las expresiones enteras bien escritas de acuerdo con la gramática propuesta. Este ejecutable puedes probarlo desde teclado y también usando cheros de prueba. Para este último caso, habría que redirigir la entrada estándar con el pipe `<' como se explicó en clase de prácticas para el caso de Flex. Si la entrada es una palabra del lenguaje, no da ningún mensaje a la salida. En caso contrario, el resultado será parse error. 4

Ejercicio 2 Implementa el ejemplo de la introducción a Bison sobre el lenguaje para expresiones de asignación a variable (página 18 del documento Intro_Flex_Bison.pdf que podeis encontrar en la sección "material docente - laboratorio" de la página web de la asignatura) que en el lado derecho tienen una expresión aritmética formada por enteros, paréntesis y signos de suma. Compílalo y haz pruebas para entender qué reconoce exactamente. A continuación, realiza las siguientes modicaciones para que reconozca: Operadores de resta y multiplicación. Enteros negativos y números en punto otante (Ejemplo: -0.1234E-5). Corchetes correctamente anidados. Ejercicio 3 Implementa un analizador sintáctico para la siguiente gramatica: A CxA ϵ B xcy xc C xbx z Construye ejemplos de árboles de derivación y compruébalos con el programa. ¾Qué lenguaje reconoce? Ejercicio 4 Implementa en Bison analizadores sintácticos que reconozcan los siguientes lenguajes: L = {0 n 1 m m 1, n = 3m} L = {a i (b c) j i = 2j + 1, i > 1} L = {a m b n m > n m, n > 0} Notas: Es importante que documentes tus decisiones de diseño de las gramáticas y su implementación con Bison. Así, es posible que encuentres conictos de desplazamientoreducción o reducción-reducción que puedes tratar de resover modicando las gramáticas y/o introduciendo directivas de asociatividad en las producciones de Bison. 5

En caso de que no logres eliminar los conictos, puedes asumir el comportamiento estandar de Bison (desplazar) y documentar los problemas de tu implementación, acompañándolos de trazas de ejecución. En cuanto a la ejecución de los programas Bison, para las entradas válidas, los programa no han mostrar nada por pantalla y para las que no pertenezcan al lenguaje deben mostrar por pantalla parse error. Se recomienda no usar nombres para los tokens como a, b, c,... en Bison, ya que se pueden producir colisiones con algunas variables internas de Flex. Para el caso anterior, utiliza mejor T _a, T _b, T _c,.... 6