CUP. Diseño de compiladores. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP 20/04/2014

Documentos relacionados
JFlex. Diseño de compiladores. JFlex. Funcionamiento. Archivo de especificación. Código de usuario 23/03/2014

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

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

Las Etapas de la Compilación

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Fundamentos de Programación 2017-I

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

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

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

Tema: Entorno a C# y Estructuras Secuenciales.

Elementos de un programa en C

Unidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas

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

Tema V Generación de Código

Universidad Nacional del Santa FACULTAD DE INGENIERIA E.A.P. Ingeniería de Sistemas e Informática NETBEANS 7.0 MI PRIMER PROYECTO

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

Principios de Computadoras II

Integración de JFlex y CUP (analizadores léxico y sintáctico)

Ficha de Aprendizaje N 13

Tema: Tabla de Símbolos

Colección de Tesis Digitales Universidad de las Américas Puebla. Romero Martínez, Modesto

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

Computación II. Introducción a Visual Basic

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

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

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

JLEX Y JAVA CUP. Instalación

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

Fundamentos de Programación 2017-I

Profs. Carlos Pérez y Ricardo Monascal

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

Programación en java. Estructuras algorítmicas

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

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

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

ENTORNO DE TRABAJO E INTRODUCCIÓN A JAVA - ANEXO Versión: 1.0.1

Tema 7. Generación de código

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

Datos y tipos de datos

Java para no Programadores

Principios de Programación en Java

ENTORNO DE DESARROLLO Y COMPILACIÓN DE PELLES C

Procesadores de lenguaje Tema 6 La tabla de símbolos

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

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

Índice de contenido. Índice de contenido... i Indice de prácticas...ix Prólogo...xi Cómo utilizar este libro...xv

Técnicas de Programación

Procesamiento de documentos XML.

Programación. Test Autoevaluación Tema 3

Unidad 4. Autómatas de Pila


Los nombres y marcas comerciales mencionados en este manual son propiedad de sus respectivos autores o fabricantes.

Taller de Programación I. Introducción a Java

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Tema IV El lenguaje de programación PHP Tipos de Datos

Lenguajes de Dominio Específico (o Lenguajes para Todos)

Sintaxis básica, variables y 7pos

Universidad Autónoma Metropolitana Unidad Azcapotzalco. División de Ciencias Básicas e Ingeniería. Licenciatura en Ingeniería en Computación

Expresiones y sentencias

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

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

Fundamentos de programación JAVA

Las plantillas permiten definir funciones genéricas.

JAVA -INTRODUCCIÓN AL LENGUAJE

LENGUAJE. Tema 2 Elementos de un programa

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

MALTED: MANUAL DE INSTALACIÓN EN LINUX

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

Carrera: SCC Participantes. Representantes de la academia de sistemas y computación de los Institutos Tecnológicos.

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

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

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

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

CREACIÓN DE DSLS CON GROOVY

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

Carrera: Analista de Sistemas/Licenciatura en Sistemas. Asignatura: Programación Orientada a Objetos

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

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)

SERVICIO NACIONAL DE APRENDIZAJE SENA SISTEMA INTEGRADO DE GESTIÓN Procedimiento Ejecución de la Formación Profesional Integral GUÍA DE APRENDIZAJE

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

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

Universidad Centroccidental Lisandro Alvarado. Decanato de Ciencias y Tecnología Departamento de Sistemas

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

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

Lenguaje de programación C. Introducción

Curso de Programación en C# (40 horas)

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

4. Operadores Operador asignación

Programación en Visual Basic Ricardo Rodríguez García

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

Manual de turbo pascal

Lenguaje de Programación

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

E Ú E +T T T Ú T * F F F Ú ( E ) NUM. Queremos calcular: Los pasos que seguiremos serán:

Instalación OIP I7. Neris

COORDINADORES AUTORES PRÓLOGO PREFACIO... 43

INGENIERIA EN INFORMÁTICA Memoria del Proyecto Final de Carrera. NQL (Natural Query Language) Autor: Daniel Boerner. Consultor: Jordi Duran Cals

INDICE. 8 Marcos Definición estructural Varios Caracteres especiales Fondos y colores Listas Divisores Vínculos y gráficos

Estructuras en LabVIEW.

2.2 Nombres, Ligado y Ámbito

Transcripción:

CUP Diseño de compiladores CUP Cup es un generador de analizadores sintácticos LALR Recibe de entrada un archivo con la estructura de la gramática y su salida es un parser escrito en Java Manual oficial: http://www.cs.princeton.edu/~appel/modern/jav a/cup/manual.html Un archivo CUP tiene las siguientes secciones Imports Java Código del usuario para el parser Código del usuario para las acciones de la gramática Declaración de variables para la gramática La gramática en si (las producciones de la misma) Código del usuario para el parser El código Java generado por la herramienta es difícil de modificar Aquí podemos declarar métodos y variables que pensamos usar en la clase resultante Si se declaran variables o métodos públicos en esta sección, estos podrán ser accedidos por otras clases parser code {: /* Codigo del parser*/:} Código del usuario para las acciones de la gramática En esta sección pueden declararse métodos o variables que pueden ser usados por las acciones de la gramática (manejo de errores, logging, etc.) Se declara de la siguiente forma: action code {:/*Codigo para las acciones*/:} Declaración de variables para la gramática Estas pueden ser de dos tipos: Variables Terminales <terminal> Variables No Terminales <non terminal> Las variables terminales serán todos los símbolos terminales de la gramática Las variables no terminales serán todas las variables que representaran producciones 1

Declaración de variables para la gramática La sintaxis de declaración es la siguiente: <tipo de variable> <tipo de dato> <id de la variable> Tipo de dato, puede ser cualquier tipo de datos Java primitivo o complejo Si no lo especificamos, CUP utilizara por defecto el tipo Symbol (recordar ejemplo JFlex) Gramática En este sección se escriben las producciones de la misma Pueden ser de la forma: <no terminal> ::= <terminales o no-terminales>; <no terminal> ::= <terminales o no-terminales> <terminales o no-terminales> ; Un ejemplo Un ejemplo Otro ejemplo Un compilador sencillo de expresiones Soporta +, -, * y / Maneja enteros, flotantes e identificadores Construiremos el analizador léxico y el analizador sintáctico Lo vamos a embeber dentro de un proyecto Eclipse (para posterior reutilización) 2

Proyecto Eclipse Creamos un proyecto Eclipse estándar (Aplicación Java de consola) Separamos directorios src (fuentes) y bin (clases) Creamos un directorio lib (para almacenar bibliotecas externas) Creamos una carpeta language para almacenar los archivos relacionados con JFlex y Cup Sección Java del compilador Relacionada al modelado del lenguaje y al control del proceso de compilación Biblioteca de soporte utilizada para la ejecución del programa (Al ejecutar el parse en runtime necesitamos esto) Todo lo relacionado a la generación de los elementos de análisis (léxico y sintáctico) va en esta carpeta Físicamente, la dependencia anterior va en esta carpeta 3

Archivo con la especificación sintáctica del lenguaje (para CUP) Archivo con la especificación léxica del lenguaje (para JFlex) Script ANT para la ejecución del CUP y JFlex Modelado del lenguaje El proceso de análisis genera esta estructura para posterior procesamiento Clases generadas por el proceso de análisis (léxico y sintáctico) Tester 4

Fuente de JFlex Modelo del lenguaje Representación intermedia Fuente de JFlex Símbolos de la gramática Precedencia 5

Fuente de CUP Fuente de CUP Que hace nuestro compilador? Leer el fuente (en este caso un string, pero puede ser un archivo) Analizarlo lexicalmente Analizarlo sintácticamente Construir una estructura que nos permita procesar lo leído En este caso, solo lo recorremos para mostrarlo en otro formato Nuestro compilador es mas bien un traductor 6