Compiladores e Intérpretes Análisis Semántico IV
|
|
- María Isabel Ruiz Rico
- hace 5 años
- Vistas:
Transcripción
1 1 Compiladores e Intérpretes Análisis Semántico IV Sebastian Gottifredi 2018
2 Repaso 2
3 Repaso El análisis semántico es el encargado validar y entender el significado del programa Para esto el analizador semántico debe: Recolectar, entender y controlar todas las entidades declaradas Chequeo de Declaraciones Recolectar, entender y controlar todas las sentencias asociadas a las entidades recolectadas Chequeo de Sentencias 3
4 Repaso Hay dos alternativas para implementar el analizador semántico: Intercalado con el analizador sintáctico (una pasada) Separado del analizador sintáctico (mas de una pasada) En cualquier caso, es necesario realizar acciones especiales dentro del analizador sintáctico Las Gramáticas de Atributos son las herramientas formales utilizadas para diseñar estas acciones en el analizador sintáctico 4
5 Repaso Los Esquemas de Traducción (EDT) nos dan un orden en el que se ejecutan esas acciones mientras realizamos el análisis sintáctico Para el chequeo de declaraciones, vimos que en el analizador sintáctico se construye la Tabla de Símbolos Sobre la tabla se pueden realizar los controles semánticos referentes a que las entidades estén correctamente declaradas 5
6 Repaso Para el chequeo de sentencias los ASTs En un AST cada tipo de constructor sintáctico que tiene significado dentro del programa es caracterizado por un tipo de nodo Por ej: bloque, asignación, expresión binaria, while, return, etc. NodoAsignacion NodoAcceso ladoizq NodoExpresion ladoder 6
7 Repaso Usamos herencia para caracterizar la relación común es un entre los distintos tipos de nodo Es útil para capturar los contextos donde podemos tener distintos tipos de nodos 7
8 Chequeo de Sentencias 8
9 Chequeo de Sentencias El Chequeo de Sentencias consiste en chequear que el cuerpo de los métodos y constructores no tiene errores semánticos. Está centrado en el chequeo de tipos y la resolución de nombres en sentencias y expresiones 10
10 Resolución de Nombres La resolución de nombres se refiere a que cuando se utiliza un Identificador en una expresión o sentencia, se controle que sea el nombre de la entidad adecuada. Por ejemplo en MiniJava, si nos la Clase encontramos Actual con: x( ) y.x( ) x y.x x debe ser el nombre de un método (propio o heredado) en x debe ser el nombre de un método (propio o heredado) de la Clase declarada para y x puede ser una variable local o un parámetro del método actual, o sino una variable de instancia de la clase actual x debe ser el nombre de una variable de Instancia de la Clase declarada para y
11 Resolución de Nombres La clave del proceso de resolución de nombres es como buscar los nombres en la tabla de símbolos Para eso la tabla de símbolos debe proveer las herramientas de búsqueda adecuadas Por ejemplo, en las expresiones: 4+x 1. Busco a x en la tabla de variables locales y parámetros del método actual. 2. Si no esta en esa tabla, busco x en la tabla de atributos de la clase actual. 3. Sino ERROR! 11
12 Resolución de Nombres La clave del proceso de resolución de nombres es como buscar los nombres en la tabla de símbolos Para eso la tabla de símbolos debe proveer las herramientas de búsqueda adecuadas Por ejemplo, en las expresiones: 4+x 10*m1(7) 1. Busco a m1 en la tabla de métodos de la clase actual. 2. Sino esta ERROR! 12
13 Resolución de Nombres Entonces el objetivo de la resolución de nombres es controlar que un nombre en cierto contexto refiere a la entidad adecuada Que sea la entidad adecuada depende de donde busquemos en la tabla de símbolos Si no esta en la tabla que corresponde se produce un error semántico El otro objetivo de la resolución de nombres es obtener la entrada de la entidad para poder efectuar: Chequeo de Tipos Traducción 13
14 Chequeo de Tipos El chequeo de tipos es el encargado de hacer cumplir las restricciones impuestas por las reglas del sistema de tipos del lenguaje Estas reglas en parte son las que indican como se pueden utilizar las entidades tipadas dentro de las sentencias del lenguaje Es decir, controlar que cuando un elemento tipado (variable, función, expresión) es utilizado en un contexto su tipo es el adecuado Si un elemento tipado no tiene el tipo esperado en el contexto utilizado se produce un error de tipos 14
15 Chequeo de Tipos En el chequeo de tipos es donde controlamos si los operadores utilizados en una operación son de tipos validos Por lo tanto, donde aplicaremos/consideraremos las reglas de tipos del lenguaje vinculadas a: Sobrecarga Coerción Equivalencia/Compatibilidad Polimorfismo 15
16 Chequeo de Tipos Como vieron en lenguajes el chequeo de tipos puede realizarse de dos maneras (no necesariamente disjuntas): Chequeos Estáticos: controles que se realizan en tiempo de compilación, durante el análisis semántico Chequeos Dinámicos: controles que se realizan en ejecución, donde el compilador genera código para realizar los cheques En esta clase nos centraremos en los chequeos estáticos. 16
17 Chequeo de Tipos Para poder realizar sus tareas de manera estática el chequeo de tipos requiere que los tipos de los elementos: Estén declarados, o Sean inferibles estáticamente Por ejemplo, en MiniJava: Por esta razón el chequeo de tipos no solo se encarga de controlar, sino puede llegar a tener que determinar tipos Los tipos estáticos de métodos y variables se declaran Los tipos estáticos de las expresiones se infieren estaticamente 17
18 Chequeo de Tipos En general el chequeo de tipos, implica chequear que: Los tipos de la expresión usada en una sentencia sean los requeridos Por ejemplo, en MiniJava: El tipo de la expresión de un while sea booleano El tipo la expresión del lado derecho de una asignación sea igual o un subtipo del tipo de la variable correspondiente con el identificador al final de la cadena del lado izquierdo
19 Chequeo de Tipos En general el chequeo de tipos, implica chequear que: Los tipos de las sub-expresiones en una expresión sean los adecuados. Por ejemplo, en MiniJava: El tipo de las sub-expresiones de una expresión binaria con operador + sea int El tipo de la sub-expresión de una expresión unaria con operador! sea boolean
20 Chequeo de Tipos y Resolución de Nombres En las expresiones y sentencias donde debemos realizar chequeos de tipos pueden aparecer nombres Al realizar el chequeo de tipos debemos resolver a que entidades hacen referencia eso nombres para obtener su tipo y controlar que se esta usando de forma adecuada Por lo tanto, la resolución de nombres se suele realizar en conjunto con (o como parte de) el chequeo de tipos 20
21 Chequeo de Sentencias en Analizadores de una Pasada 21
22 Chequeo Sentencias Una Pasada Cuando el análisis semántico se realiza de manera intercalada con el analizador sintáctico: El chequeo de sentencias se realiza a media que se van reconociendo sintácticamente las sentencias del programa Requiere que no haya referencias hacia adelante NO es el caso de MiniJava 22
23 Chequeo Sentencias Una Pasada EDT El diseño de los chequeos de tipos y la resolución de nombres se realiza mediante acciones en la EDT Se utiliza a la tabla de símbolos como una estructura global Para determinar los tipos estáticos de la expresiones se utilizan atributos de la gramática La complejidad de esta tarea esta asociada a la estructura de la gramática! 23
24 Chequeo de Sentencias sobre ASTs 25
25 Chequeo Sentencias Dos Pasadas Cuando el chequeo de sentencias se realiza de manera separada al sintáctico, se desarrolla sobre una representación alternativa del código fuente Nosotros utilizamos los ASTs como tal representación Este es el caso de MiniJava Por lo cual el modelo que se presentará y los ejemplos a continuación se corresponden con ese lenguaje. 26
26 Chequeo Sentencias Dos Pasadas ASTs Al diseñar los nodos del AST seguimos la intuición: Cada tipo de nodo se corresponde con un constructor sintáctico que tiene significado Por lo tanto, los controles semánticos van a estar asociados a cada tipo de nodo Intuitivamente entonces el chequeo de sentencias se realizará al visitar adecuadamente los nodos del AST 27
27 Chequeo Sentencias Dos Pasadas ASTs a = 4*(b+2); a Variable Token Asignación Lado Izq Lado Der 4 Entero Token Expresión Binaria Lado Izq Lado Der TokenOp * Expresión Binaria Lado Izq Lado Der TokenOp + Variable b Token 2 Entero Token
28 Chequeo Sentencias Dos Pasadas ASTs a = 4*(b+2); a Variable Token Chequear la asignación implica chequear el lado izquierdo y el lado derecho, obtener sus tipos y ver que sean compatibles Asignación Lado Izq Lado Der 4 Entero Token Expresión Binaria Lado Izq Lado Der TokenOp * Expresión Binaria Lado Izq Lado Der TokenOp + Variable b Token 2 Entero Token
29 Chequeo Sentencias Dos Pasadas ASTs a = 4*(b+2); a Variable Token Asignación Lado Izq Lado Der Chequear una Variable implica ver si está en la tabla de parámetros o variables del método actual, o sino si es una variable 4 de instancia de la clase actual y, en caso de estar, devolver su tipo Entero Token Expresión Binaria Lado Izq Lado Der TokenOp * Expresión Binaria Lado Izq Lado Der TokenOp + Variable b Token 2 Entero Token
30 Chequeo Sentencias Dos Pasadas ASTs a = 4*(b+2); a Variable Token Chequear una expresión binaria, implica chequear sus dos sub-expresiones y luego ver que sus tipos sean compatibles con el operador Asignación Lado Izq Lado Der 4 Entero Token Expresión Binaria Lado Izq Lado Der TokenOp * Expresión Binaria Lado Izq Lado Der TokenOp + Variable b Token 2 Entero Token
31 Chequeo Sentencias Dos Pasadas ASTs a = 4*(b+2); Chequear un Entero, implica retornar tipo Entero a Variable Token Asignación Lado Izq Lado Der 4 Entero Token Expresión Binaria Lado Izq Lado Der TokenOp * Expresión Binaria Lado Izq Lado Der TokenOp + Variable b Token 2 Entero Token
32 Chequeo Sentencias Dos Pasadas ASTs El chequeo de sentencias se realiza mientras que se van recorriendo los AST utilizando la información almacenada en la TS. Aprovechando como diseñamos los AST: Cómo sería una forma conveniente de estructurar la implementación estos controles?
33 Chequeo Sentencias ASTs Implementación Una implementación posible: Agregamos a cada tipo de nodo del AST un método donde implementaremos los controles asociados al nodo void chequear()* void chequear() void chequear() void chequear()
34 Chequeo Sentencias ASTs Implementación Una implementación posible: Agregamos a cada tipo de nodo del AST un método donde implementaremos los controles asociados al nodo void chequear()* Tipo chequear()* void chequear() void chequear() void chequear() Tipo chequear() Tipo chequear() Tipo chequear()
35 Chequeo Sentencias ASTs Implementación Las claves para implementar el chequeo de sentencias recorriendo el AST es que para cada nodo: Realizar los controles que le corresponden según al significado del nodo Delegar el chequeo de sentencias a cada uno de sus hijos 36
36 Chequeo Sentencias ASTs Implementación Pizarrón! Por Ejemplo (Pseudo codigo) NodoWhile NodoExpresion Condicion NodoSentencia Sentencia void chequear() Si el tipo LadoDer.chequear() no es el mismo o hereda del tipo de LadoIzq.chequear() entonces ERROR! Si Tipo de Condicion.chequear() no es boolean entonces ERROR! sino Sentencia.chequear() NodoAsignacion NodoAcceso LadoIzq NodoExpresion LadoDer token Simbolo void chequear()
37 Chequeo Sentencias ASTs Implementación El orden en que se realizan los controles y la delegación es importante ya que para los controles unos pueden depender de otros Si el tipo LadoDer.chequear() no es el mismo o hereda del tipo de LadoIzq.chequear() entonces ERROR! NodoAsignacion NodoVar LadoIzq NodoExpresion LadoDer token Simbolo void chequear() El control de la asignación depende de los tipos resultantes de los chequeos de sentencias de su lado derecho y de su lado izquierdo 38
38 Chequeo Sentencias ASTs Implementación En la asignación el nodo padre (nodoasignacion) depende de los resultados del control de sus hijos (lado izq y lado der) Existen situaciones inversas, donde un nodo hijo necesita información de un nodo padre Por ejemplo: Llamadas o acceso a atributos encadenados v.x Variable Encadenado Token v Variable Encadenada Encadenado Token x 39
39 Chequeo Sentencias ASTs Implementación En la asignación el nodo padre (nodoasignacion) depende de los resultados del control de sus hijos (lado izq y lado der) Chequear una variable encadenada implica controlar que este en la tabla de atributos de la clase correspondiente al tipo resultante de chequear al nodo ancestro (lo que esta a izquierda del punto). El tipo resultante dependerá de si es el ultimo elemento encadenado. Si lo es será el tipo de la variable, sino será el resultante de chequear lo encadenado Existen situaciones inversas, donde un nodo hijo necesita información de un nodo padre Por ejemplo: Llamadas o acceso a atributos encadenados v.x Variable Encadenado Token v Variable Encadenada Encadenado Token x 40
40 Chequeo Sentencias ASTs Implementación Cómo podemos resolver esto? Agregando parámetros de entrada en los métodos de chequeos de sentencias de los nodos correspondientes NodoOperando* Encadenado* Pizarrón! Tipo chequear() Tipo chequear(tipo t)* NodoVar Token nombre Encadenado cad Tipo chequear() NodoVarEncadenada Token nombre Encadenado cad Tipo chequear(tipo t) NodoLlamadaEncadenada Token nombre Lista<NodoExpresion> parametros Encadenado cad Tipo chequear(tipo t) 41
41 Chequeo Sentencias ASTs Implementación Cómo se estructura el chequeo de sentencias de todo el programa en un lenguaje como MiniJava? Debemos controlar el código de todas las unidades (métodos/constructores) del programa fuente Programa esta dividido en clases Básicamente realizar chequeo de sentencias para una clase implica realizar el chequeo de sentencias para todas sus unidades El chequeo de sentencias de un método/constructor implica realizar el chequeo del bloque principal de la unidad 42
42 Chequeo Sentencias ASTs Implementación El chequeo de sentencias usa las entidades declaradas para: Resolver Nombres Chequear sus tipos Las entidades deben estar correctamente declaradas!!! Por lo tanto debemos realizar primero el chequeo de declaraciones TS + ASTs Chequeo de Declaraciones + Consolidación Analizador Semántico TS* + ASTs Chequeo de Sentencias 43
43 Chequeo Sentencias ASTs Implementación En los lenguajes como MiniJava donde al herencia se implementa por copia, un método puede aparecer en la tabla de métodos de mas de una clase Qué consideración deberíamos tener en cuenta al realizar el chequeo de sentencias respecto a esto? Solo debemos chequear el cuerpo de un método en la clase donde fue declarado! 44
44 Chequeo Sentencias Errores Los errores semánticos en el chequeo de sentencias se producen en general cuando: Un nombre utilizado en una sentencia no se corresponde con la entidad adecuada al contexto donde es utilizado Se detecta una incompatibilidad de tipo en el contexto de una expresión o sub-expresion 45
45 Chequeo Sentencias Errores Para reportar los errores es necesario indicar en que numero de línea se produce el error En la segunda pasada ya no tenemos los tokens Por lo tanto, al diseñar los Nodos del AST se suele almacenar información adicional respecto al numero de línea Usualmente se determina con el token utilizado para caracterizar sintácticamente al nodo 46
Compiladores e Intérpretes Análisis Semántico I
1 Compiladores e Intérpretes Análisis Semántico I Sebastian Gottifredi 2017 Organización Repaso Intuición General del Análisis Semántico Gramáticas de Atributos Funcionamiento Atributos: Sintetizados-Heredados-Intrinsecos
Más detallesCompiladores e Intérpretes Semántica de MiniJava Segundo Cuatrimestre de 2016
Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Compiladores e Intérpretes Semántica de MiniJava Segundo Cuatrimestre de 2016 1. Introducción Este documento una descripción
Más detallesCOMPILADORES. Tema 4. Análisis semántico
COMPILADORES Tema 4. Análisis semántico Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 dtorres@mixteco.utm.mx Contenido 1. Funcionalidad del
Más detallesAnálisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas
Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semático v1.2 c 2005 José Fortes Gálvez p.1 Análisis?... semántico? La semántica corresponde al significado asociado
Más detallesANÁLISIS SEMÁNTICO GRAMÁTICAS DE ATRIBUTOS Y TIPOS
Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público
Más detallesAnálisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas
Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semático c 2001 José Fortes Gálvez p.1 Análisis?... semántico? La semántica corresponde al significado asociado
Más detallesTema 5. Análisis semántico
Departamento de Tecnologías de la Información Tema 5 Análisis semántico Ciencias de la Computación e Inteligencia Artificial Índice 5.1 Características del análisis semántico 5.2 Gramáticas atribuidas
Más detallesIntroducción. Análisis Semántico. José M. Castaño. Teoría de Lenguajes 2011 Departamento de Computación FCEyN, UBA
Análisis Semántico José M. Castaño Teoría de Lenguajes 2011 Departamento de Computación FCEyN, UBA Compiladores Análisis Léxico Análisis Sintáctico Análisis Semántico Generación Código Intermedio Optimización
Más detallesDiseño de Compiladores I. Estructura General de un Compilador
Diseño de Compiladores I Estructura General de un Compilador PROGRAMA FUENTE COMPILADOR SALIDA Mensajes de Error 2 Un compilador es un programa que traduce un programa escrito en lenguaje fuente y produce
Más detallesCompiladores e Intérpretes
Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2018 1. Introducción Este documento
Más detallesANÁLISIS SEMÁNTICO LA TABLA DE SÍMBOLOS
Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público
Más detallesGENERACIÓN DE CÓDIGO INTERMEDIO ÁRBOLES DE SINTAXIS ABSTRACTA (ASA)
Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público
Más detallesCompiladores e Intérpretes Generación de Código Máquina e Intérpretes
1 Compiladores e Intérpretes Generación de Código Máquina e Intérpretes Sebastian Gottifredi 2017 Repaso 2 Repaso Para entender y controlar la estructura de un programa fuente hay que analizar si sigue
Más detallesDiseño de compiladores Recordando la clase anterior
Diseño de compiladores Recordando la clase anterior Control de Tipos public class Clase1 implements Interfaz1 private string entero1; void metodo1() int[] x = new string; x[5] = entero1 * y; void metodo1()
Más detallesAnálisis Semántico y Traducción Dirigida por la Sintaxis. Programación II Margarita Álvarez
Análisis Semántico y Traducción Dirigida por la Sintaxis Programación II Margarita Álvarez Análisis Semántico Comprobación estática Comprobación de tipos: la aplicación de los operadores y operandos deben
Más detallesCompiladores e Intérpretes Análisis Léxico
1 Compiladores e Intérpretes Análisis Léxico Sebastian Gottifredi 2017 Organizacion Esquema General de Análisis Léxico Tokens Especificando Tokens Expresiones Regulares Reconociendo Tokens Autómatas Finitos
Más detallesPRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA
PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA El objetivo de la práctica es desarrollar un compilador utilizando las herramientas flex y bison y el lenguaje
Más detallesNOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA EN CIENCIAS Y SISTEMAS NOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2 CODIGO: 781 CREDITOS: 5 AREA A LA
Más detallesBison. Introducción. Índice. Introducción Uso de Bison con Flex. Formato del fichero de especificación de Bison
Bison Índice Marina de la Cruz Alfonso Ortega Introducción Uso de Bison con Flex Construcción del programa objetivo alfa Comunicación entre las funciones main(), yylex() e yyparse() Formato del fichero
Más detallesUnidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.
Unidad IV Métodos. 4.1 Definición de un método. El polimorfismo, en programación orientada a objetos, se refiere a la posibilidad de acceder a un variado rango de funciones distintas a través del mismo
Más detallesAnálisis semántico. Análisis semántico. Índice (I)
Análisis semántico Índice (I) Marina de la Cruz Alfonso Ortega Objetivo del análisis semántico Decisiones para la construcción de un analizador semántico Análisis semántico con Bison Nivel de indirección
Más detallesINTRODUCCIÓN AL PROCESO DE COMPILACIÓN
INTRODUCCIÓN AL PROCESO DE COMPILACIÓN El programa que se debe compilar es una secuencia de caracteres que termina con un centinela. CONCEPTOS BÁSICOS Un compilador es un complejo programa que lee un programa
Más detallesYacc/Bison. Introducción
Yacc/Bison Índice Marina de la Cruz Alfonso Ortega Introducción Uso de Yacc/Bison con Lex/Flex Construcción del programa objetivo casple Comunicación entre las funcionesmain(), yylex() eyyparse() Formato
Más detallesUnidad I: Análisis semántico
Unidad I: Análisis semántico 1.1 Arboles de expresiones Los árboles de expresiones representan el código de nivel del lenguaje en forma de datos. Los datos se almacenan en una estructura con forma de árbol.
Más detallesConcepto de compilador Intérprete Fases de un Compilador Herramientas de construcción de Compiladores
18:55 1 2 Temas Concepto de compilador Intérprete Fases de un Compilador Herramientas de construcción de Compiladores Objetivo Que el estudiante logre conocer, comprender y manejar conceptos y técnicas
Más detallesUnidad II: Análisis semántico
Unidad II: Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico
Más detallesPráctica 01 - Preprocesamiento básico para un código fuente en lenguaje C Compiladores - Profr. Edgardo Adrián Franco Martínez
2 Contenido Introducción Análisis léxico Funciones del analizador léxico Preprocesamiento básico de un código fuente de C Manejo de búferes 3 Introducción Para la construcción de todo traductor, compilador
Más detallesFLEX: A FAST LEXICAL ANALYZER GENERATOR
FLEX: A FAST LEXICAL ANALYZER GENERATOR Especificación Léxica Fichero.l flex Programa con la implementación del AFD, código fuente, yy.lex.c yy.lex.c Compilador de C milex (ejecutable) cc yylex.c o milex
Más detallesLenguajes de programación
Introducción Lenguajes de programación Primera generación: lenguajes máquina Los programas se escriben en código binario 000001011010000000000000 Segunda generación: lenguajes simbólicos Cada instrucción
Más detallesCÓMO DESARROLLAR Y PROBAR PROGRAMAS?, COMPRUÉBALO!
CÓMO DESARROLLAR Y PROBAR PROGRAMAS?, COMPRUÉBALO! AUTORÍA MARÍA CATALÁ CARBONERO TEMÁTICA PROGRAMACIÓN ETAPA CICLO MEDIO Y SUPERIOR DE INFORMÁTICA Resumen A la hora de realizar un programa en cualquier
Más detallesNOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA EN CIENCIAS Y SISTEMAS NOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2 CODIGO: 781 CREDITOS: 5 AREA A LA
Más detallesTema 5: Traducción dirigida por la sintaxis
Tema 5: Traducción dirigida por la sintaxis Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis
Más detallesIntroducción. El proceso de traducción
Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso
Más detalles05 Análisis léxico I Compiladores - Profr. Edgardo Adrián Franco Martínez
2 Contenido Introducción Análisis léxico Funciones del analizador léxico Tokens y lexemas Palabras reservadas Estrategias de recuperación de errores léxicos Manejo de búferes 3 Introducción Para la construcción
Más detallesIntroducción a OOP. Programación Orientada a Objeto
Introducción a OOP Programación Orientada a Objeto Evolución Programación no Estructurada, Programación procedimental, Programación modular y Programación orientada a objetos. Programación no Estructurada
Más detallesGeneración de Código Intermedio
Generación de Código Intermedio Programación II Margarita Álvarez Generación de código intermedio Con la generación de código intermedio se inicia la tarea de síntesis. Aunque un programa fuente se puede
Más detallesClases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos Construyendo clases nuevas La forma más simple de una clase en Java es: Class Nombre_de_la_Clase { } /* constructores */ /* métodos
Más detallesNOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2 CÓDIGO: 781 CRÉDITOS: 5 ÁREA A LA QUE PERTENECE: POST-REQUISITO:
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERÍA ESCUELA DE CIENCIAS NOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2 CÓDIGO: 781 CRÉDITOS: 5 ESCUELA: Ciencias y Sistemas ÁREA
Más detallesCompiladores e Intérpretes Análisis Sintáctico
1 Compiladores e Intérpretes Análisis Sintáctico Sebastian Gottifredi 2017 Organizacion Contexto Motivación Reglas de Sintaxis Construyendo Analizadores Sintácticos Ambigüedad Analizadores Sintácticos
Más detallesANÁLISIS SEMÁNTICO VERIFICACIÓN DE TIPOS
Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público
Más detallesUna clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos
Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos Definición formal del lenguaje por comprensión L = {C n D m \ n,m >0 Donde C representa
Más detallesCompiladores: Ambientes para Ejecución. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón
Compiladores: Ambientes para Ejecución Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón Procedimientos Definición de un Procedimiento: es una declaración
Más detallesAlgoritmos y programas. Algoritmos y Estructuras de Datos I
Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de
Más detallesFLEX: A FAST LEXICAL ANALYZER GENERATOR
FLEX: A FAST LEXICAL ANALYZER GENERATOR Especificación Léxica Fichero.l flex Programa con la implementación del AFD, código fuente, yy.lex.c yy.lex.c Compilador de C milex (ejecutable) Para compilar flex
Más detallesPROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4
PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4 En esta práctica trabajaremos con ANTLR a nivel semántico utilizando gramáticas con atributos. ANTLR permite implementar con facilidad los dos modelos
Más detallesGramáticas de Atributos
Teoría de Lenguajes Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Etapas de un Compilador Analizador Léxico Analizador Sintáctico (Parser)... Lexer: Genera secuencia de tokens Reporta
Más detallesUNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 2.
UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes Tema 2 Análisis Léxico Javier Vélez Reyes jvelez@lsi.uned.es Objetivos del Tema
Más detallesPráctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones
Práctica 2 Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos
Más detallesTema 5 Tabla de Símbolos
Traductores, Compiladores e Intérpretes 1 Tema 5 También se la llama tabla de nombres o tabla de identificadores y tiene dos funciones principales: - Efectuar chequeos semánticos. - Generación de código.
Más detalles2.2 Nombres, Ligado y Ámbito
2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el
Más detalles16 Análisis sintáctico I
2 Contenido Recordando la estructura de un compilador Recordando el análisis léxico l análisis sintáctico Comparación con el análisis léxico l Rol del Parser Lenguajes de programación Gramáticas structura
Más detallesDOMINIOS COGNITIVOS (Objetos de estudio, temas y subtemas)
UNIVERSIDAD AUTÓNOMA DE CHIHUAHUA Clave: Clave: FACULTAD DE INGENIERÍA DES: Ingeniería Programa(s) Educativo(s): Ingeniería en Ciencias de la Computación Tipo de materia: Obligatoria Clave de la materia:
Más detallesClases y Objetos en C++
Informática II Clases y Objetos en C++ Introducción Las variables de los tipos fundamentales de datos no son suficientes para modelar adecuadamente objetos del mundo real. alto, ancho y longitud para representar
Más detallesPráctica 4 Análisis LALR para milenguaje y construcción de un traductor de milenguaje
Práctica 4 Análisis LALR para milenguaje y construcción de un traductor de milenguaje 1. Objetivos 1. Hacer una introducción práctica a la traducción dirigida por la sintaxis basada en el análisis LALR
Más detallesUnidad 2: Estructuras de Datos estáticas y dinámicas.
FUNCIONES Y PUNTEROS Apunte realizado por Leonel Guccione 1/7 Unidad 2: Estructuras de Datos estáticas y dinámicas. Temas: Algoritmos sobre arreglos: búsqueda del mínimo, máximo, ordenacón por selección
Más detallesUNIDAD 2 Descripción de un programa
Descripción de un programa Estructura general de un programa. Elementos básicos. Tipos de datos simples: enteros, reales y carácter. Representación de datos en memoria. Operaciones sobre tipos de datos
Más detallesProcesadores de lenguaje Tema 6 La tabla de símbolos
Procesadores de lenguaje Tema 6 La tabla de símbolos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen La tabla de símbolos. Requerimientos de información. Diseño de la tabla de
Más detallesBASES DE DATOS 1. Teórico: Diseño Conceptual
BASES DE DATOS 1 Teórico: Diseño Conceptual MODELADO CONCEPTUAL Primera etapa en el diseño de una BD Sub-etapas: Estudio del problema real Especificación usando un lenguaje de muy alto nivel Validar el
Más detallesUnidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas
Unidad V Análisis Semántico M.C. Juan Carlos Olivares Rojas Agenda 5.1 Analizador semántico 5.2 Verificación de tipos en expresiones. 5.3 Conversión de tipos. 5.4 Acciones agregadas en un analizador sintáctico
Más detallesTema: Tabla de Símbolos
Compiladores. Guía 6 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Tabla de Símbolos Contenido En esta guía se desarrollará una tabla de símbolos y se asociará al analizador
Más detallesBases de datos 1. Teórico: Diseño Conceptual
Bases de datos 1 Teórico: Diseño Conceptual Modelado Conceptual Primera etapa en el diseño de una BD Estudio del problema real Especificación usando un lenguaje de muy alto nivel Validar el resultado Actividad
Más detallesComprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.
Elementos básicos de programación en Java Objetivos del tema Conocer la estructura básica de un programa Java. Comprender los conceptos de tipo, valor y variable. Comprender las diferencias entre tipos
Más detallesHerencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos
Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos 1 Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente,
Más detallesPROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07
PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07 1. En qué método de análisis sintáctico puede suceder que en la construcción del árbol de derivación de las posibles expansiones de un símbolo no terminal
Más detallesProgramación Orientada a Objetos en C++
Unidad I Programación Orientada a Objetos en C++ Programación Orientada a Objetos en C++ Programación I - 0416202 Contenido Esta lección abarca los siguientes temas: Estructura y declaración de una clase
Más detallesProcesadores de lenguaje Tema 6 La tabla de símbolos
Procesadores de lenguaje Tema 6 La tabla de símbolos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen La tabla de símbolos. Requerimientos de información. Diseño de la tabla de
Más detallesAsignación Dinámica de Memoria. Agustín J. González Versión original de Kip Irvine ELO 326: Seminario II 2do. Sem. 2001
Asignación Dinámica de Memoria Agustín J. González Versión original de Kip Irvine ELO 326: Seminario II 2do. Sem. 2001 1 Asignación Dinámica Asignación Dinámica es la creación de un objeto mientras el
Más detallesANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa
ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa ANALIZADOR LÉXICO (AL) El Analizador léxico (scanner), lee la secuencia de caracteres del programa fuente, caracter a caracter, y los agrupa para formar unidades
Más detallesQué es el análisis semántico?
Análisis semántico Estrella Pulido Cañabate Qué es el análisis semántico? Fase del compilador en la que se comprueba la corrección semántica del programa Conjunto de subrutinas independientes que pueden
Más detallesLenguaje C, tercer bloque: Funciones
Lenguaje C, tercer bloque: Funciones José Otero 1 Departamento de informática Universidad de Oviedo 28 de noviembre de 2007 Índice 1 Tipo puntero Concepto de puntero Operador dirección Operador indirección
Más detallesNOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2 CÓDIGO: 781 CRÉDITOS: 5 ÁREA A LA QUE PERTENECE:
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA EN CIENCIAS Y SISTEMAS NOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2 CÓDIGO: 781 CRÉDITOS: 5 ESCUELA:
Más detallesContenido. Prefacio Orígenes de la programación orientada a objetos... 1
Prefacio... xv 1. Orígenes de la programación orientada a objetos... 1 1.1 La crisis del software... 1 1.2 Evolución del software... 3 1.3 Introducción a la programación orientada a procedimientos... 4
Más detallesGENERACIÓN DE CÓDIGO INTERMEDIO EJEMPLOS PARA DISTINTAS ESTRUCTURAS DE DATOS
Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público
Más detallesUnidad III: Introducción a la Programación
Unidad III: Introducción a la Programación 3.1 Características del lenguaje de programación Un lenguaje de programación es un idioma artificial diseñado para expresar procesos que pueden ser llevadas a
Más detallesTema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales
Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales Profesor Federico Peinado Elaboración del material José Luis Sia Federico Peinado Facultad de Informática Universidad Complutense
Más detallesTema 6: Clases. Índice
Tema 6: Clases Antonio J. Sierra Índice 1. Fundamentos. 2. Declaración de objetos. 3. Asignación de objetos a variables referencia. 4. Métodos. 5. Constructores. 6. this. 7. Recogida de basura. 8. Modelado
Más detallesFunciones en lenguaje C
Funciones en lenguaje C Funciones Definición: Las funciones son los bloques de construcción básicos de C. Dentro de ellas se da toda la actividad del programa. Criterios para crearlas: Se usa la estrategia
Más detallesTEMA 3: ANÁLISIS SEMÁNTICO
1 TEMA 3: ANÁLISIS SEMÁNTICO OBJETIVO Dar respuesta a las siguientes preguntas: Qué es el análisis semántico de un lenguaje? Cómo se diseña y construye un analizador semántico? EL PROBLEMA DEL CÁLCULO
Más detallesApuntes de Programación y estructuras de datos. Control de datos
Apuntes de Programación y estructuras de datos. Control de datos Nikos Mylonakis, Fernando Orejas y Ana Cristina Zoltan nicos@lsi.upc.edu Dept. Llenguatges i Sistemes Informátics Universitat Politécnica
Más detallesEstructuras de control selectivas
Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2 Concepto de sentencia y estructura de control El cuerpo de los métodos
Más detallesTEMA 6: ANÁLISIS SEMÁNTICO DE EXPRESIONES E INSTRUCCIONES EN L-0
TEMA 6: ANÁLISIS SEMÁNTICO DE EXPRESIONES E INSTRUCCIONES EN L-0 En este tema vamos a mostrar una estrategia para llevar a cabo, partiendo del ASA obtenido en el tema 4, el resto de comprobaciones semánticas
Más detallesConceptos básicos sobre gramáticas
Procesamiento de Lenguajes (PL) Curso 2014/2015 Conceptos básicos sobre gramáticas Gramáticas y lenguajes Gramáticas Dado un alfabeto Σ, un lenguaje es un conjunto (finito o infinito) de cadenas de símbolos
Más detallesFunciones Definición de función
Funciones Definición de función Una función es un bloque de código que realiza una tarea específica. Una función es una porción de programa, identificable mediante un nombre, que realiza determinadas tareas
Más detallesExamen Teórico Convocatoria de Junio de 2012
Examen Teórico Convocatoria de Junio de 2012 Nombre: DNI: Titulación: 1. Sobre el control de errores en Java: a) El siguiente método contiene un error de compilación debido al uso de excepciones. Explica
Más detallesElementos de un programa en C
Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución
Más detallesTema 5: Traducción dirigida por la sintaxis
Tema 5: Traducción dirigida por la sintaxis Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis
Más detallesSeminario de introducción a Bison
Seminario de introducción a Bison David Portolés Rodríguez dporto@unizar.es Lenguajes y Sistemas Informáticos Dpto. de Informática e Ing. de Sistemas Universidad de Zaragoza Qué es Bison? Bison es un una
Más detallesTeoría de lenguajes Oscar BRUNO
Octubre 2014 Guía de Estudio Objetivo: facilitar el abordaje de la temática, y guiar en el proceso de comprensión. Bibliografía: Apunte Volumen 2 de Jorge Daniel Muchnk Presentación: Qué pasa cuando nos
Más detallesTema: Análisis Semántico
Compiladores. Guía 7 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Análisis Semántico Contenido En esta guía se desarrollará una tabla de símbolos y se asociará al analizador
Más detallesManejo de Punteros y objetos en memoria dinámica en C++ Agustín J. González ELO 329
Manejo de Punteros y objetos en memoria dinámica en C++ Agustín J. González ELO 329 Asignación Dinámica de Memoria Asignación Dinámica de memoria es la creación de un objeto mientras el programa está en
Más detallesProcesadores de lenguaje Tema 5 Comprobación de tipos
Procesadores de lenguaje Tema 5 Comprobación de tipos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Sistemas de tipos. Expresiones de tipo. Equivalencia de tipos. Sobrecarga,
Más detallesAnalizador Sintáctico RECURSIVO
Compiladores 1 Argueta Cortes Jairo I. Universidad Nacional Autónoma de México Facultad de Ingeniería Compiladores Grupo 1 Analizador Sintáctico RECURSIVO ALUMNOS: ARGUETA CORTES JAIRO I. MENDOZA GAYTAN
Más detallesSOFTWARE Microsoft Visual Studio 2005.NET FrameWork 2.0
OBJETIVOS! ""# $% % REQUERIMIENTOS SOFTWARE Microsoft Visual Studio 2005.NET FrameWork 2.0 DESCRIPCIÓN En este tutorial se va a revisar la forma de trabajar con los conceptos de OO en Visual Basic.NET.
Más detallesRoberto Carlos Abreu Díaz. October 28, 2009
Binarios binarios Java October 28, 2009 Binarios binarios Java 1 2 Binarios 3 binarios Java Código Java para búsqueda 4 Código Java para inserción 5 Caso 1 Caso 2 Caso 3 Outline Binarios binarios Java
Más detalles