Académique Documents
Professionnel Documents
Culture Documents
Lenguajes de Programacin
Aspectos de los LP
Antes de comenzar con la construccin de un compilador, debemos comprender los conceptos basicos del lenguaje de programacin con el que queremos trabajar No es el propsito cubrir todos los aspectos de todos los lenguajes de programacin
Scopes (mbito)
Otro punto a considerar, es el scope de las declaraciones El scope de una declaracin de X, es la regin del programa, en la que el uso de X, hacen referencia a esta declaracin Un lenguaje usa scope esttico o lxico, si mirando el programa podemos determinar el scope de un smbolo X
Scopes (mbito)
Por el contrario, un lenguaje utiliza scope dinmico, si con la ejecucin del programa, el uso de la variable X puede hacer referencia a diferentes declaraciones de X La mayora de los lenguajes utilizan scope esttico o lxico
Nombres
Variables (Direcciones) Valores
State
State
Es una funcin que mapea direcciones de memoria en valores
Scope en C
Un programa en C consiste en una secuencia de declaraciones top-level de variables y funciones Las funciones pueden tener declaraciones de variables. Estas incluyen variables locales y parmetros
El scope de estas declaraciones estn restringidos a la funcin en la que estn contenidos
Scope en C
El scope de una declaracin top-level de un nombre X, consiste en todo el programa, salvo aquellas funciones en donde el nombre X tambin haya sido declarado
int x; ... void f(...) { char x; ... x = 3; ... } ... x = i + 1
Bloques
Es un tipo de sentencia, puede aparecer en lugar de cualquier tipo de sentencia del programa Esta formada por una secuencia de declaraciones seguida de una secuencia de sentencias El anidamiento de bloques, es lo que se conoce como estructura de bloques
Bloques
Decimos que una declaracion D pertence a un bloque B, si B es el bloque mas cercano que contiene a D O sea, D esta dentro de B, pero no dentro de un bloque B que se encuentre en B Esto nos permite definir reglas de scope para cuando trabajamos con bloques
Bloques
Decimos que una declaracin D pertenece a un bloque B, si B es el bloque mas cercano que contiene a D O sea, D esta dentro de B, pero no dentro de un bloque B que se encuentre en B Esto nos permite definir reglas de scope para cuando trabajamos con bloques
Bloques
Si una declaracion D de un nombre X, pertenece a un bloque B, entonces el scope de D, es el bloque B, incluyendo cualquier nivel de anidamiento, pero excluyendo los bloques B en los que X sea redefinida
Scope dinmico
Una tcnica de scope es dinmica, si esta basada en factores que solo pueden ser determinados al ejecutar el programa Con scope dinmico, el uso de un nombre X, se refiere a la declaracin de X, en la funcin mas recientemente llamada con esa declaracin
Scope dinmico
int x = 2; void b() ( int x = 1; printf (%d\n , x); }
// Imprime 1
main()
b()
c()
Pasaje de parmetros
Lo que nos interesa, es como los parmetros actuales (los que usamos en la invocacin a un procedimientos), son asociados con los parmetros formales (los que estn en la declaracin del procedimiento) Tenemos tres formas de pasar parametros
Call by value, Call by reference, Call by name
Call by value
El parmetro actual es evaluado (si es una expresin), y su valor es copiado en el parmetro formal Es el mtodo usado en C, Java, C# y el mas comn en C++ Los parmetros actuales no se ven afectados por los cambios realizados en el procedimiento Podemos pasar por valor, la direccin de memoria de una variable
Call by reference
En este caso, se pasa la direccin de los parmetros actuales, colocando la misma en los parmetros formales El acceso a travs de los parmetros formales, se hace siguiendo esta direccin
Parmetros ref en C++
Call by name
Este mecanismo ya no es usado hoy Funciona como una expansin de una macro en el procedimiento Cada parmetro formal, es reemplazado literalmente por el parmetro actual En el caso de pasar expresiones como parmetro, esto genera comportamientos poco intuitivos
Aliasing
Esto se da cuando tenemos pasaje de parmetros por referencia (o por valor, pasando la misma direccin 2 veces) Dos parmetros formales diferentes, pueden apuntar al mismo parmetro actual Esto genera una situacin de alias entre ambos parmetros formales