PROGRAMA TEMA I.- INTRODUCCIÓN
|
|
- María Carmen Espinoza Chávez
- hace 5 años
- Vistas:
Transcripción
1 UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAENTO DE INFORÁTICA Y ANÁLISIS NUÉRICO PROCESADORES DE LENGUAJES INGENIERÍA INFORÁTICA PRIER CURSO DE SEGUNDO CICLO SEGUNDO CUATRIESTRE Ingeniería Informática Procesadores de Lenguajes PROGRAA TEA I.- INTRODUCCIÓN TEA II.- ANÁLISIS LEXICOGRÁFICO TEA III.- FUNDAENTOS TEÓRICOS DEL ANÁLISIS SINTÁCTICO TEA IV.- ANÁLISIS SINTÁCTICO DESCENDENTE TEA V.- ANÁLISIS SINTÁCTICO ASCENDENTE TEA VI.- TRADUCCIÓN BASADA EN LA SINTAXIS Universidad de Córdoba Escuela Politécnica Superior 2 TEA I.- INTRODUCCIÓN TIPOS DE TRADUCTORES PROGRAAS RELACIONADOS CON LA TRADUCCIÓN HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES COBINACIÓN DE COPILADORES: BOOTSTRAPPING 3 1
2 TEA I.- INTRODUCCIÓN TIPOS DE TRADUCTORES PROGRAAS RELACIONADOS CON LA TRADUCCIÓN HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES COBINACIÓN DE COPILADORES: BOOTSTRAPPING 4 Los algoritmos permiten resolver los problemas de computación 5 Los algoritmos permiten resolver los problemas de computación Programa fuente: algoritmo escrito en un lenguaje de programación 6 2
3 Los algoritmos permiten resolver los problemas de computación Programa fuente: algoritmo escrito en un lenguaje de programación Los programas fuentes no pueden ser ejecutados directamente por los ordenadores 7 Los algoritmos permiten resolver los problemas de computación Programa fuente: algoritmo escrito en un lenguaje de programación Los programas fuentes no pueden ser ejecutados directamente por los ordenadores Los ordenadores sólo ejecutan código escrito en lenguaje máquina 8 Los algoritmos permiten resolver los problemas de computación Programa fuente: algoritmo escrito en un lenguaje de programación Los programas fuentes no pueden ser ejecutados directamente por los ordenadores Los ordenadores sólo ejecutan código escrito en lenguaje máquina Problema: transformar el programa fuente en código ejecutable 9 3
4 Los algoritmos permiten resolver los problemas de computación Programa fuente: algoritmo escrito en un lenguaje de programación Los programas fuentes no pueden ser ejecutados directamente por los ordenadores Los ordenadores sólo ejecutan código escrito en lenguaje máquina Problema: transformar el programa fuente en código ejecutable Programa fuente Transformador Código ejecutable 10 Existen dos tipos de transformación: 11 Existen dos tipos de transformación: Traducción Interpretación 12 4
5 Existen dos tipos de transformación: Traducción Un programa fuente (alto nivel) es convertido en código ejecutable (bajo nivel) que puede ser ejecutado independientemente. 13 Traducción Programa fuente Traductor 14 Traducción Programa fuente Traductor Errores de traducción 15 5
6 Traducción Programa fuente Traductor Código ejecutable 16 Traducción Datos de entrada Programa fuente Traductor Código ejecutable 17 Traducción Datos de entrada Programa fuente Traductor Errores de ejecución Código ejecutable Resultados 18 6
7 Traducción Datos de entrada Programa fuente Traductor Código ejecutable Resultados 19 Existen dos tipos de transformaciones Traducción Interpretación o simulación: consta de tres fases que se repiten sucesivamente 20 Existen dos tipos de transformaciones Traducción Interpretación o simulación: consta de tres fases que se repiten sucesivamente 1. Análisis del código fuente para determinar la siguiente sentencia a ejecutar. 21 7
8 Existen dos tipos de transformaciones Traducción Interpretación o simulación: consta de tres fases que se repiten sucesivamente 1. Análisis del código fuente para determinar la siguiente sentencia a ejecutar. 2. Generación del código que se ha de ejecutar. 22 Existen dos tipos de transformaciones Traducción Interpretación o simulación: consta de tres fases que se repiten sucesivamente 1. Análisis del código fuente para determinar la siguiente sentencia a ejecutar. 2. Generación del código que se ha de ejecutar. 3. Ejecución del código generado. 23 Interpretación Programa fuente Intérprete 24 8
9 Interpretación Datos de entrada Programa fuente Intérprete 25 Interpretación Programa fuente Datos de entrada Errores de interpretación Intérprete 26 Interpretación Datos de entrada Programa fuente Intérprete Resultados Errores de ejecución 27 9
10 Interpretación Datos de entrada Programa fuente Intérprete Resultados 28 Diferencias fundamentales entre traducción e interpretación 29 Diferencias fundamentales entre traducción e interpretación Traducción Independencia El código generado se puede ejecutar independientemente del programa fuente y del traductor. Se traduce una vez y se ejecuta muchas veces. Interpretación Dependencia El código generado sólo se puede ejecutar con el intérprete y el programa fuente. Se interpreta y ejecuta a la vez
11 Diferencias fundamentales entre traducción e interpretación Traducción Independencia Necesidades de memoria El código generado se ha de almacenar en memoria. Interpretación Dependencia Sin necesidad de memoria El código generado no se almacena en memoria. 31 Diferencias fundamentales entre traducción e interpretación Traducción Independencia Necesidades de memoria Eficiencia Una vez generado el código, éste se ejecuta con rapidez. Interpretación Dependencia Sin necesidad de memoria enos eficiencia El código se ha de volver a generar para volver a ser ejecutado. 32 Diferencias fundamentales entre traducción e interpretación Traducción Independencia Necesidades de memoria Eficiencia Global Posee una visión completa del programa pudiendo generar mensajes de error más detallados. Interpretación Dependencia Sin necesidad de memoria enos eficiencia Local Posee una visión parcial del programa, ya que interpreta el código sentencia a sentencia
12 Diferencias fundamentales entre traducción e interpretación Traducción Independencia Necesidades de memoria Eficiencia Global No interactividad No permite la interacción con el programa fuente Interpretación Dependencia Sin necesidad de memoria enos eficiencia Local Interactividad Permite una interacción con el programa durante su desarrollo. 34 Diferencias fundamentales entre traducción e interpretación Traducción Independencia Necesidades de memoria Eficiencia Global No interactividad No inclusión de código durante la ejecución Interpretación Dependencia Sin necesidad de memoria enos eficiencia Local Interactividad Inclusión de código durante la ejecución v.g.: intérpretes de Smalltalk, Lisp y Prolog. 35 Combinación de la traducción e interpretación: son procesos complementarios 36 12
13 Combinación de la traducción e interpretación: Interpretación + traducción Se facilita la depuración del código: la interpretación permite la interacción con el programa durante su desarrollo. El código depurado permite generar código ejecutable más eficiente. 37 Combinación de la traducción e interpretación: Interpretación + traducción: Se facilita la depuración: la interpretación permite la interacción con el programa durante su desarrollo. El código depurado permite generar código ejecutable más eficiente. Traducción + interpretación: El programa fuente se traduce a código intermedio. El código intermedio puede ser interpretado en diferentes entornos de ejecución. V.g.: Java, C#, 38 Tipos de lenguajes 39 13
14 Tipos de lenguajes Lenguajes interpretados: Utilizan un intérprete para ejecutar sus programas. V.g.: APL, Lisp, Scheme, Prolog, Java, Smalltalk, etc. 40 Tipos de lenguajes Lenguajes interpretados: Utilizan un intérprete para ejecutar sus programas. Lenguajes compilados: Utilizan un traductor denominado compilador para generar el programa ejecutable. V.g.: Fortran, Pascal, Ada, C, C++ 41 Tipos de lenguajes Lenguajes interpretados: Utilizan un intérprete para ejecutar sus programas. Lenguajes compilados: Utilizan un traductor denominado compilador para generar el programa ejecutable. No es una clasificación excluyente: existen lenguajes que poseen intérpretes y compiladores: Intérprete: utilizado para el desarrollo, depuración y puesta a punto. Compilador: genera el programa ejecutable. V. g.: Visual Basic, Builder C++, etc
15 TEA I.- INTRODUCCIÓN TIPOS DE TRADUCTORES PROGRAAS RELACIONADOS CON LA TRADUCCIÓN HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES COBINACIÓN DE COPILADORES: BOOTSTRAPPING 43 TIPOS DE TRADUCTORES Preprocesador Compilador Ensamblador Enlazador ( linker ) Cargador ( loader ) 44 TIPOS DE TRADUCTORES Preprocesador Programa inicial escrito en un lenguaje de alto nivel extendido Programa final escrito en un lenguaje de alto nivel estándar V.g.: cpp es un preprocesador del lenguaje C que realiza las siguientes acciones: Expandir macros: #define PI Incluir ficheros: #include <stdio.h> Eliminar comentarios: /* enú principal */ Etc. Nota: también existen preprocesadores para embellecer el programa fuente
16 TIPOS DE TRADUCTORES Preprocesador Compilador Programa inicial escrito en un lenguaje de alto nivel Programa final escrito en un lenguaje de bajo nivel (máquina o ensamblador). 46 TIPOS DE TRADUCTORES Preprocesador Compilador Ensamblador Programa inicial escrito en lenguaje ensamblador Programa final escrito en código máquina Nota: el ensamblador es un caso particular de compilador. 47 TIPOS DE TRADUCTORES Preprocesador Compilador Ensamblador Enlazador ( linker ) Programa inicial escrito en código reubicable (posiciones de memoria relativas) Programa final escrito en código máquina absoluto o ejecutable Notas: Además incluye el código de las funciones de las bibliotecas utilizadas por el programa fuente. Algunas veces genera código reubicable
17 TIPOS DE TRADUCTORES Preprocesador Compilador Ensamblador Enlazador Cargador ( loader ): Programa inicial escrito en código reubicable Programa final escrito en código máquina ejecutable Nota: no suele ser un programa independiente. 49 TIPOS DE TRADUCTORES Combinación de los tipos de traductores Programa fuente extendido 50 TIPOS DE TRADUCTORES Combinación de los tipos de traductores Programa fuente extendido Preprocesador Programa fuente estándar 51 17
18 TIPOS DE TRADUCTORES Combinación de los tipos de traductores Programa fuente extendido Preprocesador Programa fuente estándar Compilador Programa objeto (ensamblador) 52 TIPOS DE TRADUCTORES Combinación de los tipos de traductores Programa fuente extendido Preprocesador Programa fuente estándar Compilador Ensamblador Código máquina reubicable Programa objeto (ensamblador) 53 TIPOS DE TRADUCTORES Combinación de los tipos de traductores Programa fuente extendido Preprocesador Programa fuente estándar Compilador Programa objeto (ensamblador) Ensamblador Código máquina reubicable Enlazador Código máquina ejecutable Biblioteca de funciones (código reubicable) 54 18
19 TEA I.- INTRODUCCIÓN TIPOS DE TRADUCTORES PROGRAAS RELACIONADOS CON LA TRADUCCIÓN HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES COBINACIÓN DE COPILADORES: BOOTSTRAPPING 55 PROGRAAS RELACIONADOS CON LA TRADUCCIÓN Editor basado en la estructura sintáctica del lenguaje de programación Depurador Generador del programa ejecutable Perfilador Entorno de desarrollo integrado 56 PROGRAAS RELACIONADOS CON LA TRADUCCIÓN Editor basado en la estructura sintáctica del lenguaje de programación Facilita la edición de los programas al mostrar las estructuras de las sentencias de un lenguaje de programación. Evita la aparición de errores léxicos y, sobre todo, sintácticos
20 PROGRAAS RELACIONADOS CON LA TRADUCCIÓN Editor basado en la estructura sintáctica del lenguaje de programación Depurador En realidad es un intérprete que permite ejecutar el programa de forma supervisada. Permite la ejecución paso a paso del programa. Permite comprobar los valores de las variables, establecer puntos de parada, etc. V.g.: algunos depuradores de C son gdb, ddd, dbx, dbxtool. 58 PROGRAAS RELACIONADOS CON LA TRADUCCIÓN Editor basado en la estructura sintáctica del lenguaje de programación Depurador Generador del programa ejecutable Analiza las dependencias del código las bibliotecas de funciones para crear el código ejecutable. V.g.: Install Shield, Setup Factory, etc. 59 PROGRAAS RELACIONADOS CON LA TRADUCCIÓN Editor basado en la estructura sintáctica del lenguaje de programación Depurador Generador del programa ejecutable Perfilador Herramienta muy útil para la optimización de los programas. Permite conocer el perfil de ejecución de un programa. Genera estadísticas sobre la ejecución del programa relativas a uso de funciones, accesos a memoria, tiempos de ejecución, etc. Se pueden descubrir los cuellos de botella, es decir, dónde se requiere más tiempo de ejecución
21 PROGRAAS RELACIONADOS CON LA TRADUCCIÓN Editor basado en la estructura sintáctica del lenguaje de programación Depurador Generador del programa ejecutable Perfilador Entorno de desarrollo integrado: incluye un editor, un compilador, un enlazador, un depurador, etc. 61 TEA I.- INTRODUCCIÓN TIPOS DE TRADUCTORES PROGRAAS RELACIONADOS CON LA TRADUCCIÓN HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES COBINACIÓN DE COPILADORES: BOOTSTRAPPING 62 Fases Pasos 63 21
22 Fases Análisis: se encarga de comprobar que el programa fuente está bien escrito Síntesis: se ocupa de la generación del código ejecutable Componentes auxiliares: Administrador de la tabla de símbolos Gestor de errores 64 Fases Análisis Análisis léxico Síntesis 65 Fases Análisis Análisis léxico Análisis sintáctico Síntesis 66 22
23 Fases Análisis Análisis léxico Análisis sintáctico Análisis semántico Síntesis 67 Fases Análisis Análisis léxico Análisis sintáctico Análisis semántico Síntesis Generación de código intermedio 68 Fases Análisis Análisis léxico Análisis sintáctico Análisis semántico Síntesis Generación de código intermedio Optimización de código intermedio 69 23
24 Fases Análisis Análisis léxico Análisis sintáctico Análisis semántico Síntesis Generación de código intermedio Optimización de código intermedio Generación de código 70 Fases Análisis Análisis léxico Análisis sintáctico Análisis semántico Síntesis Generación de código intermedio Optimización de código intermedio Generación de código Optimización de código 71 Fases Componentes auxiliares Administrador de la tabla de símbolos Gestor de errores 72 24
25 Programa fuente Análisis léxico Componentes léxicos Administrador de la Tabla de símbolos Gestor de errores 73 Programa fuente Análisis léxico Análisis sintáctico Administrador de la Tabla de símbolos Árbol sintáctico Gestor de errores 74 Programa fuente Análisis léxico Análisis sintáctico Administrador de la Tabla de símbolos Análisis semántico Árbol sintáctico anotado Gestor de errores 75 25
26 Programa fuente Análisis léxico Administrador de la Tabla de símbolos Análisis sintáctico Análisis semántico Generación de código intermedio Código intermedio Gestor de errores 76 Programa fuente Análisis léxico Administrador de la Tabla de símbolos Análisis sintáctico Análisis semántico Generación de código intermedio Optimización del código intermedio Código intermedio optimizado Gestor de errores 77 Programa fuente Análisis léxico Administrador de la Tabla de símbolos Análisis sintáctico Análisis semántico Generación de código intermedio Optimización del código intermedio Gestor de errores Generación de código Código objeto 78 26
27 Programa fuente Análisis léxico Administrador de la Tabla de símbolos Análisis sintáctico Análisis semántico Generación de código intermedio Optimización del código intermedio Gestor de errores Generación de código Optimización de código Programa objeto 79 Necesidad de agrupar las fases de la compilación 4 Lenguajes de programación 4 Sistemas operativos = 16 compiladores C Unix Pascal Fortran Linux Windows Ada ac OS 80 Análisis léxico Análisis sintáctico Parte frontal (Front end) Parte trasera (Back end) Análisis semántico Generación de código intermedio Optimización del código intermedio Generación de código Optimización de código 81 27
28 C Pascal Fortran Ada 4 Partes frontales + 4 Partes traseras = 8 Partes 4 Partes frontales 4 Partes traseras = 16 Compiladores Parte frontal de C Parte frontal de Pascal Parte frontal de Fortran Parte frontal de Ada C Ó D I G O I N T E R E D I O Parte trasera de Unix Parte trasera de Linux Parte trasera de Windows Parte trasera de ac OS Unix Linux Windows ac OS 82 Fases Análisis Se encarga de comprobar que el programa fuente está bien escrito. 83 Fases Análisis Análisis léxico Análisis sintáctico Análisis semántico 84 28
29 Análisis Análisis léxico Análisis sintáctico Análisis semántico 85 Programa fuente Análisis léxico Componentes léxicos Administrador de la tabla de símbolos Gestor de errores 86 Análisis Análisis léxico También denominado análisis lexicográfico, análisis lineal, explorador o scanner
30 Análisis Análisis léxico También denominado análisis lexicográfico, análisis lineal, explorador o scanner. Única fase que tiene contacto con el código del programa fuente: favorece la modularidad y la interactividad. 88 Análisis Análisis léxico También denominado análisis lexicográfico, análisis lineal, explorador o scanner. Única fase que tiene contacto con el código del programa fuente: favorece la modularidad y la interactividad. Objetivo: Leer el programa fuente carácter a carácter y obtener los componentes léxicos o tokens 89 Análisis Análisis léxico También denominado análisis lexicográfico, análisis lineal, explorador o scanner. Única fase que tiene contacto con el código del programa fuente: favorece la modularidad y la interactividad. Objetivo: Leer el programa fuente carácter a carácter y obtener los componentes léxicos o tokens Programa fuente Analizador léxico Componentes léxicos 90 30
31 Análisis Análisis léxico Componente léxico o token : agrupación de caracteres con significado propio. Palabras reservadas: if, else, while, Identificadores: dato, mayor, bandera, Operadores aritméticos: +, -, *, /, div, mod, Operadores relacionales: <, <=, >, >=, Signos de puntuación: {, }, (, ), ;, Etc. 91 Análisis Palabra clave IF: if Análisis léxico Los espacios en blanco son suprimidos Paréntesis izquierdo: ( Identificador: divisor Operador relacional DISTINTO:!= Número: 0.0 Paréntesis derecho: ) if (divisor!= 0.0) dividendo = divisor * cociente + resto ; Componentes léxicos enviados al análisis sintáctico: Identificador: dividendo Símbolo de asignación: = Identificador: divisor Operador aritmético de multiplicación: * Identificador: cociente Operador aritmético de adición: + Identificador: resto Delimitador de fin de sentencia: ; 92 Tabla de símbolos Nombre cociente dividendo Atributo 1 Atributo 2 divisor resto 93 31
32 Análisis Análisis léxico Componentes léxicos eliminados Los espacios en blanco, tabuladores y saltos de línea. Los comentarios. Estos componentes léxicos Favorecen la lectura y comprensión de los programas. Pero no son necesarios para generar el código ejecutable. Generalmente, el análisis léxico es una subrutina o procedimiento auxiliar del análisis sintáctico. 94 Análisis Análisis léxico Análisis sintáctico Análisis semántico 95 Programa fuente Análisis léxico Análisis sintáctico Administrador de la Tabla de símbolos Árbol sintáctico Gestor de errores 96 32
33 Análisis Análisis sintáctico También denominado análisis jerárquico o gramatical o parser. Objetivos: Comprobar la sintaxis del código fuente: utiliza las reglas gramaticales del lenguaje fuente y los componentes léxicos. Generar una representación jerárquica (figurada): árbol sintáctico. 97 IF if <condición> <sentencia condicional simple> <sentencia> 98 IF if <condición> <sentencia condicional simple> <sentencia> P. IZQUIERDO <expresión> DISTINTO <expresión> P. DERECHO (!= ) 99 33
34 IF if <condición> <sentencia condicional simple> <sentencia> P. IZQUIERDO <expresión> DISTINTO <expresión> P. DERECHO (!= ) IDENTIFICADOR NÚERO divisor IF if <condición> <sentencia condicional simple> <sentencia> P. IZQUIERDO <expresión> DISTINTO <expresión> P. DERECHO (!= ) <asignación> IDENTIFICADOR NÚERO divisor 0.0 FIN DE SENTENCIA ; 101 IF if <condición> <sentencia condicional simple> <sentencia> P. IZQUIERDO <expresión> DISTINTO <expresión> P. DERECHO (!= ) <asignación> FIN DE SENTENCIA IDENTIFICADOR NÚERO ; divisor 0.0 IDENTIFICADOR ASIGNACIÓN <expresión> = dividendo
35 <sentencia condicional simple> IF if <condición> <sentencia> P. IZQUIERDO <expresión> DISTINTO <expresión> P. DERECHO (!= ) <asignación> FIN DE SENTENCIA IDENTIFICADOR NÚERO ; divisor 0.0 IDENTIFICADOR ASIGNACIÓN <expresión> = dividendo <expresión> ADICIÓN <expresión> <sentencia condicional simple> IF if <condición> <sentencia> P. IZQUIERDO <expresión> DISTINTO <expresión> P. DERECHO (!= ) <asignación> FIN DE SENTENCIA IDENTIFICADOR NÚERO ; divisor 0.0 IDENTIFICADOR ASIGNACIÓN <expresión> = dividendo <expresión> ADICIÓN <expresión> + <expresión> ULTIPLICACIÓN * <expresión> IDENTIFICADOR resto IDENTIFICADOR IDENTIFICADOR divisor cociente 104 <sentencia condicional simple> IF <condición> <sentencia> P. IZQUIERDO <expresión> DISTINTO <expresión> P. DERECHO IDENTIFICADOR NÚERO <asignación> FIN DE SENTENCIA IDENTIFICADOR ASIGNACIÓN <expresión> <expresión> ADICIÓN <expresión> <expresión> ULTIPLICACIÓN <expresión> IDENTIFICADOR IDENTIFICADOR IDENTIFICADOR
36 Análisis Análisis léxico Análisis sintáctico Análisis semántico 106 Programa fuente Análisis léxico Análisis sintáctico Administrador de la Tabla de símbolos Análisis semántico Árbol sintáctico anotado Gestor de errores 107 Análisis Análisis semántico Comprueba si el significado de las sentencias es correcto. Utiliza el árbol sintáctico y la tabla de símbolos. Algunos de los errores semánticos que pueden detectar: Operandos y operadores incompatibles. Diferencia de tipos entre los argumentos reales y los argumentos formales. Etc. El análisis semántico suele estar integrado en el análisis sintáctico
37 Fases Análisis Síntesis Se encarga de transformar la representación obtenida durante el análisis en el código objeto o ejecutable 109 Síntesis Generación de código intermedio Optimización del código intermedio Generación de código Optimización del código 110 Síntesis Generación de código intermedio Optimización del código intermedio Generación de código Optimización del código
38 Programa fuente Análisis léxico Análisis sintáctico Administrador de la Tabla de símbolos Análisis semántico Generación de código intermedio Gestor de errores Código intermedio 112 Procesadores de Lenguajes Tema I.- Introducción Síntesis Generación de código intermedio Genera una representación intermedia del código fuente que ha de tener las siguientes características Ha de ser fácil de generar a partir del código fuente. Ha de ser fácil de traducir al código objeto o ejecutable Código fuente Código intermedio Código objeto o ejecutable 113 Síntesis Generación de código intermedio Genera un representación intermedia del código fuente Es una fase opcional, pero muy recomendable. Redestinación : Al integrarse en la parte frontal del compilador, favorece la generación de código objeto para distintos entornos de ejecución. Optimización independiente del entorno de ejecución
39 Síntesis Generación de código intermedio Se utilizan definiciones dirigidas por la sintaxis o esquemas de traducción que se incorporan al análisis sintáctico. Tipos de representaciones intermedias: Notación postfija Árboles sintácticos Grafos dirigidos acíclicos Código de tres direcciones: Cuádruplas, triples y triples indirectos. 115 Síntesis Generación de código intermedio if (divisor!= 0.0) dividendo = divisor * cociente + resto ; Representación intermedia en código de tres direcciones: 100. if divisor = 0 goto t1 := divisor * cociente 102. t2 := t1 + resto 103. dividendo := t Síntesis Generación de código intermedio Optimización del código intermedio Generación de código Optimización del código
40 Programa fuente Análisis léxico Análisis sintáctico Administrador de la Tabla de símbolos Análisis semántico Generación de código intermedio Optimización del código intermedio Gestor de errores Código intermedio optimizado 118 Síntesis Optimización del código intermedio Esta fase es opcional, pero también es recomendable Objetivo: Realizar una optimización del código intermedio que sea independiente de la máquina en la que se ejecute el código objeto. La optimización es un problema NP-Completo 119 Síntesis Optimización del código intermedio if (divisor!= 0.0) dividendo = divisor * cociente + resto ; Optimización de la representación intermedia en código de tres direcciones: 100. if divisor = 0 goto t1 := divisor * cociente 102. t2 := t1 + resto 103. dividendo := t if divisor = 0 goto t1 := divisor * cociente 102. dividendo := t1 + resto
41 Síntesis Generación de código intermedio Optimización del código intermedio Generación de código Optimización del código 121 Programa fuente Análisis léxico Análisis sintáctico Administrador de la Tabla de símbolos Análisis semántico Generación de código intermedio Optimización del código intermedio Gestor de errores Generación de código Código objeto 122 Procesadores de Lenguajes Tema I.- Introducción Síntesis Generación de código Objetivo Traducir la representación intermedia a código objeto o ejecutable (código máquina). Ejemplo: Se va a generar código objeto en ensamblador Las operaciones aritmético lógicas se han de realizar sobre registros de máquina: R1, R2, Las proposiciones condicionales son generadas mediante comparaciones (CP) y saltos condicionales (JE, JLE, )
42 Síntesis if (divisor!= 0.0) Generación de código dividendo = divisor * cociente + resto ; 100. OV divisor, R CP #0, R JE OV cociente, R UL R2, R OV resto, R SU R3, R OV R1, dividendo Síntesis Generación de código intermedio Optimización del código intermedio Generación de código Optimización del código 125 Programa fuente Administrador de la Tabla de símbolos Análisis léxico Análisis sintáctico Análisis semántico Generación de código intermedio Optimización del código intermedio Generación de código Optimización de código Gestor de errores Programa objeto
43 Síntesis Optimización del código Generar un código más eficiente: Ejecución más rápida Ocupar menos espacio de memoria. La optimización es un problema NP-Completo Optimizar las necesidades de tiempo y memoria de forma conjunta suele ser difícil Tiempo y memoria son dos factores contrapuestos. La optimización absoluta no siempre se puede alcanzar: sólo se producen mejoras, pero no se tiene garantía de que sean óptimas. 127 Síntesis Optimización del código Las mejores transformaciones son las que obtienen el mayor beneficio con el menor esfuerzo Criterios: Se ha de preservar el significado del programa Debe acelerar los programas de forma apreciable Tiene que merecer la pena 128 Síntesis Optimización del código Posibles mejoras del código: No evaluación repetida de expresiones comunes Evitar la propagación de copias Supresión de código inactivo o muerto : análisis de control de flujo. Optimización de bucles: no evaluación de expresiones constantes dentro de los bucles Reutilización de registros de máquina. Etc
44 Síntesis Optimización del código 100. OV divisor, R CP #0, R JE OV cociente, R UL R2, R OV resto, R SU R3, R OV R1, dividendo OV divisor, R CP #0, R JE OV cociente, R UL R2, R OV resto, R SU R2, R OV R1, dividendo Fases Componentes auxiliares Administrador de la tabla de símbolos Gestor de errores 131 Componentes auxiliares Administrador de la tabla de símbolos Gestor de errores
45 Programa fuente Administrador de la Tabla de símbolos Análisis léxico Análisis sintáctico Análisis semántico Generación de código intermedio Optimización del código intermedio Generación de código Optimización de código Gestor de errores Programa objeto 133 Componentes auxiliares Administrador de la tabla de símbolos La tabla de símbolos contiene toda la información relacionada con los identificadores del programa fuente: Variables y constantes Funciones y procedimientos Parámetros Tipos de datos definidos Etiquetas Etc. 134 Componentes auxiliares Administrador de la tabla de símbolos Se crea durante el análisis léxico Es completada y utilizada durante todas las fases del proceso de compilación Se puede utilizar más de una tabla de símbolos para controlar las reglas de ámbito del lenguaje de programación. Los depuradores pueden mostrar los valores de las variables al consultar la tabla de símbolos
46 Componentes auxiliares Administrador de la tabla de símbolos V.g.: dato = 3; Nombre dato Tipo Valor entero Componentes auxiliares Administrador de la tabla de símbolos La información de las funciones o procedimientos es más completa: Número parámetros Tipo y forma de paso de cada parámetro Tipo de resultados (en las funciones) Etc. 137 Componentes auxiliares Administrador de la tabla de símbolos Las operaciones sobre la tabla de símbolos son: Inserción Consulta odificación Se puede mejora la eficiencia en el uso de la tabla de símbolos mediante: Una buena organización de la tabla (v.g.: árbol binario de búsqueda) La codificación de las funciones de acceso en lenguajes de bajo nivel (v.g.: ensamblador)
47 Componentes auxiliares Administrador de la tabla de símbolos Gestor de errores 139 Programa fuente Administrador de la Tabla de símbolos Análisis léxico Análisis sintáctico Análisis semántico Generación de código intermedio Optimización del código intermedio Generación de código Optimización de código Gestor de errores Programa objeto 140 Componentes auxiliares Gestor de errores La gestión de errores es un proceso fundamental Hay errores en todas las fases del proceso de traducción Errores más frecuentes en las etapas de análisis: Errores léxicos: identificador con un carácter no permitido Errores sintácticos: sentencia de control mal escrita Errores semánticos: uso de una variable en un contexto inadecuado La gestión de errores debe: Informar sobre el error, y permitir, si es posible, que continúe la traducción para detectar más errores (recuperación del error)
48 Componentes auxiliares Gestor de errores Las características de un buen gestor de errores: Capacidad de detección de errores Tratamiento de los errores: al encontrar un error, intentará subsanarlo si es posible. Siempre informará de los cambios realizados, para que la persona que programe tome la decisión final. Recuperación del error: debe permitir que la traducción continúe, sobre todo si no se desarrolla en un proceso interactivo. Evitar la cascada de errores: debe informar de un error sólo una vez, aunque aparezca varias veces, y no generar otros errores. 142 Componentes auxiliares Gestor de errores Las características de un buen gestor de errores (continuación): Información de los errores: el mensaje de error debe tener las siguientes características: Localización: se debe indicar la línea del código fuente en la que aparece el error. Pertinencia: debe referirse al código del programa y no a detalles internos de la traducción Comprensión: debe ser claro y sencillo 143 Fases Pasos
49 Pasos Número de veces que se procesa una representación del programa fuente. Cada paso requiere: Lectura del código fuente Procesamiento Almacenamiento de la información generada El número de pasos debe ser mínimo. 145 Pasos Las pasadas se suelen agrupar. Ejemplo: Primera pasada: análisis léxico, sintáctico, semántico y generación y optimización de código intermedio Segunda pasada: generación y optimización de código. Algunas veces es imprescindible realizar dos o más pasos: Algol 68 y PL/I permiten utilizar las variables antes de ser declaradas. Si el lenguaje permite saltos incondicionales (v.g.: instrucción goto ) La técnica de backpatching o relleno de retroceso permite combinar dos pasadas en una sola. Se requiere una tabla de saltos. 146 TEA I.- INTRODUCCIÓN TIPOS DE TRADUCTORES PROGRAAS RELACIONADOS CON LA TRADUCCIÓN HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES COBINACIÓN DE COPILADORES: BOOTSTRAPPING
50 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Se pueden generar automáticamente algunas partes del proceso de traducción Tipos de herramientas de generación automática: Generadores automáticos de analizadores léxicos Generadores automáticos de analizadores sintácticos Generadores automáticos de código intermedio Generadores automáticos de código áquinas de optimización de código 148 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de analizadores léxicos Generadores automáticos de analizadores sintácticos Generadores automáticos de código intermedio Generadores automáticos de código áquinas de optimización de código 149 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de analizadores léxicos Las expresiones regulares pueden denotar a los componentes básicos de los lenguajes de programación: Identificadores Números Operadores aritméticos, lógicos y relacionales Símbolos de puntuación Comentarios Etc
51 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de analizadores léxicos Las expresiones regulares pueden denotar a los componentes básicos de los lenguajes de programación. Existen herramientas automáticas para generar analizadores léxicos a partir de las expresiones regulares: Lex, Flex, PCLex ANTLR Etc. 151 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de analizadores léxicos V.g.: Lex nombre.l Fichero con expresiones regulares Lex lex.yy.c Analizador léxico escrito en lenguaje C lex.yy.c: contiene una función denominada yylex() que realiza las funciones del analizador léxico. yylex(): simula el funcionamiento de un autómata finito determinista (AFD). 152 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de analizadores léxicos Generadores automáticos de analizadores sintácticos Generadores automáticos de código intermedio Generadores automáticos de código áquinas de optimización de código
52 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de analizadores sintácticos Las gramáticas de contexto libre permiten generar casi todas las estructuras sintácticas de los lenguajes de programación. Generadores: YACC o Bison LLGEN CUP ANTLR Etc. 154 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de analizadores sintácticos V.g.: YACC, Yet Another Compiler Compiler nombre.y Fichero con una gramática de contexto libre YACC y.tab.c: contiene una función denominada yyparse() que realiza las funciones de analizador sintático. yyparse(): simula el funcionamiento de un autómata con pila. y.tab.c Analizador sintáctico escrito en lenguaje C 155 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de analizadores léxicos Generadores automáticos de analizadores sintácticos Generadores automáticos de código intermedio Generadores automáticos de código áquinas de optimización de código
53 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de código intermedio Suelen estar integrados en los analizadores sintácticos Hay dos versiones que incorporan acciones semánticas de generación de código intermedio: Definiciones basadas en la sintaxis Esquemas de traducción Al crear el árbol sintáctico, se ejecutan las acciones semánticas de generación de código intermedio 157 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de analizadores léxicos Generadores automáticos de analizadores sintácticos Generadores automáticos de código intermedio Generadores automáticos de código áquinas de optimización de código 158 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de código Se utilizan transformaciones basadas en reglas que tienen en cuenta: Las características de las sentencias y operaciones del código intermedio Las características de la máquina donde se va a ejecutar el código objeto: acceso a datos, operaciones básicas Las reglas utilizan plantillas de conversión
54 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: Generadores automáticos de analizadores léxicos Generadores automáticos de analizadores sintácticos Generadores automáticos de código intermedio Generadores automáticos de código áquinas de optimización de código 160 HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES Tipos de herramientas de generación automática: áquinas de optimización de código Se utilizan dispositivos para el análisis del flujo de datos. Se recoge información sobre la forma en que los valores se transmiten de una parte a otra del programa Ejemplos: Análisis de uso siguiente o de vida : se comprueba en qué lugares se usa una variable y, especialmente, cuándo no se va a utilizar más. Si una variable es utilizada frecuentemente entonces es preferible almacenarla en un registro de máquina. Etc. 161 TEA I.- INTRODUCCIÓN TIPOS DE TRADUCTORES PROGRAAS RELACIONADOS CON LA TRADUCCIÓN HERRAIENTAS PARA LA CONSTRUCCIÓN DE COPILADORES COBINACIÓN DE COPILADORES: BOOTSTRAPPING
55 Procesadores de Lenguajes Tema I.- Introducción COBINACIÓN DE COPILADORES: BOOTSTRAPPING La técnica de bootstrapping permite combinar compiladores ya creados para construir nuevos compiladores Los lenguajes que aparecen en el proceso de compilación son: Lenguaje fuente (F) Lenguaje de implementación (I): lenguaje en el que está escrito el compilador Lenguaje objeto (O) El compilador se pueden representar en forma de T F I O Nota: si el lenguaje es ejecutable, se indicará con color rojo 163 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Ejemplo: compilador gcc Lenguaje fuente: lenguaje C Lenguaje de implementación: lenguaje máquina de Unix (U) Lenguaje objeto: lenguaje máquina de Unix (U) C U U 164 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Si F = I entonces el compilador se denomina autocompilador Ejemplo: Lenguaje fuente: Lenguaje C Lenguaje de implementación: Lenguaje máquina de Unix (U) Lenguaje objeto: Lenguaje C C U C Nota: habría que compilar este compilador para que se pueda ejecutar, porque el lenguaje de implementación no es 165 ejecutable. 55
56 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Si I O entonces el compilador se denomina compilador cruzado, porque se genera código para una máquina diferente a la que se ha compilado Ejemplo: Lenguaje fuente: Lenguaje C Lenguaje de implementación: Lenguaje máquina de Unix (U) Lenguaje objeto: Lenguaje máquina de Linux (L) C L U 166 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Ejemplo 1: se pretende construir el siguiente compilador Lenguaje fuente: Lenguaje L de alto nivel Lenguaje de implementación: Lenguaje máquina () Lenguaje objeto: Lenguaje máquina () L Dificultad: es muy difícil escribir un programa (compilador) directamente en código máquina 167 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Ejemplo 1 Paso 1: se construyen dos compiladores auxiliares
57 S COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : 1 Ejemplo 1 Paso 1: se construyen dos compiladores auxiliares Primer compilador Lenguaje fuente: Lenguaje S, que es más simple que el lenguaje L de alto nivel (V.g: un subconjunto de L o ensamblador). Lenguaje de implementación: Lenguaje máquina () Lenguaje objeto: Lenguaje máquina () Observación: este compilador se puede construir con más facilidad porque S es más simple que L. 169 L COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : S 2 Ejemplo 1 Paso 1: se construyen dos compiladores auxiliares Segundo compilador Lenguaje fuente: Lenguaje L de alto nivel Lenguaje de implementación: Lenguaje S (que es más simple que el lenguaje L de alto nivel) Lenguaje objeto: lenguaje máquina () 170 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Ejemplo 1 Paso 2: se compila el compilador 2 con el compilador 1, creándose el compilador final L L S S 2 Compilador final
58 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Forma general: A I B + I N = A N B A I B I N A N B 172 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Forma general: A I B + I N = A N B A B A B I I N N 173 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Si se desea construir un compilador escrito en un lenguaje máquina para un lenguaje de alto nivel L, entonces se utilizan subconjuntos del lenguaje inicial. L
59 Procesadores de Lenguajes Tema I.- Introducción COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Ejemplo 2 Sean tres lenguajes de programación: L1 L2 L3 Se pretende construir el siguiente compilador Lenguaje fuente: Lenguaje L3 de alto nivel Lenguaje de implementación: Lenguaje máquina () Lenguaje objeto: Lenguaje máquina () L3 Compilador final 175 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Ejemplo 2: Paso 1: Se construyen los siguientes tres compiladores L1 L2 L3 L1 L COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : L2 Ejemplo 2 Paso 2: L1 Se compila el compilador 2 con el compilador 1: se crea un compilador 4 L1 L
60 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : L3 Ejemplo2 Paso 3: L2 3 Se compila el compilador 3 con el compilador 4: se crea el compilador final L2 4 L3 Compilador final 178 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : L Ejemplo 3: Dado un compilador de un lenguaje L para una máquina, se quiere construir otro compilador para otra máquina N Compilador original: L Objetivo: L N N L N Compilador original N Compilador final 179 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Ejemplo 3 Paso 1: Se construye el auto compilador L L N Este compilador es más fácil de construir que el compilador L N N L N L
61 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Ejemplo 3 Paso 2: Se compila el compilador obtenido en el paso 1 con el compilador original: se genera el compilador cruzado L N L N L N L L 1 2 Compilador original 181 Procesadores de Lenguajes Tema I.- Introducción COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Ejemplo 3 Paso 3: Se compila el compilador obtenido en el paso 1 con el compilador obtenido en el paso 2, creándose el compilador final L N L N L L N N 1 2 Compilador final 182 Procesadores de Lenguajes Tema I.- Introducción COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Resumen del ejemplo 3: El compilador original y el compilador 1 se construyen directamente El compilador 2 se construye a partir del original y el compilador 1 El compilador final se construye a partir de los compiladores 1 y
62 Procesadores de Lenguajes Tema I.- Introducción 1 COBINACIÓN DE COPILADORES: BOOTSTRAPPING Aplicación de la técnica de bootstrapping : Resumen del ejemplo 3: L 1 L N L L L N Compilador original L 2 N L N N Compilador final 184 UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAENTO DE INFORÁTICA Y ANÁLISIS NUÉRICO PROCESADORES DE LENGUAJES INGENIERÍA INFORÁTICA PRIER CURSO DE SEGUNDO CICLO SEGUNDO CUATRIESTRE 62
PROGRAMA TEMA I.- INTRODUCCIÓN
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAENTO DE INFORÁTICA Y ANÁLISIS NUÉRICO PROCESADORES DE LENGUAJES GRADO EN INGENIERÍA INFORÁTICA ESPECIALIDAD DE COPUTACIÓN TERCER CURSO SEGUNDO
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROCESADORES DE LENGUAJES INGENIERÍA INFORMÁTICA PRIMER CURSO DE SEGUNDO CICLO SEGUNDO CUATRIMESTRE Ingeniería
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROCESADORES DE LENGUAJES GRADO EN INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN TERCER CURSO SEGUNDO
PROGRAMA TEMA II.- ANÁLISIS LEXICOGRÁFICO DEL ANÁLISIS SINTÁCTICO TEMA V. - ANÁLISIS SINTÁCTICO ASCENDENTE TEMA VI.- TRADUCCIÓN BASADA EN LA SINTAXIS
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAMENTO DE INFORMÁTICA Á Y ANÁLISIS Á NUMÉRICO É PROCESADORES R C A R DE LENGUAJES G AJ INGENIERÍA INFORMÁTICA PRIMER R M R CURSO C RS DE SSEGUNDO
PROCESADORES DE LENGUAJES
UIVERSIDAD DE CÓRDOBA Ingeniería Informática ESCUEA POITÉCICA SUPERIOR DEPARTAETO DE IFORÁTICA Y AÁISIS UÉRICO PROCESADORES DE EGUAJES GRADO E IGEIERÍA IFORÁTICA ESPECIAIDAD DE COPUTACIÓ TERCER CURSO SEGUDO
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 1. Introducción
Departamento de Tecnologías de la Información Tema 1 Introducción Ciencias de la Computación e Inteligencia Artificial Índice 1.1 Conceptos 1.2 Un poco de historia 1.3 Estructura de un compilador 1.4 Teoría
Compiladores: Introducción
Compiladores: Introducción Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. Gloria Inés Alvarez V. (galvarez@puj.edu.co) Basado en [Aho, 2007, chp. 1] Qué es un COMPILADOR?
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
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 al Diseño de Compiladores. Año
Introducción al Diseño de Compiladores Año 2003 1 BIBLIOGRAFÍA [AHO] Compilers. Principles, Techniques, and Tools Aho, Sethi; Adisson-Wesley 1986 [TEU] Compiladores: Conceptos fundamentales. Teufel ; Addison
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
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
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
Lenguajes y Compiladores Introducción. Compiladores 1
Facultad de Ingeniería de Sistemas Lenguajes y Introducción 1 Objetivos Conocer los fundamentos de construcción de en todas sus fases, presentando los conceptos básicos, definiciones formales, técnicas
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
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
Tema 1: Introducción
Tema 1: Introducción Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 1: Introducción 1 / 28 Definición de compilador Un compilador
Sintaxis y Semántica del Lenguaje
Gramáticas y Autómatas Wilo Carpio Cáceres 110813 1 Sintaxis y Semántica del Lenguaje Wilo Carpio Cáceres 2013 Gramáticas y Autómatas Wilo Carpio Cáceres 110813 2 INTRODUCCION A LOS COMPILADORES Wilo Carpio
Introducció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
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 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
FASES DE UN COMPILADOR
FASES DE UN COMPILADOR PROGRAMA FUENTE analizador léxico analizador sintáctico administrador analizador semántico manejador de la tabla generador de código intermedio de errores de símbolos optimizador
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
ANÁ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
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
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 (correo@carlospes.com) Capítulo 3 CICLO DE VIDA DE UN PROGRAMA 1 OBJETIVOS Saber qué es la Ingeniería
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
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
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
FACULTAD POLITÉCNICA DIRECCIÓN ACADÉMICA PROGRAMA DE ESTUDIO I. IDENTIFICACIÓN Carrera : Ingeniería de Sistemas CARGA HORARIA (Horas reloj) Asignatura : Compiladores Carga Horaria Semestral 64 Semestre
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
PRÁ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
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
Compilador. Ámbitos de utilización 1. Ámbitos de utilización 2
#gcc hello.c -o hello.exe -fsyntax-only hello.c: In function `main : hello.c:3: i undeclared hello.c:8: unterminated string of char hello.c:9: undefined reference to print Un compilador es es un programa
Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre
Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre Escuela Politécnica Superior de Córdoba Universidad de Córdoba Curso académico: 2016-2017
Introducción a los compiladores
Introducción a los compiladores William Cruz-Santos wdelacruzd@uaemex.mx 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
Pontificia Universidad Católica del Ecuador
1. DATOS INFORMATIVOS: MATERIA O MÓDULO: COMPILADORES E INTERPRETES CÓDIGO: 10730 CARRERA: NIVEL: SISTEMAS QUINTO No. CRÉDITOS: 4 CRÉDITOS TEORÍA: 4 CRÉDITOS PRÁCTICA: - SEMESTRE / AÑO ACADÉMICO: 2 / 2010
TEORÍ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
Í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.
AMBIENTES DE COMPILACION
AMBIENTES DE COMPILACION Los compiladores a menudo producen como resultado del análisis semántico, una forma de representación intermedia del código fuente. Hoy en día, es cada vez más común que, en ambientes
C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid
C1 INTRODUCCIÓN AL LENGUAJE C Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid Índice 1. Lenguajes de Programación 1. Definición. 2. Niveles
UNIVERSIDAD 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
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
COMPILADORES E INTERPRETES
COMPILADORES E INTERPRETES Análisis semántico: Estudia el significado de la sentencia Procesadores de lenguaje: Convierte un programa fuente hecho en un lenguaje fuente a un programa objeto hecho en un
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
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
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
PROCESADORES DE LENGUAJES
PROCESADORES DE LENGUAJES Análisis léxico con Prof. Dr. Nicolás Luis Fernández García Departamento de Informática y Análisis Numérico Escuela Politécnica Superior Universidad de Córdoba Universidad de
DOMINIOS 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:
COMPILADORES. 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
Lenguajes de Programación
Lenguajes de ción Bloque 1. Complemento a Tema 1 1. Historia 2. Paradigmas de programación 3. Fases creación de un programa 4. Traducción: compilación e interpretación 1ª Generación Ordenadores sólo entienden
Introducción a la construcción de compiladores
Introducción a la construcción de compiladores M. Luisa González Díaz * Departamento de Informática Universidad de Valladolid 1. Esquema general de un compilador Los principios y técnicas que se usan en
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
Metodología de Desarrollo de Programas
Metodología de Desarrollo de Programas Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes Semestre A_2013 Este material
PROGRAMA DE LABORATORIO POS-REQUISITO: Primer Semestre 2019 Ing. Mario José Bautista Fuentes AUXILIAR: Nery Galvez
UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERÍA ESCUELA DE CIENCIAS PROGRAMA DE LABORATORIO CÓDIGO: 777 CRÉDITOS: 4 Organización de NOMBRE CURSO: Lenguajes y SECCIÓN: A Compiladores 1 ESCUELA:
Teoría de autómatas. Un enfoque práctico. Recortables. Thelma Cantú María Gpe. Mendoza
Teoría de autómatas. Un enfoque práctico Recortables Thelma Cantú María Gpe. Mendoza 1.1 Búsqueda de lenguajes Alumno: 1 Nombre del lenguaje Alfabeto: Dónde se utiliza? Cuál es el beneficio para la humanidad?
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
Compiladores e intérpretes Análisis Léxico I. Análisis Léxico I
Análisis Léxico I Profesor: Eridan Otto Análisis Léxico I Introducción Funciones Tokens,Patrones y Lexemas Reconocimiento de tokens Implementación de un AL 1 Análisis léxico: Introducción En esta unidad
INICIACIÓN A LA PROGRAMACIÓN 1ª parte
TEMA 4 INICIACIÓN A LA PROGRAMACIÓN 1ª parte Qué es la programación? La programación es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales. En la actualidad,
Introducción al Análisis Sintáctico
Introducción al Análisis Sintáctico El Parsing como Algoritmo Universidad de Cantabria Outline Introducción 1 Introducción 2 3 4 El Problema de la Parsing El problema de parsing está muy relacionado con
UNIVERSIDAD DE GUADALAJARA
UNIVERSIDAD DE GUADALAJARA CENTRO UNIVERSITARIO DE LOS ALTOS DIVISIÓN DE ESTUDIOS EN FORMACIONES SOCIALES LICENCIATURA: INGENIERÍA EN COMPUTACIÓN UNIDAD DE APRENDIZAJE POR OBJETIVOS COMPILADORES MTRA.
Organización. Organización. Llenguatges de Programació Curs Gonzalo Besuievsky IMA - UdG. Horario Miércoles de 9:30 a 13:00
Llenguatges de Programació Curs 03-04 Gonzalo Besuievsky IMA - UdG Organización Horario Miércoles de 9:30 a 13:00 Tutorías Después de clase por mail: gonzalo@ima.udg.es Página del curso http://ima.udg.es/docencia/03-04/3157ra0008/index.html
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
16 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
COLEGIO DE ESTUDIOS DE POSGRADO DE LA CIUDAD DE MÉXICO
COLEGIO DE ESTUDIOS DE POSGRADO DE LA CIUDAD DE MÉXICO ELABORO: ALEJANDRA FUERTES FRANCISCO TEMA: LENGUAJES DE PROGRAMACIÓN INTRODUCCIÓN Un lenguaje de programación es un conjunto de instrucciones que
Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre
Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre Escuela Politécnica Superior de Córdoba Universidad de Córdoba Curso académico: 2013-2014
Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27
ÍNDICE Prefacio 25 Organización de la Unidad Didáctica.................... 25 Cómo utilizar el libro............................. 26 Objetivos docentes.............................. 27 1 Fundamentos de
Seminario 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
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
Universidad Tecnológica Nacional Facultad Regional Buenos Aires Grupo de Inteligencia Artificial y Robótica. Seminario IA y R
Página 1 de 8 3 Parser/Intérprete para plataforma PMIR Leandro Tozzi Resumen: Se describe la implementación mediante ANTLR y C# de un intérprete de instrucciones para automatizar y programar acciones de
JavaCC 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
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA PROGRAMA DE ESTUDIO
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA PROGRAMA DE ESTUDIO COMPILADORES 1764 7 o 09 Asignatura Clave Semestre Créditos Ingeniería Eléctrica Ingeniería en Computación Ingeniería
Lenguajes y Compiladores Traducción Dirigida por la Sintaxis
Facultad de Ingeniería de Sistemas Lenguajes y Compiladores Traducción Dirigida por la Sintaxis 1 Definición Código Intermedio: estructura de código que posee una complejidad comprendida entre el código
Tema 05: Elementos de un programa en C
Tema 05: Elementos de un programa 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
INTRODUCCIÓN A LA PROGRAMACIÓN. 1º Bachillerato
INTRODUCCIÓN A LA PROGRAMACIÓN 1º Bachillerato Qué es un programa? Componente informático que se utiliza para realizar una determinada tarea. Se compone de algoritmos y estructuras de datos Algoritmos:
Informática Ingeniería en Electrónica y Automática Industrial
Informática Ingeniería en Electrónica y Automática Industrial El preprocesador de lenguaje C V1.2 Autores El preprocesador de lenguaje C Definición Directivas de preprocesado Constantes simbólicas y macros
INTRODUCCIÓN A COMPILADORES Y LENGUAJES FORMALES FUNDAMENTOS DE COMPILADORES
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
Teoría de Autómatas y Lenguajes Formales, IS17 Ingeniería Técnica en Informática de Sistemas. Práctica 1: Introducción al Analizador Léxico FLEX
Teoría de Autómatas y Lenguajes Formales, IS17 Ingeniería Técnica en Informática de Sistemas Práctica 1: Introducción al Analizador Léxico FLEX Enunciado: El objetivo de esta práctica consiste en aprender
Objetivos Que el estudiante logre conocer, comprender y manejar conceptos y técnicas vinculados con el Analizador Léxico, para lo cual debe:
09:19 1 2 Temas Funciones del Analizador Léxico Manejo de buffers de entrada Especificación y reconocimiento de tokens Generación automática de Analizadores Léxicos Objetivos Que el estudiante logre conocer,
Unidad 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
Prá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
Yacc/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
Tema 2: Análisis léxico
Tema 2: Análisis léxico Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 2: Análisis léxico 1 / 21 Fundamentos del análisis
Lenguajes de Programación I
Lenguajes de Programación I Prof. Wilmer Pereira Universidad Simón Bolívar Primeros pasos en los lenguajes de alto nivel El primer computador (1940) tenía el poder cálculo de una calculadora actual Primer
1. Acciones en Yacc. %{ #include <stdio.h> yyerror (char *s) { fprintf (stderr, %s\n, s) ; } %} %% : S \n {printf ( Correcto\n );} ; : ( S ) S
El generador de analizadores sintácticos Yacc III Teoría de autómatas y lenguajes formales Alma María Pisabarro Marrón (alma@infor.uva.es) Universidad de Valladolid 1. Acciones en Yacc Las acciones en
Fundamentos de Programación 2017-I
Fundamentos de Programación 2017-I Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación C a través de un análisis
Las 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
Tema 2: Análisis léxico
Tema 2: Análisis léxico Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 2: Análisis léxico 1 / 22 Fundamentos del análisis
Guía Docente. Tipo: Obligatoria Créditos ECTS: 6. Curso: 4 Código: 3639
Guía Docente DATOS DE IDENTIFICACIÓN Titulación: Ingeniería Informática Rama de Conocimiento: Ingeniería y Arquitectura Facultad/Escuela: Escuela Politécnica Superior Asignatura: Procesadores de Lenguaje
Evolución del software y su situación actual
Evolución del software y su situación actual El software es el conjunto de programas que permite emplear la PC, es decir, es el medio de comunicación con la computadora, el control de sus funciones y su
UNIDAD 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
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: Introducción a Compiladores y al Lenguaje Micro C
Compiladores. Guía 1 1 Tema: Introducción a Compiladores y al Lenguaje Micro C Contenido En esta guía se presenta una breve introducción a los conceptos básicos que se utilizan en el ámbito de los compiladores