1 Lectura 4: Compilación e InterpretaciónB. Universidad Autónoma de Puebla Algoritmos y Programación Primavera de 2006 Lectura 4: Compilación e Interpretación Javier M. Hernández FCFM
2 Del Código Fuente al Código Ejecutableprogram gcd(input, output); var i, j: integer; begin read(i, j); while i <> j do if i > j then i := i – j; else j := j – i; writeln(i) end. Compilación Compiler translate high-level source program intro an equivalent target program
3 Compilando un ProgramaUn programa llamado un “compilador” se usa para traslada su “programa fuente” (en un lenguaje como C++) hacia un“programa objeto” (en el lenguaje de máquina de su sistema). ANALISIS LEXICO Divide el programa fuente en palabras como “void”, “x”, “>”, y “;”. PARSING Analize la sintaxis gramatical del programa fuente (e.g., “if (x > y)” tiene sentido, pero “if (x > ) y” no). GENERACION DEL CODIGO Generate un programa equivalente en lenguaje de máquina. #include
4 Compilación e InterpretaciónUn compilador es un programa que translada programas fuente de alto nivel en programas blanco Un interprete es un programa que ejecuta otro programa Interpretation leads to greater flexibility and better diagnostics. Late binding in language that can create new pieces of code during execution and execute them Compilation leads to better performance.
5 Mezclando Compilación e InterpretaciónDiferencia difusa: Un lenguaje es interpretado cuando la traducción inicial es simple Un lenguaje es compilado cuando el proceso de traduccion es complicado Java as an example
6 Preprocesamiento Macros #define
7 Linking Bibliotecas de subrutinas Java API
8 Linking y carga CODIGO EJECUTABLE Programa unido Programas BibliotecaDespués de ser compilado, el programa objeto debe ser “linked (unido)” (i.e., conectado a otro código compilado de las bibliotecas, como funciones matemáticas u operadores input/output) y entonces “loaded (cargado)” en la memoria principal para su ejecución. Programa fuente Programa objeto Programa unido COMPILAR CODIGO EJECUTABLE LINK Programas Biblioteca compiladas CARGAR
9 Portabilidad Lenguaje en lugar de lenguaje de máquinaCódigo fuente intermedio
10 Ambiente de ProgramaciónMucho mas que compiladores e interpretes Assemblers, debuggers, preprocesadores y linkers Editores Impresion embellecida Verificación de estilo Manejo de versiones Ambientes integrados Mas allá de un simple bus error Emacs ? Look for tools you may need
11 Vistazo de la Compilaciónprogram gcd(input, output); var i, j: integer; begin read(i, j); while i <> j do if i > j then i := i – j; else j := j – i; writeln(i) end. Compilación
12 Fases de la Compilación
13 Ejemplo Lenguaje de calculadora de mesa Programa de ejemplo: read Aread B sum := A + B write sum write sum / 2 Explain the notation
14 Análisis Léxico Tokens: literal = digit digit *id = letter ( letter | digit ) * [ except "read" and "write" ] literal = digit digit * ":=", "+", "-", "*", "/", "(", ")“ $$$ [end of file]
15 Análisis Sintáctico Gramática en EBNF
16 Generación de código Código Intermedio: read pop A pop B push A push Badd pop sum push sum write push 2 div
17 Generación de código Código Blanco: .data A: .long 0 B: .long 0sum: .long 0 .text main: jsr read movl d0,d1 movl d1,A jsr read movl d1,B movl A,d1
18 Generación de código movl B,d2 addl d1,d2 movl d1,sum movl sum,d1movl d1,d0 jsr write movl #2,d2 divsl d1,d2