Variable: (nombre, dirección, valor, tipo, tiempo de vida, ámbito)
Nombre o identificador: cadena de caracteres
empleada para reconocer alguna entidad del
programa
Palabras especiales: indican acciones a realizar o
se emplean para separar entidades sintácticas de
los programas. Pueden ser: palabras clave o
palabras reservadas
Palabras clave:
sólo son palabras
especiales en
determinados
contextos
Palabras
reservadas:
palabra especial de
un LP que no
puede emplearse
como identificador
Nombres predefinidos:
nombres que tienen un
significado predefinido
pero que puede ser
cambiado (redefinido)
por el usuario Ej: Ada
(integer, float), Pascal
(readln, writeln, trunc,
round), C (printf, scanf)
Direccion de una
variable: dirección de
memoria a la que está
asociada
Un mismo nombre
puede tener asociados
diferentes direcciones
en lugares diferentes
del programa
Alias: cuando se usa
más de un nombre
de variable para
referenciar la misma
dirección
Tipo de una variable:
determina el rango de
valores que puede tomar la
variable y el conjunto de
operaciones definidas para
los valores del tipo
Valor de una variable:
contenido de la celda o
celdas de memoria
asociadas a las variables
Ligadura
(binding)
Ligadura:
asociación entre un
atributo y una
entidad
El momento en el que
se produce se
denomina tiempo de
ligadura.
Ligadura estática: si
ocurre antes del
tiempo de ejecución y
permanece
inalterable durante la
ejecución del
programa.
Ligadura dinámica: si
ocurre durante del
tiempo de ejecución
o puede cambiar en
el transcurso de la
ejecución del
programa
Tiempo de
compilación,Tiempo
de linkado,Tiempo
de carga,Tiempo de
ejecución
Ligadura de tipos
Antes de que una
variable pueda ser
referenciada en un
programa debe
haber sido ligada a
un tipo de dato.
Ligadura estática de
tipos
Declaración explícita: se
utiliza una sentencia que
declara una lista de
identificadores como de un
tipo determinado
Declaración implícita: forma de
asociar variables con tipos a través
de convenciones sintácticas. La
primera aparición del identificador
constituye su declaración implícita
Algoritmo de inferencia de
tipos: determina los tipos de las
variables que intervienen en las
expresiones sin que sean
declaradas de forma explícita
por el programador o da un
mensaje de error si no puede
inferirse
Ligadura dinámica de tipos
El tipo no se especifica mediante
una sentencia de declaración, sino
cuando se le asigna un valor
mediante una sentencia de
asignación
Ligadura de espacio y tiempo de vida
Tiempo de vida de una variable de
programa: tiempo durante el cual la
variable está ligada a una localización
específica de memoria ⇒ tiempo entre
asignación y desasignación de espacio
Variables
estáticas
Se ligan a celdas de memoria antes de
que comience la ejecución del programa
y permanece ligada a las mismas celdas
hasta que acaba la ejecución del
programa
Variables dinámicas de
pila
La ligadura de espacio se produce
cuando se elabora la sentencia de
declaración, exceptuando las que se
ligan estáticamente
Variables dinámicas de montón
(heap)
Montón (heap): colección de celdas de
almacenamiento cuya estructura está muy
desorganizada debido a la naturaleza
imprevisible de su uso
Explícitas
Variables sin nombre cuyo almacenamiento
se asigna y desasigna en tiempo de ejecución
mediante la utilización por el programador de
instrucciones específicas
Implícitas
Se les liga espacio del montón
sólo cuando se le asignan valores
(de hecho, todos sus atributos se
ligan cada vez que se produce
una asignación
Tipos
Comprobación de tipos
Comprobación de tipos:
actividad que nos asegura
que los operandos de un
operador son de tipos
compatibles
Tipos compatibles: un tipo legal
para el operador o un tipo que
atendiendo a determinadas
reglas del lenguaje puede ser
convertido implícitamente
mediante código generado por
el compilador en un tipo legal.
Esta conversión automática se
denomina coacción (coercion)
Error de tipos: aplicación
de un operador a un
operando de tipo
inapropiado
Si todas las ligaduras de tipos a
variables son estáticas ⇒ las
comprobaciones de tipo pueden
realizarse de forma estática
Si hay ligadura dinámica
de tipos a variables ⇒
debe realizarse una
comprobación dinámica
de tipos (más costosa
que en tiempo de
compilación)
Disciplina de tipos (strong typing)
Un lenguaje tiene disciplina de
tipos si los errores de tipos se
detectan siempre ⇒ es
necesario determinar los tipos
de todos los operandos, ya sea
en tiempo de compilación o de
ejecución
Compatibilidad de tipos
Compatibilidad de tipos
nominal: dos variables tienen
tipos compatibles si están
ligadas al mismo nombre de tipo
Compatibilidad de tipos
estructural: dos variables
tienen tipos compatibles si sus
tipos tienen la misma
estructura
Equivalencia de declaración:
dos variables tienen tipos
compatibles si uno de los
tipos está definido con el
nombre del otro
Ámbito
Ámbito de una variable de programa:
rango de sentencias en las que es
visible la variable
Ámbito estático ♦ Ámbito
estático (introducido por ALGOL
60): método de ligadura de
nombres a variables no locales
que ocurre en tiempo de
compilación
Ámbito dinámico (APL,
SNOBOL4): basado en la
secuencia de llamadas a
subprogramas y no en la
relación sintáctica entre
ellos ⇒ el ámbito sólo
puede determinarse en
tiempo de ejecución
Entorno de referencia de una sentencia:
colección de todos los identificadores
visibles en dicha sentencia
Constantes
Constante: objeto al que se le liga un valor
sólo en el momento en el que se le liga el
espacio ⇒ su valor no puede cambiarse por
asignación o por sentencia de entrada
Inicialización de variables
Inicialización: ligadura de un valor a una
variable en el momento en el que
también se le liga el almacenamiento
Variables no inicializadas
Las declaraciones sin inicialización crean
variables no inicializadas: se les liga memoria
pero su contenido es arbitrario y no puede ser
interpretado como un valor del tipo del objeto
declarado. El uso de un valor no incializado
produce resultados impredecibles y debe
evitarse