transparencias

Anuncio
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Compiladores: Expresiones, Tipos y
Built-ins
Francisco J Ballesteros
LSUB, URJC
http://127.0.0.1:3999/s10.types.slide#1
Page 1 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Expresiones, Tipos y Built-ins
Hay que evaluar expresiones pero para eso
hay que comprobar que los tipos están bien
lo que require un sistema de tipos!
Los built-in evaluables en tiempo de compilación
han de estar en el compilador
han de estar en el run-time
http://127.0.0.1:3999/s10.types.slide#1
Page 2 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Otras comprobaciones
Hay muchas otras comprobaciones que es preciso hacer
que las variables utilizadas están definidas
que las expresiones constantes son constantes
en general, todas las comprobaciones semánticas
http://127.0.0.1:3999/s10.types.slide#1
Page 3 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Compilador
partimos del compilador tal y como quedó
en el tema anterior
parser con nodos del AST (src/lang/lang8.y)
tabla de símbolos (src/lang/dat5.go)
AST (src/lang/nd.go)
scanner (src/lang/lex2.go)
salida con el AST (src/lang/f.out7)
http://127.0.0.1:3999/s10.types.slide#1
Page 4 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Tipos de datos
Un tipo de datos puede definirse como
un conjunto de datos
con unas operaciones
Dicho eso
hay tipos estáticos
hay tipos dinámicos
hay tipos polimórficos
hay duck typing
...
http://127.0.0.1:3999/s10.types.slide#1
Page 5 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Tipado estático
El tipado estático
asigna un tipo a cada objeto en el lenguaje
puede realizarse en tiempo de compilación
aunque habrá comprobaciones dinámicas (ej. rangos)
http://127.0.0.1:3999/s10.types.slide#1
Page 6 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Tipado estático
A cada objeto tenemos que asignatura un tipo
¿Qué tipos tenemos?
predefinidos
tipos definidos por el usuario
http://127.0.0.1:3999/s10.types.slide#1
Page 7 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Tipos definidos por el usuario
¿Qué quiere decir?
TipoEnt = int
TipoNat = TipoEnt 1..MaxInt
En el primer caso
el tipo es nuevo (incompatible)
pero admite constantes universales
En el segundo caso
el tipo no es nuevo (compatible)
pero impone restricciones de rango
http://127.0.0.1:3999/s10.types.slide#1
Page 8 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Tipado en el lenguaje
Tipos predefinidos
int
bool
char
float
Y tipos universales para las constantes
X = 3
...
universal
universal
universal
universal
int
bool
char
float
http://127.0.0.1:3999/s10.types.slide#1
Page 9 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Tipado en el lenguaje
Además tenemos una constante polimórfica
nil
Y además
"hi there"
http://127.0.0.1:3999/s10.types.slide#1
Page 10 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Tipado en el lenguaje
Constructores de tipos nuevos:
T
T
T
T
T
T
=
=
=
=
=
=
(a, b, c, ... n)
T1
T1 a..b
record { T1, T2, ..., Tn }
array[T1] of T2
^T1
http://127.0.0.1:3999/s10.types.slide#1
Page 11 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Sistema de tipos
Para cada tipo creamos una estructura
única, guardada en un array de tipos
con la información que describe el tipo
apuntando a los tipos de los elementos internos
incluyendo min y max para rangos
Un tipo es un puntero a una estructura de tipos
http://127.0.0.1:3999/s10.types.slide#1
Page 12 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Sistema de tipos
Dos tipos son compatibles si
son el mismo puntero
o uno deriva de un universal y el otro es el universal
o uno es un subtipo del otro (ej. subrango)
En cualquier otro caso son incompatibles
http://127.0.0.1:3999/s10.types.slide#1
Page 13 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Sistema de tipos
Dos tipos pueden convertirse entre si cuando
son el mismo tipo
son enumerados y se convierten de/a int
No hay más conversiones aceptadas
La conversión se implementa como un builtin
una función que acepta un tipo y devuelve otro
posiblemente la función no haga nada
http://127.0.0.1:3999/s10.types.slide#1
Page 14 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Implementación del sistema de tipos
Hay que crear las estructuras para los tipos
Hay que asignar tipos a los elementos del AST
Hay que comprobar los tipos
la generación de código usará la información de tipado
http://127.0.0.1:3999/s10.types.slide#1
Page 15 of 16
Compiladores: Expresiones, Tipos y Built-ins - (c)2014 LSUB
1/25/16, 2:49 PM
Questions?
Francisco J Ballesteros
LSUB, URJC
http://lsub.org (http://lsub.org)
http://127.0.0.1:3999/s10.types.slide#1
Page 16 of 16
Descargar