Procesadores de Lenguaje
|
|
|
- María Antonia María Jesús Romero Aguirre
- hace 9 años
- Vistas:
Transcripción
1 Procesadores de Lenguaje Generación de código intermedio 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
2 Recordemos Fuente: Wikipedia
3 Lenguajes de Programación Involucrados Incluso antes de analizar cómo es el compilador por dentro Hay que tener presentes no menos de tres lenguajes: El lenguaje fuente en que estarán escritos los programas a compilar; el lenguaje objeto (ejecutable o interpretable) en que estarán escritos los programas compilados;
4 Lenguajes de Programación Involucrados Incluso antes de analizar cómo es el compilador por dentro Hay que tener presentes no menos de tres lenguajes: El lenguaje fuente en que estarán escritos los programas a compilar; el lenguaje objeto (ejecutable o interpretable) en que estarán escritos los programas compilados; el lenguaje en que está escrito el compilador.
5 Lenguajes de Programación Involucrados Incluso antes de analizar cómo es el compilador por dentro Hay que tener presentes no menos de tres lenguajes: El lenguaje fuente en que estarán escritos los programas a compilar; el lenguaje objeto (ejecutable o interpretable) en que estarán escritos los programas compilados; el lenguaje en que está escrito el compilador. Cuando miramos dentro del compilador, las cosas se complican: Lenguajes de especificación de analizadores y gramáticas, códigos intermedios... Una técnica útil: diagramas en T.
6 Código Intermedio En acción Códigos de tres direcciones Cada órden son funciones de dos registros; solo se puede utilizar tipos básicos, no hay funciones y todo el código se realiza por bloques; la gestión de memoria se realiza en el código; Tendremos que afrontar algunas cuestiones: Gestión de etiquetas para implementar mediante saltos condicionales o incondicionales las estructuras de control ( mientras ). Tabla de símbolos: comprobar las reglas sobre declaraciones de identificadores; asociar, a cada identificador que encontramos en tiempo de compilación, la memoria que le corresponderá en tiempo de ejecución.
7 Lenguaje Fuente Ingredientes que distinguen unos de otros Aspectos a considerar: 1. Estructuras de control; 2. Expresiones; 3. Tipos básicos; 4. Tipos estructurados:
8 Lenguaje Fuente Ingredientes que distinguen unos de otros Aspectos a considerar: 1. Estructuras de control; 2. Expresiones; 3. Tipos básicos; 4. Tipos estructurados: tamaño fijo, tamaño variable;
9 Lenguaje Fuente Ingredientes que distinguen unos de otros Aspectos a considerar: 1. Estructuras de control; 2. Expresiones; 3. Tipos básicos; 4. Tipos estructurados: tamaño fijo, tamaño variable; 5. Objetos o punteros, gestión de memoria;
10 Lenguaje Fuente Ingredientes que distinguen unos de otros Aspectos a considerar: 1. Estructuras de control; 2. Expresiones; 3. Tipos básicos; 4. Tipos estructurados: tamaño fijo, tamaño variable; 5. Objetos o punteros, gestión de memoria; 6. Funciones y parámetros; visibilidad (scoping);
11 Lenguaje Fuente Ingredientes que distinguen unos de otros Aspectos a considerar: 1. Estructuras de control; 2. Expresiones; 3. Tipos básicos; 4. Tipos estructurados: tamaño fijo, tamaño variable; 5. Objetos o punteros, gestión de memoria; 6. Funciones y parámetros; visibilidad (scoping); 7. Recursividad.
12 Lenguaje Objeto Por qué no directamente código nativo? Hay varias fuentes de ineficiencia en el código generado: 1. Copiamos a un registro un valor que ya está en él; 2. copiamos a memoria un valor que ya está en esa posición;
13 Lenguaje Objeto Por qué no directamente código nativo? Hay varias fuentes de ineficiencia en el código generado: 1. Copiamos a un registro un valor que ya está en él; 2. copiamos a memoria un valor que ya está en esa posición; 3. no aprovechamos bien la disponibilidad de varios registros; 4. no aprovechamos bien todo el repertorio de instrucciones máquina;
14 Lenguaje Objeto Por qué no directamente código nativo? Hay varias fuentes de ineficiencia en el código generado: 1. Copiamos a un registro un valor que ya está en él; 2. copiamos a memoria un valor que ya está en esa posición; 3. no aprovechamos bien la disponibilidad de varios registros; 4. no aprovechamos bien todo el repertorio de instrucciones máquina; 5. es muy fácil que quede código muerto que en realidad nunca se puede ejecutar.
15 Lenguaje Objeto Por qué no directamente código nativo? Hay varias fuentes de ineficiencia en el código generado: 1. Copiamos a un registro un valor que ya está en él; 2. copiamos a memoria un valor que ya está en esa posición; 3. no aprovechamos bien la disponibilidad de varios registros; 4. no aprovechamos bien todo el repertorio de instrucciones máquina; 5. es muy fácil que quede código muerto que en realidad nunca se puede ejecutar. Solución habitual: dos, o a veces tres, lenguajes objeto. 1. generar un código intermedio y analizarlo de varias maneras para optimizarlo 2. y luego obtenemos código ejecutable nativo
16 Lenguaje Objeto Por qué no directamente código nativo? Hay varias fuentes de ineficiencia en el código generado: 1. Copiamos a un registro un valor que ya está en él; 2. copiamos a memoria un valor que ya está en esa posición; 3. no aprovechamos bien la disponibilidad de varios registros; 4. no aprovechamos bien todo el repertorio de instrucciones máquina; 5. es muy fácil que quede código muerto que en realidad nunca se puede ejecutar. Solución habitual: dos, o a veces tres, lenguajes objeto. 1. generar un código intermedio y analizarlo de varias maneras para optimizarlo 2. y luego obtenemos código ejecutable nativo 3. o bien un código interpretable por una máquina virtual.
17 Desiderata Propiedades deseables: Próximo al lenguaje fuente (facilita el front-end ). Próximo al lenguaje objeto (facilita el back-end ). Permite implementar algoritmos sofisticados sobre fragmentos de código (facilita la optimización de código).
18 Desiderata Propiedades deseables: Próximo al lenguaje fuente (facilita el front-end ). Próximo al lenguaje objeto (facilita el back-end ). Permite implementar algoritmos sofisticados sobre fragmentos de código (facilita la optimización de código). Evidentemente, esos requisitos entran en conflicto mutuamente.
19 Desiderata Propiedades deseables: Próximo al lenguaje fuente (facilita el front-end ). Próximo al lenguaje objeto (facilita el back-end ). Permite implementar algoritmos sofisticados sobre fragmentos de código (facilita la optimización de código). Evidentemente, esos requisitos entran en conflicto mutuamente. Optimización (nombre inadecuado): es especialmente importante porque el código generado suele tener ineficiencias obvias.
20 Desiderata Propiedades deseables: Próximo al lenguaje fuente (facilita el front-end ). Próximo al lenguaje objeto (facilita el back-end ). Permite implementar algoritmos sofisticados sobre fragmentos de código (facilita la optimización de código). Evidentemente, esos requisitos entran en conflicto mutuamente. Optimización (nombre inadecuado): es especialmente importante porque el código generado suele tener ineficiencias obvias. Hay que afrontar esa tarea con mucha precaución.
21 Desiderata Propiedades deseables: Próximo al lenguaje fuente (facilita el front-end ). Próximo al lenguaje objeto (facilita el back-end ). Permite implementar algoritmos sofisticados sobre fragmentos de código (facilita la optimización de código). Evidentemente, esos requisitos entran en conflicto mutuamente. Optimización (nombre inadecuado): es especialmente importante porque el código generado suele tener ineficiencias obvias. Hay que afrontar esa tarea con mucha precaución. Premature optimization is the root of all evil. (D.E. Knuth, C.A.R. Hoare)
22 Códigos Intermedios Motivo del plural Nada impide usar más de un código intermedio. Cuando la distancia entre el código ejecutable y el fuente es más grande, puede ser conveniente usar dos. Facilitan el diseño del compilador. Cada tarea a realizar se puede elegir en qué fase se realiza.
23 Códigos Intermedios Motivo del plural Nada impide usar más de un código intermedio. Cuando la distancia entre el código ejecutable y el fuente es más grande, puede ser conveniente usar dos. Facilitan el diseño del compilador. Cada tarea a realizar se puede elegir en qué fase se realiza. (En particular, las tareas de optimización de código.)
24 Códigos Intermedios Motivo del plural Nada impide usar más de un código intermedio. Cuando la distancia entre el código ejecutable y el fuente es más grande, puede ser conveniente usar dos. Facilitan el diseño del compilador. Cada tarea a realizar se puede elegir en qué fase se realiza. (En particular, las tareas de optimización de código.) Se puede decidir interpretar pero no compilar el último código intermedio
25 Códigos Intermedios Motivo del plural Nada impide usar más de un código intermedio. Cuando la distancia entre el código ejecutable y el fuente es más grande, puede ser conveniente usar dos. Facilitan el diseño del compilador. Cada tarea a realizar se puede elegir en qué fase se realiza. (En particular, las tareas de optimización de código.) Se puede decidir interpretar pero no compilar el último código intermedio (o hacerlo sólo just-in-time ). Y cómo son? 1. Código de tres direcciones, con o sin llamadas a función. 2. Representación en árboles similares a los árboles sintácticos.
26 Cuestiones Prácticas Cómo lo combinamos con el análisis sintáctico y semántico? La última fase de análisis dispone de una estructura de datos en la que se construye el código intermedio generado. Puede ser: Una estructura arborescente (abstract syntax tree), similar al árbol de análisis sintáctico pero reducido a la información imprescindible. Una estructura arborescente pero más alejada de la sintaxis, orientada al código a generar. Una estructura secuencial en memoria, lo cual nos permite varios recorridos (por ejemplo para colocar etiquetas de salto coherentes); Directamente el fichero de salida, en el que vamos escribiendo el resultado del paso correspondiente; Depende de cuánto de lejos estén el lenguaje fuente y el objeto.
27 Código de Tres Direcciones Uno concreto y sencilĺısimo para nuestros primeros ejemplos y ejercicios Vamos a simplificar un poco el código de tres direcciones. # comentario $p2 :read # lectura $p2 :write # escritura $p4 : $p3 # copia $p21 : $p32 + $p13 # operacion, admite +, -, *, / ident: # etiqueta $p8 : jump ident # salto condicional: salta si <= 0 Simplificaciones: Todas las variables son temporales ( se ordena leer y escribir en memoria sin decir donde) y equivalentes entre sí(todos son números enteros). (No distinguimos acumulador, ni registros entre sí, ni registros de posiciones de memoria; no hay offsets... )
28 Un Ejemplo Sencillo El de siempre, claro ### 3-address code # "el factorial" $p2 :read # dato $p3 : 1 # inicializa a uno loop0: # bucle $p2 : jump end0 # salir si dato cero o negativo $p3 : $p3 * $p2 # multiplica $p2 : $p2 - $p1 # reduce $p3 :write # escribe resultado parcial $p0 : jump loop0 # comprueba condicion del bucle end0: # fin de bucle y programa ### End of 3-address code
29 Modus Operandi Cómo se logra construir cosas así? Ejemplo: La rutina semántica correspondiente a multiplicar expresiones. emit(): función que emite una nueva instrucción de tres direcciones y la añade al código que estamos generando. Valor semántico de expr: posición de la variable que contiene el resultado. expr : expr POR expr { tempvarnum = newtempvar(); emit("$p",tempvarnum," : $p",$1," * p",$3," # mult.\n") $$ = tempvarnum; }
30 Traducción de una Expresión La traducción es una función que toma una Expresión, la tabla de símbolos, la tabla de funciónes y un registro. Se denota por TransExp(Exp,vtable,ftable,place) devuelve Code num id unop Exp1 Exp1 binop Exp2 v= value(num) place=v x=lookup(vtable,name(id)) place=x code=transexp(exp1,vtable,ftable,$p0) code+$pe= unop $p0+place=$pe code1=transexp(exp1,vtable,ftable,$p0) code2=transexp(exp2,vtable,ftable,$p1) code1+code2+$pe=$p0 binop $p1+place=$pe Cuadro: Tabla de Traducción
31 Tabla de Traducción Ahora traducimos conjuntos de Expresiones, TransExps(Exp,vtable,ftable) devuelve Code Exp Exps Exp code=transexp(exp,vtable,ftable,p0) code=transexp(exp,vtable,ftable,p0) code1=transexps(exps,vtable,ftable) code+code1 Cuadro: Tabla de Traducción
32 Generación de Código Intermedio A partir de aquí, ir siguiendo Planteamos sucesivamente: generación de código para cada forma de las expresiones (gestión de variables temporales), generación de código para el repertorio de instrucciones de alto nivel (gestión de las etiquetas), generación de código para tipos estructurados (gestión de zonas de memoria), generación de código que use el heap con punteros, generación de código para llamadas a función (gestión de parámetros y resultados, gestión de ámbitos de visibilidad, recursividad... )... En cuanto tengamos los diagramas en T, haremos algunas de estas cosas para nuestro código simplificado y para MIPS.
Procesadores de lenguaje Tema 1 Introducción a los compiladores
Procesadores de lenguaje Tema 1 Introducción a los compiladores Salvador Sánchez, Daniel Rodríguez Departamento de Ciencias de la Computación Universidad de Alcalá Resumen del tema Traductores Estructura
Procesadores de Lenguaje
Procesadores de Lenguaje Analizador SLR y LR canónico Cris%na Tirnauca Domingo Gómez Pérez DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN Este tema se publica bajo Licencia: CreaKve Commons BY NC SA 3.0
Aná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
Diseñ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
Aná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
Examen de Procesadores de Lenguaje
Apellidos: Nombre: Dni: Examen de Procesadores de Lenguaje Junio de 2007 (2 horas y 45 minutos) Instrucciones Entrega esta hoja, rellenada con tus datos, junto a tu examen cuando lo entregues. Ten en cuenta
Tema 2 Conceptos básicos de programación. Fundamentos de Informática
Tema 2 Conceptos básicos de programación Fundamentos de Informática Índice Metodología de la programación Programación estructurada 2 Pasos a seguir para el desarrollo de un programa (fases): Análisis
Generació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
PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009
PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009 PRÁCTICA 2: ANALIZADOR SINTÁCTICO Y TABLA DE SÍMBOLOS. Objetivo de la Práctica Esta práctica tiene como primer objetivo la codificación de un analizador
NOMBRE 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 INGENIERÍA EN CIENCIAS Y SISTEMAS NOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2 CÓDIGO: 781 CRÉDITOS: 5 ESCUELA:
CÓ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
Unidad 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
GENERACIÓ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
CUP. Diseño de compiladores. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP 20/04/2014
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:
Concepto 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é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
Procesadores de Lenguaje
Procesadores de Lenguaje Analizadores sintác0cos descendentes: LL(1) Cris%na Tirnauca DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN Este tema se publica bajo Licencia: Crea0ve Commons BY NC SA 3.0 Analizadores
TEMA 3: El proceso de compilación, del código fuente al código máquina
TEMA 3: El proceso de compilación, del código fuente al código máquina 3.1 Fase de compilación y linkado (link, montado o enlace) Un programa escrito en un lenguaje de alto nivel, no puede ser ejecutado
Unidad 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
Lenguajes 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
Tema 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.
Tema 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
Índice general 7. Presentación 15
ÍNDICE GENERAL Índice general 7 Presentación 15 1. Introducción 19 1.1. Antecedentes históricos de la computación................... 19 1.2. Definiciones previas............................... 24 1.3.
Tema 7. Generación de código
Departamento de Tecnologías de la Información Tema 7 Generación de código Ciencias de la Computación e Inteligencia Artificial Índice 7.1 Visión general 7.2 Código de tres direcciones 2 Índice 7.1 Visión
Elementos para el estudio de los compiladores
Ing. Adrian Ulises Mercado Martínez Enero 30, 2015 Ing. Adrian Ulises Mercado Martínez Enero 30, 2015 1 / 51 1 Objetivo 2 Historia 3 Traductor Tipo de Traductores Compilador Intérprete Máquina Virtual
Lenguaje 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
Unidad 2. Introducción Lenguajes y Compiladores
Unidad 2 Introducción Lenguajes y Compiladores Principal material bibliográfico utilizado Compiladores Principios, técnicas y herramientas. Aho y Ullman. Addison Wesley. www.jorgesanchez.net www.iqcelaya.itc.mx/~vicente/programacion/tradcomp.pdf
Guí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
Tema: Análisis Léxico
Compiladores. Guía 2 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Análisis Léxico Contenido En esta guía se dará a conocer la manera en que un compilador realiza el análisis
ANÁ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
Procesadores de lenguaje Tema 8 Generación de código y optimización
Procesadores de lenguaje Tema 8 Generación de código y optimización Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Tipos de código objeto Operaciones básicas en la generación
Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA
Diseño de compiladores Gestión de la memoria / Generación de código ORGANIZACIÓN DE MEMORIA Organización de memoria Depende del tipo de lenguaje (declarativos, imperativos), del compilador y del sistema
PROGRAMA 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
Tema: 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
Tema 6 Organización y gestión de la memoria
Departamento de Tecnologías de la Información Tema 6 Organización y gestión de la memoria Ciencias de la Computación e Inteligencia Artificial Índice 6.1 Organización de la memoria en tiempo de ejecución
Técnicas de Programación
Técnicas de Programación 2.1.- Introducción: unos conceptos previos y primeros conceptos de la API Introducción La resolución de un problema con medios informáticos implica generalmente la siguiente secuencia
Capítulo 3 CICLO DE VIDA DE UN PROGRAMA. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"
Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C" Autor: Carlos Javier Pes Rivas ([email protected]) Capítulo 3 CICLO DE VIDA DE UN PROGRAMA 1 OBJETIVOS Saber qué es la Ingeniería
Aná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
Guía práctica de estudio 04: Diagramas de flujo
Página 63/214 Guía práctica de estudio 04: Diagramas de flujo 63 Página 64/214 Guía práctica de estudio 04: Diagramas de flujo Objetivo: Elaborar diagramas de flujo que representen soluciones algorítmicas
Analizador Léxico. Programación II Margarita Álvarez. Analizador Léxico - Funciones
Analizador Léxico Programación II Margarita Álvarez Analizador Léxico - Funciones Función Principal Leer carácter por carácter de la entrada y elaborar como salida una secuencia de componentes léxicos
Introducción a la programación
Introducción a la programación PROGRAMACION I Grado en Matematicas Informática Programación I - 2015/2016 Introducción 1 Introducción a la programación Computador: aparato electrónico capaz de interpretar
Introducción a los compiladores
Introducción a los compiladores William Cruz-Santos [email protected] Ingeniería en Computación Universidad Autónoma del Estado de México Unidad de Competencia I 2 de octubre de 2015 William Cruz-Santos
Unidad 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
Tema 3. Estructuras de control
Tema 3. Estructuras de control 3.1. Secuencial 3.2. Selección 3.3. Repetición 2 Objetivos Objetivos del tema: Conocer y saber la utilidad de las tres estructuras de control (secuencial, alternativa y repetitiva)
TEORÍA DE AUTÓMATAS Y LENGUAJES
2010/2011 INGENIERÍA TÉCNICA EN INFORMÁTICA DE SISTEMAS TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Enunciado de prácticas Lex y Yacc Enunciado de la práctica El objetivo de la práctica de esta asignatura
Prof. María Alejandra Quintero. Informática Año
Prof. María Alejandra Quintero Informática Año 2014-2015 Es la acción de escribir programas de computación con el objetivo de resolver un determinado problema. Implica escribir instrucciones para indicarle
Conceptos Programa Programa objeto Pseudocódigo Algoritmos y Diagramas de flujo 1) Finitud 2) Definición 3) Entrada
Conceptos Programa Se le llama programa a la serie de instrucciones escritas en alguno de los lenguajes, por medio de los cuales se logra que la computadora realice todas las operaciones o decisiones señaladas
Resolución de Problemas y Algoritmos
RESOLUCIÓN DE PROBLEMAS Y ALGORITMOS CLASE Estructura de control condicional. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur,
Compiladores: Introducción
Compiladores: Introducción Francisco J Ballesteros LSUB, URJC Page 1 of 28 Qué es un lenguaje de programación? C, Java, Go,... Pero también ls *.c grep '^[a-z].*\.8' printf("%s %d",...) Page 2 of 28 Cómo
Java para no Programadores
Java para no Programadores Programa de Estudio Java para no Programadores Aprende a programar con una de las tecnologías más utilizadas en el mercado de IT. Este curso está orientado a quienes no tienen
Un. VI. Generador de código intermedio.
Un. VI. Generador de código intermedio. La administración de la memoria se da en esta etapa. Se debe considerar tanto la memoria estática como dinámica, y en esta se utilizan generalmente pilas. Los lenguajes
Conceptos 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
Compiladores e intérpretes Introducción
Introducción Profesor: Eridan Otto Introducción Perspectiva histórica Motivación Definiciones Componentes y fases de un compilador 1 Introducción Definiciónes básicas Traductor: desde un punto de vista
Introducción a la programación: Contenido. Introducción
Introducción a la programación: Contenido Introducción a la programación:... 1 Introducción... 1 1. Procesamiento automatizado de información... 1 2. Concepto de algoritmo.... 2 3. Lenguajes de programación....
DISEÑO ESTRUCTURADO USANDO HERRAMIENTAS DE
DISEÑO ESTRUCTURADO USANDO HERRAMIENTAS DE REPRESENTACIÓN DE ALGORITMOS PSEUDOCÓDIGO El pseudocódigo es una herramienta de programación en la que las instrucciones se escriben en palabras similares al
4 o Ingeniería Informática
Esquema del tema 1. Introducción 2. Etapas del proceso de traducción 3. La interpretación 4 o Ingeniería Informática II26 Procesadores de lenguaje Estructura de los compiladores e intérpretes 4. La arquitectura
Introducción a la. Programación con
Introducción a la Programación con C Objetivo El alumno comprendera los conceptos sobre cuales se rige la programación estructurada mediante una base teórica y un conjunto de prácticas, enfocando dichos
Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Esquemas repetitivos en Fortran 90. Tipos de Esquema
Los esquemas repetitivos permiten implementar iteraciones del lenguaje algorítmico (mientras, repetir, para, hasta). Podemos dividir los esquemas según: - Se conozcan el número de iteraciones a priori,
Java para no Programadores
Java para no Programadores Programa de Estudio Java para no Programadores Aprende a programar con una de las tecnologías más utilizadas en el mercado de IT y comienza tu camino como desarrollador Java.
Un. I. Introducción a la programación de sistemas
Un. I. Introducción a la programación de sistemas 1.1 Qué es la programación de sistemas? La programación de sistemas comprende el desarrollo de aquellos programas de computadora que tienen una fuerte
Tema 3: Resolución de problemas con computadoras 2014
Resolución de problemas La Informática puede definirse también como la ciencia que estudia el análisis y resolución de problemas utilizando computadoras. La computadora es una máquina digital con capacidad
Dra. Jessica Andrea Carballido
Dra. Jessica Andrea Carballido [email protected] Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR Problemas, Algoritmos y Programas PROBLEMA Solución ALGORITMO PROGRAMA Problemas,
Prá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
Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa
Programación 1 Tema I. Conceptos y elementos básicos de Programación Lección 2. Lenguaje de programación y ejecución de un programa 1 Léxico, sintaxis y semántica de un lenguaje #include #include
PROCESADORES 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
Capítulo 3. Introducción a la programación. Continuar
Capítulo 3 Introducción a la programación Continuar Introducción Java es un lenguaje que tiene muchas ventajas frente a otros lenguajes de programación: es open source (código abierto), esto permite ver
Aná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
Contenido. Capítulo 1. Teoría de conjuntos. 1. Capítulo 2. Lenguaje. 39. Capítulo 3. Lenguajes formales. 55
Contenido Capítulo 1. Teoría de conjuntos. 1 1.1 Conjuntos.... 3 1.1.1 Definiciones básicas.... 3 1.1.2 Operaciones sobre conjuntos.... 6 1.1.3 Diagrama de Venn.... 7 1.1.4 Álgebra de conjuntos.... 7 1.2
Esquemas repetitivos en Fortran 90
Los esquemas repetitivos permiten implementar iteraciones del lenguaje algorítmico (mientras, repetir, para, hasta). Podemos dividir los esquemas según: - Se conozcan el número de iteraciones a priori,
