Tema 9: Lenguajes de programación y traductores 1. Lenguajes máquina, ensamblador, y de alto nivel. 2. Traductores: compilador e intérprete. 3. Proceso de compilación: errores. 4. Clasificación de los lenguajes. 1 1. Lenguaje máquina • • • • Único lenguaje que entiende el ordenador. Estructura adaptada al procesador. Difícil de entender para los humanos. Permite aprovechar al máximo los recursos. Características principales: • • • • Instrucciones codificadas en binario. Direcciones de memoria en lugar de variables. Instrucciones muy simples. Particular de cada procesador. 2 1 Ejemplos de programas en lenguaje máquina 00 08 00 05 94 21 FF D0 93 E1 00 2C 7C 3F 0B 78 55 89 E5 83 EC 18 8B 45 0C 89 C2 8D 04 12 8D 50 para procesadores Intel x86 (Pentium) 07 89 55 FC 8B 45 08 8B 4D 10 89 C2 29 CA 89 D0 01 C0 01 D0 8D 14 00 89 55 F8 8B 45 FC 3B 45 F8 90 7F 00 08 90 9F 00 0C 90 BF 00 10 81 3F 00 0C 7D 20 4B 78 7D 20 4A 14 38 09 00 07 90 1F 00 14 para procesadores Motorola PowerPC 80 1F 00 08 81 3F 00 10 7C 09 00 50 7C 0B 03 78 55 69 10 3A 7D 29 02 14 7C 09 02 14 90 1F 00 18 7E 0E 8B 55 FC 89 D0 EB 0E EB 0C 90 8D 74 26 00 80 1F 00 14 81 3F 00 18 7C 00 48 00 40 81 00 14 8B 55 F8 89 D0 EB 00 C9 C3 00 00 00 08 00 00 00 80 1F 00 14 7C 03 03 78 48 00 00 14 48 00 00 10 Lenguaje ensamblador • Más comprensible que el lenguaje máquina. • Símbolos para representar las instrucciones. • Símbolos para las direcciones de memoria. • Cada instrucción en ensamblador equivale a una instrucción en lenguaje máquina. • Se requiere un programa traductor. Programa en lenguaje ensamblador Traductor Programa en lenguaje máquina 4 2 Ejemplos de programas en lenguaje ensamblador funcion: funcion: para procesadores Intel x86 (Pentium) pushl %ebp movl %esp,%ebp subl $24,%esp movl 12(%ebp),%eax movl %eax,%edx leal (%edx,%edx),%eax leal 7(%eax),%edx movl %edx,-4(%ebp) movl 8(%ebp),%eax movl 16(%ebp),%ecx movl %eax,%edx subl %ecx,%edx movl %edx,%eax addl %eax,%eax addl %edx,%eax leal (%eax,%eax),%edx movl %edx,-8(%ebp) movl -4(%ebp),%eax cmpl -8(%ebp),%eax jle .L3 movl -4(%ebp),%edx movl %edx,%eax jmp .L2 jmp .L4 .p2align 4,,7 para procesadores Motorola PowerPC .L3: movl -8(%ebp),%edx movl %edx,%eax jmp .L2 .p2align 4,,7 .L4: .L2: leave ret stwu 1,-48(1) stw 31,44(1) mr 31,1 stw 3,8(31) stw 4,12(31) stw 5,16(31) lwz 9,12(31) mr 0,9 add 9,0,9 addi 0,9,7 stw 0,20(31) lwz 0,8(31) lwz 9,16(31) subf 0,9,0 mr 11,0 slwi 9,11,2 add 9,9,0 add 0,9,0 stw 0,24(31) lwz 0,20(31) lwz 9,24(31) cmpw 0,0,9 bc 4,1,.L3 lwz 0,20(31) mr 3,0 b .L2 b .L4 .L3: lwz 0,24(31) mr 3,0 b .L2 .L4: .L2: lwz 11,0(1) lwz 31,-4(11) mr 1,11 blr Lenguajes de alto nivel • Independientes de la estructura concreta del ordenador. • Se aproxima al lenguaje natural. • Utiliza variables y estructuras de datos para representar la información. • Utiliza estructuras de control de decisión y repetición. • Se han de traducir a lenguaje máquina. • Una instrucción del LAN se traduce a varias instrucciones en lenguaje máquina. 6 3 Ejemplo de programa en lenguaje de alto nivel En enguaje C: para qualquier procesador int funcion(int a, int b, int c) { int x, y; x = 2 * b + 7; y = (a - c) * 6; if (x > y) return x; else return y; } 7 2. Programas traductores Convierten un programa, o parte de un programa, escrito en un lenguaje de alto nivel, a su equivalente en lenguaje máquina. Programa fuente Traductor Programa objecto compilador 2 tipos de traductores intérprete 8 4 Compilador • Traduce completamente un programa fuente, generando el programa objeto equivalente en lenguaje máquina. • El programa objeto se guarda en un fichero y se puede ejecutar sin necesidad del compilador. • Ejemplo: Borland C++ Datos Programa fuente Compilador Programa objeto Tiempo de compilación Ejecución en ordenador Resultados Tiempo de ejecución 9 Intérprete • Traduce y ejecuta instrucción a instrucción. • No se guarda ningún fichero de programa objeto. -Menos eficiente. +Más interactivo. • Ejemplo: Matlab Datos Programa fuente Intérprete Resultados 10 5 3. Proceso de compilación Ediciónn del programa fuente SI Programa fuente Compilador Errores? Bibliotecas NO Programa objeto Montador Programa ejecutable 11 Tipos de errores de compilación Léxicos: palabras incorrectas. whyle (x>0) ... Sintácticos: construcciones incorrectas. if (a>b>c) ... Semánticos: construcciones correctas, pero sin sentido. int x; ... x[3] = 5; 12 6 Errores no detectados pel compilador Lógicos: algoritmo incorrecto. Ej. Intercambiar a y b : temp = a; a = b; a = b; b = a; b = temp; De ejecución: relacionados con situaciones de la ejecución del programa. • División por 0 • Raíz cuadrada de un número negativo • Acceder a un elemento inexistente de un vector • Leer un fichero sin información 13 4. Clasificación de los lenguajes de alto nivel Según el ámbito de su aplicación: •Científicos: Fortran, Matlab, Mathematica. •De gestión: COBOL, SQL. •De uso docente: Logo, BASIC, Pascal. •De inteligencia artificial: LISP, PROLOG. •De programación de sistemas: ADA, C / C++. 14 7 Bibliografía • L. A. Ureña, et al. Fundamentos de Informática, cap. 9. RA-MA, 1997. • P. Bishop. Conceptos de Informática, cap. 20. Anaya Multimedia, 1991. 15 8