Compiladores e Intérpretes Análisis Semántico I
|
|
- Juan Carlos Guzmán Salazar
- hace 6 años
- Vistas:
Transcripción
1 1 Compiladores e Intérpretes Análisis Semántico I Sebastian Gottifredi 2017
2 Organización Repaso Intuición General del Análisis Semántico Gramáticas de Atributos Funcionamiento Atributos: Sintetizados-Heredados-Intrinsecos Esquema de Traducción Evaluación en un Analizador Sintáctico 2
3 Repaso 3
4 Repaso Para entender y controlar la estructura de un programa fuente hay que analizar si sigue las reglas de sintaxis del lenguaje Estas reglas están expresadas en términos de tokens, mientras que el fuente es una cadena de caracteres El Analizador Léxico es el encargado armar los tokens Para expresar las reglas de sintaxis del lenguaje utilizamos gramáticas libres de contexto 4
5 Repaso El analizador sintáctico es el encargado de reconocer si un programa sigue esas expresadas por la gramática, para eso: La gramática tiene que ser no ambigua Simula el proceso de derivación usando una estrategia: Descendentes: arrancando del no terminal Inicial reconstruir la derivación a izquierda hasta llegar a la cadena Ascendentes: aplican las producciones en orden inverso hasta llegar al símbolo inicial de la gramática 5
6 Repaso Estrategias Descendentes: simular la derivación a izquierda mediante Mediante Tabla LL(1) Recursiva Estrategia Ascendentes: simular la derivación a derecha en orden inverso mediante: Tabla de estados representando posibles prefijos 6
7 Intuición General del Análisis Semántico 7
8 Intuiciones Análisis Semántico La tarea final del compilador es traducir el programa fuente en un código que se pueda ejecutar directamente en la maquina destino Para esto necesita conocimiento del programa que va mas allá de la estructura sintáctica. Informalmente cuando la sintaxis indica la forma valida de un programa la semántica concierne su significado, que es clave para: Controlar que se cumplan las reglas (consistencia de tipos) Obtener información para generar un programa de salida equivalente 8
9 Intuiciones Análisis Semántico Por ejemplo, para un id con lexema x Qué tipo de valor se puede almacenar en x? Si x es una suprograma Cuántos parámetros tiene? Que tipo de valor retorna? En donde es visible x? Si x esta ligado a un objeto Qué mensajes se le pueden enviar? Fue previamente declarado x? Cual es el tipo resultante de evaluar una expresión cuyo valor será almacenado en x? 10
10 Intuiciones Análisis Semántico Las tareas del analizador semántico, en general para un lenguaje de programación con tipado estático, se pueden dividir en dos: 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 11
11 Intuiciones Análisis Semántico Hay dos alternativas para implementar el analizador semántico: Intercalado con el analizador sintáctico Los controles semánticos se implementan dentro del analizador sintáctico Separado del analizador sintáctico Como parte del analizador sintáctico se implementa la construcción de una representación intermedia utilizada por otro modulo encargado del análisis semánticos 12
12 Intuiciones Análisis Semántico En cualquier caso, es necesario realizar acciones especiales dentro del analizador sintáctico O bien para realizar los controles semánticos O para construir la representación intermedia (arboles sintácticos) Las Gramáticas de Atributos son las herramientas formales utilizadas para diseñar estas acciones en el analizador sintáctico 13
13 Gramáticas de Atributos 14
14 Gramáticas de Atributos Son gramáticas libres de contexto aumentadas con conjunto de reglas (acciones) que especifican computaciones Cada regla asocia valores a atributos usando otros atributos Los atributos están asociados a los símbolos de la gramática S E$ E E + T E - T T T (E) string num El + concatena strings, concatena un entero a un string, o suma enteros El solo resta enteros Queremos: Calcular el tipo una expresión en un atributo! S.tipo E.tipo T.tipo 15
15 Gramáticas de Atributos Una regla se utiliza para dar valor a un atributo {T.tipo = tstr} Las reglas se vinculan a producciones de la gramática T string {T.tipo = tstr} Las reglas solo pueden utilizar atributos vinculados a símbolos la producción a la cual están vinculados 16
16 Gramáticas de Atributos En su concepción formal Una regla asociada a una producción asocia el valor de un atributo de los símbolos de la producción, donde el atributo puede Tomar directamente el valor de otro atributo o una constante, T string {T.tipo = tstr} E T {E.tipo = T.tipo} Tomar el valor de una función semántica, la cual puede tener un numero arbitrario de argumentos que solo pueden ser atributos asociados a símbolos de la producción Cuando se repite un símbolo en una producción es posible subindicarlos para distinguirlos entre ellos 17
17 Gramáticas de Atributos En la practica, permitimos que las reglas sean porciones de código en un lenguaje bien definido (el de implementamos del compilador) La intuición es especificar las funciones semánticas in-line E 1 E 2 - T {if(t.tipo == tint && E 2.tipo == tint) E 1.tipo = tint else ERROR} Aun así solo podemos referirnos a atributos asociados a la producción a la cual la regla esta vinculada. Pero, en caso de ser necesario podemos usar variables globales. 18
18 Gramáticas de Atributos S E$ E E + T E - T T T (E) string num El + concatena strings, concatena un entero a un string, o suma enteros El solo resta enteros Queremos: Calcular el tipo una expresión en un atributo! S.tipo E.tipo T.tipo Producción Reglas Semanánticas S E$ {S.tipo = E.tipo} E 1 E 2 + T {if(t.tipo == tstr E 2.tipo == tstr) E 1.tipo = tstr else E 1.tipo = tint} E 1 E 2 - T E T T (E) T string T num {if(t.tipo == tint && E 2.tipo == tint) E 1.tipo = tint else ERROR} {E.tipo = T.tipo} {T.tipo = E.tipo} {T.tipo = tstr} {T.tipo = tint} Pizarrón! 19
19 Funcionamiento de las Gramáticas de Atributos 21
20 Evaluando Atributos y Acciones El proceso de evaluar los atributos aplicando las reglas es denominado anotación o decoración del árbol de derivación En este árbol cada nodo va a estar etiquetado con los atributos asociados al símbolo que tiene asociado Aplica una regla en un nodo solo cuando se hayan calculado todos los valores necesarios para el calculo En general, implica calcular valores de atributos en nodos descendientes y/o hermanos! (8-5)+ hola $ Pizarrón! 22
21 Evaluando Atributos y Acciones E T ( E E T num tipo=tint tipo=tint E tipo=tint tipo=tint tipo=tint - T num S ) tipo=tint tipo=tstr tipo=tstr + T string $ tipo=tstr (8-5)+ hola $ 23
22 Evaluando Atributos y Acciones El orden en el que fuimos calculando los valores de los atributos da el patrón en el que fluye la información a través del árbol Este patrón es denominado flujo de atributos E T ( E E T num tipo=tint tipo=tint E tipo=tint tipo=tint tipo=tint - T num S tipo=tstr ) tipo=tint tipo=tstr + T string $ tipo=tstr (8-5)+ hola $ 24
23 Atributos Sintetizados Un atributo es sintetizado si toma valor solo cuando aparece asociado al símbolo NT de la parte izquierda de la producción Es sintetizado el atributo tipo del ejemplo anterior? En el árbol decorado este comportamiento se ve cuando un atributo hace fluir información de abajo hacia arriba. Mediante el flujo se puede ver que la información sube (se sintetiza) a través de los nodos del árbol SI! 25
24 Atributos Intrínsecos Un atributo es intrínseco cuando su valor se asume dado de antemano Son los atributos asociados a los tokens Pueden verse también como atributos sintetizados, los cuales se sintetizan de manera externa Por ejemplo, el lexema de un token es un atributo intrínseco 26
25 Atributos Heredados Un atributo es heredado si toma valor solo cuando aparece asociado al símbolo de la parte derecha de la producción. En el árbol estos atributos permiten la información fluya de arriba hacia abajo o desde los costados S D$ D T L T id pstring pint L id R R id R e Gramática para declarar variables Queremos guardar el nombde de cada id con su respectivo tipo, usando la función Guardar(nombre, tipo) T.tipo (sintetizado) E.tipo (heredado) R.tipo (heredado) token.lex(intrínseco) Pizarrón! 27
26 Atributos Heredados Producción S D$ D T L T id T pstring T pint L id R R 1 id R 2 R e Reglas Semanánticas {L.tipo = T.tipo} {T.tipo = id.nombre} {T.tipo = tstr} {T.tipo = tint} {Guardar(id.lex,L.tipo)} {R.tipo = L.tipo} {Guardar(id.lex, R 1.tipo)} {R 2.tipo = R 1.tipo} int a1 v1 x Pizarrón! 28
27 Atributos Heredados Mediante el flujo se puede ver que la información pasa con atributos heredados va hacia abajo y hacia los laterales T pint tipo=tint D L Id Lex=a1 Id Lex=v1 int a1 v1 x tipo=tint R Id tipo=tint guardar(a1,tint) Lex=x R tipo=tint guardar(v1,tint) R tipo=tint guardar(x,tint) 29
28 Evaluando Atributos y Acciones Producción Producción S D$ D$ D T L T id T id pstring T pint pstring L T id pint R L id R R 1 id R 2 R 1 id R 2 R e R e Reglas Semanánticas Reglas Semanánticas {for(x in L.lista) {L.tipo Guardar(x, = T.tipo} T.tipo) {T.tipo } = id.lex} {T.tipo = tstr} id.nombre} {T.tipo = tint} tstr} {Guardar(id.lex,L.tipo)} {T.tipo = tint} {R.tipo {R.lista.add(id.nombre)) = L.tipo} {Guardar(id.lex, {L.lista = R.lista} R 1.tipo)} {R.tipo = R 1.tipo} 2.lista.add(id.nombre))} {R 1.lista = R 2.lista} {R.lista = new List()} Hubiese sido posible resolver esto usando solo atributos sintetizados? Si! Con una lista 30
29 Evaluando Atributos y Acciones Veamos otro ejemplo Pizarrón! S E$ E E + T E - T T T (E) string num El + concatena strings, concatena un entero a un string, o suma enteros El solo resta enteros Queremos: Calcular el tipo una expresión en un atributo! S E$ E T R R +TR -TR e T (E) string num S.tipo (sintetizado) E.tipo (sintetizado) T.tipo (sintetizado) R.tipoS (sintetizado) R.tipoH (heredado) token.nombre(intrínseco) 31
30 Evaluando Atributos y Acciones Producción S E$ E T R R 1 +TR 2 R 1 -TR 2 R e T (E) T string T num Reglas Semanánticas {R.tipoH = T.tipo} {E.tipo = R.tipoS} {if(t.tipo == tstr R 1.tipoH == tstr) R 2.tipoH = tstr else R 2.tipoH = tint} {R 1.tipoS = R 2.tipoS} {if(t.tipo == tint && R 1.tipoH == tint) R 2.tipoH = tint else ERROR} {R 1.tipoS = R 2.tipoS} {R.tipoS = R.tipoH} {T.tipo = E.tipo} {T.tipo = tstr} {T.tipo = tint} 32
31 Evaluando Atributos y Acciones S tipos=tstr Pizarrón! E $ T tipo=tint R tipos=tstr tipoh=tint ( E tipo=tint ) + T tipo=tstr R tipos=tstr tipoh=tstr T tipo=tint R tipos=tint tipoh=tint string tipo=tstr num - T tipo=tint R tipos=tint tipoh=tint num tipo=tit (8-5)+ hola $ 33
32 Esquemas de Traducción Como vimos en para decorar los arboles seguimos un orden al aplicar las acciones vinculadas a las producciones Los esquemas de traducción (EDT) nos permiten embeber las reglas en la gramática para indicar el orden en que las vamos a aplicar, si seguimos una estrategia de primero en profundidad de izquierda a derecha para recorrer el arbol. En un EDT vamos a tener producciones, por ejemplo, de la forma: A B {C.y = B.x} C {A.z = C.w} 34
33 Esquemas de Traducción Producción Reglas Semanánticas S D$ D T L T id T pstring T pint L id R R 1 id R 2 R e {L.tipo = T.tipo} {T.tipo = id.nombre} {T.tipo = tstr} {T.tipo = tint} {Guardar(id.lex,L.tipo)} {R.tipo = L.tipo} {Guardar(id.lex, R 1.tipo)} {R 2.tipo = R 1.tipo} Esquema de Traducción (EDT) S D$ D T {L.tipo = T.tipo} L T id {T.tipo = id.nombre} T pstring {T.tipo = tstr} T pint {T.tipo = tint} L id {R.tipo = L.tipo} R {Guardar(id.lex,L.tipo)} R 1 id {Guardar(id.lex, R 1.tipo)} R 2 {R 2.tipo = R 1.tipo} R e 35
34 Esquemas de Traducción Esquema de Traducción S E$ E T {R.tipoH = T.tipo} R {E.tipo = R.tipoS} R 1 +T {if(t.tipo == tstr R 1.tipoH == tstr) R 2.tipoH = tstr else R 2.tipoH = tint} R 2 {R 1.tipoS = R 2.tipoS} R 1 -T {if(t.tipo == tint && R 1.tipoH == tint) R 2.tipoH = tint else ERROR} R 2 {R 1.tipoS = R 2.tipoS} R e {R.tipoS = R.tipoH} T (E) {T.tipo = E.tipo} T string {T.tipo = tstr} T num {T.tipo = tint} Pizarrón! 36
35 Esquemas de Traducción No cualquier gramática de atributos tiene un esquema de traducción asociado Por qué? En una EDT un atributo heredado asociado a un símbolo en la parte derecha de una producción solo puede depender de atributos heredados del simbolo de la parte izquierda o de atributos (sintetizados o heredados) de símbolos mas a la izquierda en la parte derecha Por qué? En la EDT la evaluación se hace de izquierda a derecha y en profunidad A B C {B.x = C.y} 37
36 Evaluando EDTs en Analizadores Sintáctico 38
37 EDTs en Analizadores Sintácticos Para reconocer sintácticamente un programa el analizador sintáctico simula el mecanismo de derivación usando las reglas de la gramática Una derivación tiene un árbol de derivación asociado Entonces, el analizador sintáctico simula la construcción del árbol de derivación! 39
38 EDTs en Analizadores Sintácticos El analizador construye implícitamente el árbol Tenemos que combinar orden de aplicación de las acciones de la gramática con tal construcción En particular, en los analizadores descendentes predictivos el árbol se construye siguiendo una política de primero en profundidad de izquierda a derecha. Es el orden de evaluación que asume la EDT! 40
39 EDTs en Analizadores Sintácticos En los analizadores descendentes predictivos recursivos, la implementación de una EDT es directa Cómo codificamos las acciones? Cuando codificamos la parte derecha, también codificamos las acciones siguiendo el orden en el que aparecen en la producción Cómo modelamos los atributos sintetizados? Son retornados por el subprograma correspondiente al NT asociado al atributo Cómo modelamos los atributos heredados? Son los parámetros de entrada correspondiente al NT asociado al atributo 41
40 EDTs en Analizadores Sintácticos Por ejemplo: A r B {C.y = B.x} C {A.z = C.w} void A(){ match( r ) B() C() } A(){ match( r ) x = B() w = C(x) return w} 42
41 EDTs en Analizadores Sintácticos Esquema de Traducción (EDT) S D$ D T {L.tipo = T.tipo} L T id {T.tipo = id.nombre} T pstring {T.tipo = tstr} T pint {T.tipo = tint} L id {R.tipo = L.tipo} R {Guardar(id.lex,L.tipo)} R 1 id {Guardar(id.lex, R 1.tipo)} R 2 {R 2.tipo = R 1.tipo} R e void D() Tipo t = T() L(t) Tipo T() if(tkact es id) String nom = tkact.lex match( id ) return new TipoClase(nom) else if(tkact es pint) match( pint ) return new TipoInt() else if(tkact es pstring) match( pstring ) return new TipoInt() else ERROR SINTACTICO! void L(Tipo t) String nom = tkact.lex match( id ) R(t) Guardar(nom, t) void R(Tipo t) if(tkact es id) String nom = tkact.lex match( id ) R(t) Guardar(nom, t) else if(tkactual es $) else ERROR SINTACTICO 43
42 EDTs en Analizadores Sintácticos En los analizadores sintácticos descendentes basados en tabla lo que hacemos es tratar a las acciones como: Un símbolo mas a la hora de apilarlos cuando aplicamos una producción Una porción de código a ejecutar cuando esta en el tope de la pila 44
43 EDTs en Analizadores Sintácticos Los métodos ascendentes LR solo pueden trabajar con EDTs donde las acciones estén en lugares de la producción donde no hay ambigüedad de que se reducirá por esa producción Por lo tanto, estos métodos trabajan adecuadamente con gramáticas que no tienen atributos heredados La intuición es que las acciones semánticas asociadas a una regla se ejecutan cuando se realiza una reducción 45
PROCESADORES 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 detallesANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos.
ANÁLISIS SEMÁNTICO El análisis semántico dota de un significado coherente a lo que hemos hecho en el análisis sintáctico. El chequeo semántico se encarga de que los tipos que intervienen en las expresiones
Más detallesPROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR:
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERÍA ESCUELA DE CIENCIAS PROGRAMA DE LABORATORIO CÓDIGO: 777 CRÉDITOS: 4 NOMBRE CURSO: ESCUELA: PRE-REQUISITO: Organización de Lenguajes y Compiladores
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 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 detallesCapítulo 5: Traducción Dirigida por Sintaxis
Capítulo 5: Traducción Dirigida por Sintaxis Javier Carvajal Universidad de Costa Rica, Escuela de Ciencias de la Computación e Informática, San José, Costa Rica, francisco.carvajal@ecci.ucr.ac.cr and
Más detallesLas Etapas de la Compilación
Las de la Compilación El en la Compilación Universidad de Cantabria Outline 1 El Problema 2 Las y el Qué pasos son necesarios dar para hallar la estructura de un programa? En qué pasos podemos dividirlos
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 detallesMétodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo
TEMA 2: CONCEPTOS BÁSICOS DE ALGORÍTMICA 1. Definición de Algoritmo 1.1. Propiedades de los Algoritmos 2. Qué es un Programa? 2.1. Cómo se construye un Programa 3. Definición y uso de herramientas para
Más detallesConstrucción de tablas de análisis sintáctico LL(1)
Construcción de tablas de análisis sintáctico LL(1) Universidad de Costa Rica Escuela de Ciencias de la Computación e Informática Diego Centeno Gerardo Cortés Juan Diego Alfaro Resumen. A la medida en
Más detallesLEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.
LEX Estructura de un programa en LEX { definiciones { reglas { subrutinas del usuario Las definiciones y subrutinas son opcionales. El segundo es opcional pero el primer indica el comienzo de las reglas.
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 detallesMétodos que devuelven valor Dado el siguiente triángulo rectángulo:
Métodos que devuelven valor Dado el siguiente triángulo rectángulo: hipotenusa altura base Para dibujar este triángulo necesitamos los siguientes datos: base y altura La base y la altura, se utilizarán
Más detallesTipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos
Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos
Más detallesGuía práctica de estudio 05: Diagramas de flujo
Guía práctica de estudio 05: Diagramas de flujo Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 05: Diagramas de
Más detallesSISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos
TEMA 2 Diseño de Algoritmos 7 2. DISEÑO DE ALGORITMOS 2.1. Concepto de Algoritmo En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus
Más detallesTema 3. Análisis sintáctico descendente
Departamento de Tecnologías de la Información Tema 3 Análisis sintáctico Ciencias de la Computación e Inteligencia Artificial Índice 3.1 Características del análisis sintáctico 3.2 Gramáticas libres de
Más detallesCompiladores: Parsing ascendente
Compiladores: Parsing ascendente Francisco J Ballesteros LSUB, URJC Page 1 of 64 Parsing ascendente Normalmente utilizaremos parsers descendentes para problemas pequeños cuando podemos escribir uno predictivo
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 detallesJavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores.
1 Compiladores / Guía VII / Ciclo 02-2016 Centro de Investigación y Transferencia de Tecnología JavaCC Parte I Contenido Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores En la presente
Más detallesAlgoritmos. Medios de expresión de un algoritmo. Diagrama de flujo
Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten
Más detallesGUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.
1 Programación II, Guía 2 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos. Objetivos Utilizar la sintaxis de las funciones
Más detallesTEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013
TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Ingeniería Técnica en Informática de Sistemas Segundo curso Departamento de Informática y Análisis Numérico Escuela Politécnica Superior Universidad de Córdoba
Más detallesINGENIERÍA DEL SOFTWARE I Práctica 5 Modelado de Diseño
INGENIERÍA DEL SOFTWARE I Práctica 5 Modelado de Diseño Univ. Cantabria Fac. de Ciencias Patricia López Introducción al Diseño Modelamos la estructura software del sistema (incluida la arquitectura) para
Más detallesUniversidad de Costa Rica. Escuela de Ciencias de la Computación e Informática CI-2700 TÓPICOS ESPECIALES - COMPILADORES.
Universidad de Costa Rica Escuela de Ciencias de la Computación e Informática CI-2700 TÓPICOS ESPECIALES - COMPILADORES II Ciclo 2014 Profesor: Manuel E. Bermúdez EXAMEN FINAL (NO PARA COMER EN CLASE,
Más detallesLABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison
LABORATORIO DE PROCESADORES DE LENGUAJE Curso: 2008-2009 Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison Planteamiento del problema En esta práctica se trata de realizar, mediante el
Más detallesCompiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.
Compiladores: Análisis Sintáctico Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V. Sintaxis Define la estructura del lenguaje Ejemplo: Jerarquía en
Más detallesTema: Autómata de Pila
Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores 1 Tema: Autómata de Pila Contenido La presente guía aborda los autómatas de pila, y se enfoca en la aplicación que se le puede dar a estas
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 detallesGRAMATICAS LIBRES DEL CONTEXTO
GRMTICS LIBRES DEL CONTEXTO Estas gramáticas, conocidas también como gramáticas de tipo 2 o gramáticas independientes del contexto, son las que generan los lenguajes libres o independientes del contexto.
Más detallesDiseño Estructurado de Algoritmos
Diseño Estructurado de Algoritmos 1 Sesión No. 11 Nombre: Estructuras algorítmicas. Tercera parte. Objetivo de la sesión: Al concluir la sesión el estudiante aplicará las estructuras algorítmicas repetitivas
Más detallesDiagramas de secuencia
Facultad de Ingeniería Departamento de Ingeniería de Sistemas y Computación Diagramas de secuencia Interacciones básicas 1 Para qué sirven los diagramas de secuencia? 2 Para qué sirven los diagramas de
Más detallesToda copia en PAPEL es un "Documento No Controlado" a excepción del original.
S U P E RIO R DE MISANTLA Apartado: 7.1 Copia No. Código:PD-SCD-1016 Versión No.: 02 Hoja : 2 de 12 4.- COMPETENCIAS A DESARROLLAR 4.1 Competencias Específicas: Diseña mediante el uso de reglas semánticas
Más detallesUnidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas
Unidad I Introducción a la programación de Sistemas M.C. Juan Carlos Olivares Rojas Agenda 1.1 Qué es y que estudia la programación de sistemas? 1.2 Herramientas desarrolladas con la teoría de programación
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 detallesProcesadores de Lenguaje
Procesadores de Lenguaje Analizadores sintácticos descendentes: LL(1) Cristina Tîrnăucă Dept. Matesco, Universidad de Cantabria Fac. Ciencias Ing. Informática Primavera de 2013 Analizadores sintácticos
Más detallesTema II: Metodología para la construcción de programas
Tema II: Metodología para la construcción de programas Semestre: A-2012 Profesora: Nelly García Mora Agenda 1. Definición 2. Análisis E P S 3. Construcción de Algoritmos 4. Diagramas de Flujo 5. Codificación
Más detallesPHP: Lenguaje de programación
Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054
Más detallesUnidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones
Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice
Más detallesSistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria
1.2. Jerarquía de niveles de un computador Qué es un computador? Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria Es un sistema tan complejo
Más detallesDesde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.
Tipos de Datos Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Entrada de datos Procesamientos de datos Salida de resultados Los
Más detallesConversión entre Tipos
Conversión entre Tipos La conversión entre tipos permite comparar y copiar valores entre diferentes tipos. En esta lección describiremos como convertir un tipo dado en otro. Conversión en VB y Existen
Más detallesCRITERIOS DE SELECCIÓN DE MODELOS
Inteligencia artificial y reconocimiento de patrones CRITERIOS DE SELECCIÓN DE MODELOS 1 Criterios para elegir un modelo Dos decisiones fundamentales: El tipo de modelo (árboles de decisión, redes neuronales,
Más detallesProgramación. Test Autoevaluación Tema 3
Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.
Más detallesUniversidad de Managua
Universidad de Managua Introducción a la Programación Tema 7 Introducción a la programación en lenguaje C# Objetivos - Describir la estructura básica de un programa en Lenguaje C# - Explicar las estructuras
Más detallesTaller de Informática I Dpto. Computación F.C.E. y N. - UBA 2010
FUNCIONES Definición: Una función es un subprograma que recibe cero o más valores de entrada y retorna un único objeto de salida. Es una tarea independiente que puede o no depender de variables externas.
Más detallesLenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación
COMPILADORES Unidad I: Introducción al proceso de compilación Flor Prof. Flor Narciso GIDyC-Departamento de Computación LABSIULA-Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de
Más detallesTema 2 Introducción a la Programación en C.
Tema 2 Introducción a la Programación en C. Contenidos 1. Conceptos Básicos 1.1 Definiciones. 1.2 El Proceso de Desarrollo de Software. 2. Lenguajes de Programación. 2.1 Definición y Tipos de Lenguajes
Más detallesAnalista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final
Trabajo Final 1 Objetivo Comprender (en gran parte) un programa desarrollado en: C++ (Core ) Generador de código / Ejecución de comandos Flex (Lex) Lexer Genera un Analizador Léxico en C http://en.wikipedia.org/wiki/lex_(software)
Más detallesGenerador de analizadores léxicos FLEX
Generador de analizadores léxicos FLEX Procesadores de Lenguajes 4 o Informática PL curso 2008-2009 (CCIA) CCIA Octubre 2008 PL 0809 (CCIA) Introducción a FLEX Octubre-2008 1 / 12 Uso de FLEX FLEX: traduce
Más detallesObjetivos 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)
Objetivos de la sesión Entender el tipo de programas que se pueden realizar con aplicaciones de consola. Conocer el concepto de variable, la forma en que se declaran y su utilización. Conocer la forma
Más detallesOPTIMIZACIÓN DE CÓDIGO
OPTIMIZACIÓN DE CÓDIGO INTRODUCCION La finalidad de la optimización de código es producir un código objeto lo más eficiente posible. En algunos casos también se realiza una optimización del código intermedio.
Más detallesEstructuras de control
Estructuras de control Introducción Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando
Más detalles1. Cuántas sentencias hay en la secuencia principal del siguiente programa?
1. Cuántas sentencias hay en la secuencia principal del siguiente programa? public class PruebaSwitch { System.out.print ("Opcion: "); case 3: System.out.println ("miércoles "); A. 1. B. 4. C. Más de 10.
Más detallesTabla de Símbolos. Programación II Margarita Álvarez
Programación II Margarita Álvarez La tabla de símbolos es una estructura global utilizada por distintos módulos del compilador. Es el principal atributo heredado. Almacena todos los nombres declarados
Más detallesFunciones como Subprogramas en C++
FUNCIONES Cuando es necesario escribir programas complicados para resolver problemas complejos, una práctica común entre los programadores es descomponer el algoritmo (el diagrama de flujo) en varias partes.
Más detallesUnidad 4. Autómatas de Pila
Unidad 4. Autómatas de Pila Una de las limitaciones de los AF es que no pueden reconocer el lenguaje {0 n 1 n } debido a que no se puede registrar para todo n con un número finito de estados. Otro lenguaje
Más detallesLenguajes de Programación. Juan Zamora O. Semestre II Nombres, Ambitos y Ligados
Lenguajes de Programación Nombres, Ambitos y Ligados Juan Zamora O. Semestre II - 2013 Nombres, Ambitos y Ligados Aspectos semánticos fundamentales de las variables. Conceptos a revisar: Abstracción Nombres
Más detallesESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF
ESCUELA POLITÉCNICA SUPERIOR GRADO EN DISEÑO IND. INFORMÁTICA CURSO 2012-13 PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF HASTA AHORA... En prácticas anteriores se ha aprendido: La estructura principal de un
Más detallesEnteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.
LENGUAJE DE PROGRAMACIÓN TURBO PASCAL El lenguaje de programación de alto nivel Pascal fue diseñado el 1968 por Niklaus Wirth con una finalidad eminentemente pedagógica El 1983, el Pascal fue estandarizado
Más detallesFUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)
APRENDERAPROGRAMARCOM FUNCIONES PHP: DECLARACIÓN Y LLAMADAS PARÁMETROS, RETURN EJERCICIOS EJEMPLOS RESUELTOS (CU00827B) Sección: Cursos Categoría: Tutorial básico del programador web: PHP desde cero Fecha
Más detalles$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos
PROGRAMACIÓN DE SHELL SCRIPTS EN LINUX El shell es un intérprete de órdenes, pero el shell no es solamente eso; los intérpretes de órdenes de Linux son auténticos lenguajes de programación. Como tales,
Más detallesHerramientas de Programación. M.C. Juan Carlos Olivares Rojas
Herramientas de Programación M.C. Juan Carlos Olivares Rojas Febrero 2011 Temario Simbología Reglas para la construcción de Diagramas Pseudocódigo Temario Tipos de Datos y Expresiones Estructuras lógicas
Más detallesMODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.
MODELOS DE COMPUTACION I Preguntas Tipo Test Indicar si son verdaderas o falsas las siguientes afirmaciones: 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular. 2.
Más detallesTema 13: Apuntadores en C
Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción
Más detallesLas plantillas permiten definir funciones genéricas.
Introducción (Genericidad). Plantillas de funciones o funciones genéricas. Sintaxis de plantillas. Ejemplos de declaraciones. A tener en cuenta Un ejemplo de plantilla de funciones: Máximo de un vector.
Más detallesProgramación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C
Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales
Más detallesDiagramas de secuencia
Facultad de Ingeniería Departamento de Ingeniería de Sistemas y Computación Diagramas de secuencia Fragmentos Combinados: caminos alternativos Departamento de Ingeniería de Sistemas y Computación - Universidad
Más detallesProgramación MODULAR: Subalgoritmos - funciones y procedimientos
Programación MODULAR: Subalgoritmos - funciones y procedimientos Uno de los métodos fundamentales para resolver un problema es dividirlo en problemas más pequeños, llamados subproblemas. Estos problemas
Más detallesEjercicios de Lógica Proposicional *
Ejercicios de Lógica Proposicional * FernandoRVelazquezQ@gmail.com Notación. El lenguaje proposicional que hemos definido, aquel que utiliza los cinco conectivos,,, y, se denota como L {,,,, }. Los términos
Más detallesTema: Clases y Objetos en C#. Parte II.
Programación II. Guía No. 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C#. Parte II. Objetivos Implementar clases, objetos, propiedades, métodos y
Más detallesControl de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO
Control de Flujo Estructuras de Control Experiencia Educativa de Algorítmica 1 Introducción El estilo de como escribimos y analizamos un algoritmo se convierte en una de las principales características
Más detallesTema II: Metodología para la construcción de programas. Profesora: Nelly García Mora
Tema II: Metodología para la construcción de programas Profesora: Nelly García Mora 1. Metodologías de Programación Metodología de programación: es un conjunto o sistema de métodos, principios y reglas,
Más detallesIntroducción a C++ y Code::Blocks
Introducción a C++ y Práctica Imperativo Clase 1 Luis Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 28 de mayo de 2010 Menu de esta Tarde Funcional Vs. Imperativo (Intérprete
Más detallesEstatutos de Control C# Estatutos de Decisión (Selección)
SELECCIÓN Estatutos de Control C# Estatutos de Decisión (Selección) IF Condición THEN Estatuto1 ELSE Estatuto2 Estatuto1 Statement Condición... Antes de ver esta presentación: Lee el Capítulo correspondiente
Más detallesJava Avanzado Facultad de Ingeniería. Escuela de computación.
2 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 5 3 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo de sus prácticas
Más detallesInstituto Tecnológico de Celaya
CADENAS DE CARACTERES Hasta ahora se han manejado variables de tipo caracter cuyo valor es un sólo caracter. En algunos casos, sin embargo, es necesario usar variables cuyos valores sean un conjunto (cadena)
Más detalles5. Sentencias selectivas o condicionales
60 A. García-Beltrán y J.M. Arranz 5. Sentencias selectivas o condicionales Objetivos: a) Describir el funcionamiento de las sentencias selectivas o condicionales (if-else y switch) b) Interpretar el resultado
Más detallesRequerimientos de Software
Requerimientos de Software Ingeniería de Requerimientos Se define como el proceso de establecer los servicios que el consumidor requiere de un sistema y las restricciones sobre las cuales de funcionar
Más detallesEl análisis descendente LL(1) 6, 7 y 13 de abril de 2011
6, 7 y 13 de abril de 2011 Analizadores sintácticos (repaso) Los analizadores descendentes: Corresponden a un autómata de pila determinista. Construyen un árbol sintáctico de la raíz hacia las hojas (del
Más detallesGENERACIÓN DE CÓDIGO
GENERACIÓN DE CÓDIGO INTRODUCCION La generación de código es la fase más compleja de un compilador, puesto que no sólo depende de las características del lenguaje fuente sino también de contar con información
Más detallesProcesadores de lenguaje Tema Análisis sintáctico (Parte I)
Procesadores de lenguaje Tema 3 Análisis sintáctico (Parte I) Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Introducción Conceptos básicos Tipos de analizadores Gramáticas independientes
Más detallesConceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos
Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos Programación Orientada a Objetos Facultad de Informática Dep. Ingeniería del Software e Inteligencia Artificial Universidad
Más detallesExpresiones y sentencias
Expresiones y sentencias Expresión Construcción (combinación de tokens) que se evalúa para devolver un valor. Sentencia Representación de una acción o una secuencia de acciones. En Java, todas las sentencias
Más detallesAPUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.
APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido
Más detallesProcesadores de Lenguaje
Procesadores de Lenguaje Analizadores LALR Cris%na Tirnauca Domingo Gómez Pérez DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN Este tema se publica bajo Licencia: CreaIve Commons BY NC SA 3.0 El Analizador
Más detallesINTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)
APRENDERAPROGRAMAR.COM INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C) Sección: Cursos Categoría: Lenguaje de programación Java nivel
Más detalles2.5.1. Procesamiento de documentos XML.
2.5.1. Procesamiento de documentos XML. Un analizador o parser XML es una herramienta encargada de leer documentos XML [17], poder acceder a sus elementos y comprobar si el documento es sintácticamente
Más detallesXQuery. Un lenguaje de consulta para XML.
XQuery. Un lenguaje de consulta para XML. Nieves Carralero Colmenar. IES Pedro Mercedes. Junta de Comunidades de Castilla-La Mancha. España. Resumen En este artículo se muestra una introducción práctica
Más detallesEJERCICIOS del TEMA 3: Lenguajes independientes del contexto
EJERCICIOS del TEMA 3: Lenguajes independientes del contexto Sobre GICs (gramáticas independientes del contexto) 1. Sea G una gramática con las siguientes producciones: S ASB ε A aab ε B bba ba c ) d )
Más detallesProgramación Estructurada
Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 2 Nombre: El lenguaje de programación C Contextualización Una constante en todos los lenguajes de programación (viejos y nuevos) es la implementación
Más detallesSerialización de datos en C# en Binario, Soap y Xml
Serialización de datos en C# en Binario, Soap y Xml Quizás muchos desarrolladores hayan escuchado hablar del termino serializar la información y no saber de que se trata. Pues bien, resulta que la serialización
Más detallesPROGRAMACION ORIENTADA A OBJETOS EN C++
PROGRAMACION ORIENTADA A OBJETOS EN C++ 1- INTRODUCCIÓN El lenguaje C++ representa el resultado de los esfuerzos realizados para proporcionar las ventajas de la programación Orientada a Objetos a un lenguaje
Más detallesGLOSARIO DE MICROSOFT VISUAL BASIC (HAZ CLIC EN LA OPCION DEL MENU Y ACCEDERAS RAPIDAMENTE)
GLOSARIO DE MICROSOFT VISUAL BASIC (HAZ CLIC EN LA OPCION DEL MENU Y ACCEDERAS RAPIDAMENTE) Menú 1. Operadores Matemáticos 2. Operadores relacionales 3. Funciones de Visual Basic 4. Tipos de variables
Más detallesLA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)
APRENDERAPROGRAMAR.COM LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado
Más detallesCURSO: PRESENTE Y DESAFIOS DE LA GESTION PARLAMENTARIA
CURSO: PRESENTE Y DESAFIOS DE LA GESTION PARLAMENTARIA Claves para el diseño de estrategias de comunicación en organizaciones de la sociedad civil Expositor: Lic. Pablo Rodríguez Masena (UBA-Flacso) Noviembre,
Más detallesJava Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.
Java Avanzado. Guía 1 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 2 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo
Más detallesTodo programa en 'C' consta de una o más funciones, una de las cuales se llama main.
LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan
Más detallesTema: Entorno a C# y Estructuras Secuenciales.
Tema: Entorno a C# y Estructuras Secuenciales. Programación I, Guía 3 1 Facultad: Ingeniería Escuela: Ingeniería en Computación Asignatura: Programación I Objetivos Utilizar el entorno de programación
Más detallesUniversidad de Cantabria. Facultad de Ciencias Ingeniería en Informática. Ingeniería del Software II
Universidad de Cantabria. Facultad de Ciencias Ingeniería en Informática. Ingeniería del Software II Ejercicios del Tema 1: Construcción y Pruebas del Software Ejercicio 1 Se desean realizar pruebas de
Más detalles