Presentación de la asignatura de Lenguajes de Programación

1 Cuestiones cotidianas de la asignatura

  • Horario de la asignatura: Lunes (11:45-12:45), martes (8:30-9:30) y Miércoles (8:30-10:30) en el aula 6 y laboratorio 2.
  • Material de la asignatura: mi página personal y en moodle.

2 Nota final de la asignatura

Básica (5 puntos) Profundización (5 puntos)
Participación en clase (1)  
Entrega de prácticas en grupo (1)  
Programar un compilador (3) Preguntas en el examen

3 Un poco de historia

  • En 1954 los costes de software, superaban a los de hardware.
  • Se propone utilizar "Speed Coding".
  • Se propone traducir las fórmulas matemáticas (FORTRAN).

4 ¿Qué es un compilador?

  • Es un programa que transforma otro programa escrito en un lenguaje a otro lenguaje, que normalmente se llama lenguaje nativo.
  • El primer compilador se calculó que costaría dieciocho años en construirlo para una persona.
  • Es diferente de un intérprete, que ejecuta directamente el programa.

5 ¿Por qué se necesitan los compiladores?

  • La diferencia semantica entre los lenguajes involucrados.
  • La aparición de nuevos lenguajes.

6 ¿Por qué lo necesitais vosotros?

  • Los compiladores definen que "significan" los programas.
  • Las técnicas básicas de los compiladores son muy utilizadas.

7 Mind the gap!

gap.png

8 Reducing the gap

reduced_gap.png

Figura 2: Reduciendo el salto

9 Estructura de un compilador

  • Análisis léxico.
  • Análisis sintáctico (Parsing).
  • Análisis semántico.
  • Optimización.
  • Generación de código.

10 RISC / CISC

  • RISC (Reduced Instructions Set Computer)
  • CISC (Complex Intructions Set Computer)

11 Compilación separada

Muchas veces el programa que escribimos no es una descripción completa de lo que queremos que haga el programa:

  • variables
  • funciones
  • código

12 La compilación en un ejemplo

12.1 Frase: ``Elena busca trabajo''

Tokens: ``Elena'', ``busca'', ``trabajo'' y varios espacios.

13 Palabras/Tokens

13.1 x = 1 if z==1 else 0

14 Parsing

arbol.png

Figura 3: Árbol sintáctico

15 Análisis semántico

Si escribimos \(y = a.parseint(j);\) el programa tiene que comprobar:

  • \(a\) tiene un método parseint(j), que toma un argumento.
  • \(y\) tiene un tipo que es hijo del que devuelve el método parseint.

16 Traducción

        add     $t1 $t1 $t2
        sw      $t1 12($a0)
        lw      $fp 16($sp)
        lw      $s0 12($sp)
        lw      $ra 8($sp)
        addiu   $sp $sp 16