SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
Diseño de compiladores

 Lenguajes de Programación
Aspectos de los LP
• Antes de comenzar con la construcción de un
  compilador, debemos comprender los
  conceptos basicos del lenguaje de
  programación con el que queremos trabajar
• No es el propósito cubrir todos los aspectos de
  todos los lenguajes de programación
Estático vs. Dinámico
• Uno de los aspectos mas importantes a definir
  cuando construimos un compilador, es que
  decisiones puede tomar el compilador sobre
  el programa
Estático vs. Dinámico
• Si el lenguaje usa una política que permite que
  el compilador decida sobre un asunto,
  entonces decimos que el compilador utiliza
  una política estática, o que el asunto puede
  ser decidido en tiempo de compilación
• Por el contrario, una política que solo permite
  decidir cuando ejecutamos, se define como
  dinámica, o que requiere una decisión en
  runtime
Scopes (Ámbito)
• Otro punto a considerar, es el scope de las
  declaraciones
• El scope de una declaración de X, es la región
  del programa, en la que el uso de X, hacen
  referencia a esta declaración
• Un lenguaje usa scope estático o léxico, si
  mirando el programa podemos determinar el
  scope de un símbolo X
Scopes (Ámbito)
• Por el contrario, un lenguaje utiliza scope
  dinámico, si con la ejecución del programa, el
  uso de la variable X puede hacer referencia a
  diferentes declaraciones de X
• La mayoría de los lenguajes utilizan scope
  estático o léxico
Environments vs. States
• Otro aspecto importante, es si los cambios
  que ocurren al ejecutar el programa, afectan
  los elementos de datos, o la interpretación de
  los nombres usados para acceder a esos datos
• Por ejemplo, x = y + 1
• Cambia el valor denotado por x
• Sin embargo, un atributo “nombre” dentro de
  una clase, cambia para cada instancia de la
  clase
Environments vs. States
          Environment




Nombres

                          Variables
                        (Direcciones)

                                                Valores



                                        State
Environments vs. States
• Environment
  – Es una función que mapea nombres en
    direcciones de memoria
• State
  – Es una función que mapea direcciones de
    memoria en valores
Environments vs. States
• Por ejemplo…dos       int x;
  usos del nombre “i”   ...
                        void f(...) {
                            int i;
                            ...
                            i = 3;
                            ...
                        }
                        ...
                        x = i + 1
Scope estático y bloques
• Los lenguajes tipo C utilizan scope estatico
• La estructura del programa, determina el
  scope de los símbolos
• Lenguajes posteriores como C#, Java y C++
  agregaron el concepto de modificador de
  acceso
  – private, public, protected
Scope estático y bloques
• La mayoría de estos lenguajes utiliza una
  construcción denominada bloque para afectar
  el scope de los símbolos
• Un bloque es una agrupación de sentencias
• C utiliza { … } para definir un bloque
• Otros lenguajes utilizan begin … end
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
  parámetros
  – El scope de estas declaraciones están restringidos
    a la función en la que están contenidos
Scope en C
• El scope de una            int x;
  declaración top-level de   ...
  un nombre X, consiste      void f(...) {
                                 char x;
  en todo el programa,           ...
  salvo aquellas funciones       x = ‘3’;
  en donde el nombre X           ...
  también haya sido          }
  declarado                  ...
                             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 declaración 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
Control de acceso explicito
• En los lenguajes orientados a objetos, las
  clases introducen una nueva forma de scope
  para sus miembros
• En una clase C, el scope de un miembro X, es
  la clase C, junto con cualquier clase derivada,
  excepto si esta clase derivada redefine el
  miembro X
  – Los modificadores public, private y protected
    afectan esto
Scope dinámico
• Una técnica de scope es dinámica, si esta
  basada en factores que solo pueden ser
  determinados al ejecutar el programa
• Con scope dinámico, el uso de un nombre X,
  se refiere a la declaración de X, en la función
  mas recientemente llamada con esa
  declaración
Scope dinámico
int x = 2;
void b() (
     int x = 1;
     printf (”%dn” , x);   // Imprime 1
}

void c() { printf(“%dn” , x); // Imprime 1

void main() { b(); c(); }


       main()         b()          c()
Pasaje de parámetros
• Lo que nos interesa, es como los parámetros
  actuales (los que usamos en la invocación a un
  procedimientos), son asociados con los
  parámetros formales (los que están en la
  declaración del procedimiento)
• Tenemos tres formas de pasar parametros
  – Call by value, Call by reference, Call by name
Call by value
• El parámetro actual es evaluado (si es una
  expresión), y su valor es copiado en el parámetro
  formal
• Es el método usado en C, Java, C# y el mas común
  en C++
• Los parámetros actuales no se ven afectados por
  los cambios realizados en el procedimiento
• Podemos pasar por valor, la dirección de
  memoria de una variable
Call by reference
• En este caso, se pasa la dirección de los
  parámetros actuales, colocando la misma en
  los parámetros formales
• El acceso a través de los parámetros formales,
  se hace siguiendo esta dirección
  – Parámetros “ref“ en C++
• Los cambios en los parámetros formales,
  afectan los parámetros actuales
Call by name
• Este mecanismo ya no es usado hoy
• Funciona como una expansión de una macro
  en el procedimiento
• Cada parámetro formal, es reemplazado
  literalmente por el parámetro actual
• En el caso de pasar expresiones como
  parámetro, esto genera comportamientos
  poco intuitivos
Aliasing
• Esto se da cuando tenemos pasaje de
  parámetros por referencia (o por valor,
  pasando la misma dirección 2 veces)
• Dos parámetros formales diferentes, pueden
  apuntar al mismo parámetro actual
• Esto genera una situación de alias entre
  ambos parámetros formales

Mais conteúdo relacionado

Mais procurados

Sintaxis del lenguaje ensamblador
Sintaxis del lenguaje ensambladorSintaxis del lenguaje ensamblador
Sintaxis del lenguaje ensambladornaye torres
 
Fundamentos de Programacion - Unidad 3 Introduccion a la programacion
Fundamentos de Programacion - Unidad 3 Introduccion a la programacionFundamentos de Programacion - Unidad 3 Introduccion a la programacion
Fundamentos de Programacion - Unidad 3 Introduccion a la programacionJosé Antonio Sandoval Acosta
 
Instrucciones Basicas para C++
Instrucciones Basicas para C++Instrucciones Basicas para C++
Instrucciones Basicas para C++Dj109
 
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONLENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONSol López
 
ESTRUCTURA BÁSICA PARA C++
ESTRUCTURA BÁSICA PARA C++ESTRUCTURA BÁSICA PARA C++
ESTRUCTURA BÁSICA PARA C++GabrielFVilla15
 
Lenguaje c 1
Lenguaje c   1Lenguaje c   1
Lenguaje c 1Denisse C
 
Computacion alejandro
Computacion alejandroComputacion alejandro
Computacion alejandrojose camara
 
Estructura de-un-programa-en-lenguaje-c.
Estructura de-un-programa-en-lenguaje-c.Estructura de-un-programa-en-lenguaje-c.
Estructura de-un-programa-en-lenguaje-c.itzel-patricia05
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C SharpEdgardo Martinez
 
Estadística con Lenguaje R: Sesión Introductoria
Estadística con Lenguaje R: Sesión IntroductoriaEstadística con Lenguaje R: Sesión Introductoria
Estadística con Lenguaje R: Sesión IntroductoriaLuis Fernando Aguas Bucheli
 
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguajeLenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguajeDunkherz
 
Características de c sharp
Características de c sharpCaracterísticas de c sharp
Características de c sharpuccvirtual
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructuradaMariannis Ortega
 

Mais procurados (20)

Sintaxis del lenguaje ensamblador
Sintaxis del lenguaje ensambladorSintaxis del lenguaje ensamblador
Sintaxis del lenguaje ensamblador
 
Fundamentos de Programacion - Unidad 3 Introduccion a la programacion
Fundamentos de Programacion - Unidad 3 Introduccion a la programacionFundamentos de Programacion - Unidad 3 Introduccion a la programacion
Fundamentos de Programacion - Unidad 3 Introduccion a la programacion
 
Estadística con Lenguaje R: Sesión 1
Estadística con Lenguaje R: Sesión 1Estadística con Lenguaje R: Sesión 1
Estadística con Lenguaje R: Sesión 1
 
Instrucciones Basicas para C++
Instrucciones Basicas para C++Instrucciones Basicas para C++
Instrucciones Basicas para C++
 
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONLENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
 
ESTRUCTURA BÁSICA PARA C++
ESTRUCTURA BÁSICA PARA C++ESTRUCTURA BÁSICA PARA C++
ESTRUCTURA BÁSICA PARA C++
 
Lenguaje c 1
Lenguaje c   1Lenguaje c   1
Lenguaje c 1
 
Estructura basica para c++
Estructura basica para c++Estructura basica para c++
Estructura basica para c++
 
Ficheros de cabecera
Ficheros de cabecera Ficheros de cabecera
Ficheros de cabecera
 
Taller 2 conceptualizacion
Taller 2 conceptualizacionTaller 2 conceptualizacion
Taller 2 conceptualizacion
 
Computacion alejandro
Computacion alejandroComputacion alejandro
Computacion alejandro
 
Estructura de-un-programa-en-lenguaje-c.
Estructura de-un-programa-en-lenguaje-c.Estructura de-un-programa-en-lenguaje-c.
Estructura de-un-programa-en-lenguaje-c.
 
Como usar el lenguaje c++
Como usar el lenguaje c++Como usar el lenguaje c++
Como usar el lenguaje c++
 
Caracteristicas de C Sharp
Caracteristicas de C SharpCaracteristicas de C Sharp
Caracteristicas de C Sharp
 
Estadística con Lenguaje R: Sesión Introductoria
Estadística con Lenguaje R: Sesión IntroductoriaEstadística con Lenguaje R: Sesión Introductoria
Estadística con Lenguaje R: Sesión Introductoria
 
Elementos basicos c
Elementos basicos cElementos basicos c
Elementos basicos c
 
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguajeLenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
 
Características de c sharp
Características de c sharpCaracterísticas de c sharp
Características de c sharp
 
C++
C++C++
C++
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
 

Destaque

Compiladores fortran,c y pascal
Compiladores fortran,c y pascalCompiladores fortran,c y pascal
Compiladores fortran,c y pascalCarlos Rivadeneira
 
Compiladores fortran h pascal y c
Compiladores fortran h pascal y cCompiladores fortran h pascal y c
Compiladores fortran h pascal y cSantiago Bejarano
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesIsrael Castillo Cruz
 
nombres, alcances y enlaces (lenguajes de programación)
nombres, alcances y enlaces (lenguajes de programación)nombres, alcances y enlaces (lenguajes de programación)
nombres, alcances y enlaces (lenguajes de programación)bretorio
 
Tabla SiMbolos, victor mamani catachura, boreasH,Compiladores
Tabla SiMbolos, victor mamani catachura, boreasH,CompiladoresTabla SiMbolos, victor mamani catachura, boreasH,Compiladores
Tabla SiMbolos, victor mamani catachura, boreasH,Compiladoresvictor mamani
 

Destaque (6)

A3 identificador palabraclavetipos
A3 identificador palabraclavetiposA3 identificador palabraclavetipos
A3 identificador palabraclavetipos
 
Compiladores fortran,c y pascal
Compiladores fortran,c y pascalCompiladores fortran,c y pascal
Compiladores fortran,c y pascal
 
Compiladores fortran h pascal y c
Compiladores fortran h pascal y cCompiladores fortran h pascal y c
Compiladores fortran h pascal y c
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretes
 
nombres, alcances y enlaces (lenguajes de programación)
nombres, alcances y enlaces (lenguajes de programación)nombres, alcances y enlaces (lenguajes de programación)
nombres, alcances y enlaces (lenguajes de programación)
 
Tabla SiMbolos, victor mamani catachura, boreasH,Compiladores
Tabla SiMbolos, victor mamani catachura, boreasH,CompiladoresTabla SiMbolos, victor mamani catachura, boreasH,Compiladores
Tabla SiMbolos, victor mamani catachura, boreasH,Compiladores
 

Semelhante a 02 lenguajes de_programacion

Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Nilson Payares
 
Visualbasic net tema de java
Visualbasic net tema de javaVisualbasic net tema de java
Visualbasic net tema de javaGroup Lliuya
 
Programación de nivel básico 1. c1. p1.
Programación de nivel básico 1. c1. p1.Programación de nivel básico 1. c1. p1.
Programación de nivel básico 1. c1. p1.DENIRAMIREZANDRADE
 
Instrucciones Básicas para C++
Instrucciones Básicas para C++Instrucciones Básicas para C++
Instrucciones Básicas para C++pilgrim15
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++Idalia Tristan
 
Instrucciones básicas para C++
Instrucciones básicas para C++Instrucciones básicas para C++
Instrucciones básicas para C++OscarLeonardoPerez
 
2022.1P.02.IntroduccionCPP.Metodos numericos
2022.1P.02.IntroduccionCPP.Metodos numericos2022.1P.02.IntroduccionCPP.Metodos numericos
2022.1P.02.IntroduccionCPP.Metodos numericosJoseLuisPomaTorrez1
 
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónFabiolaCastilloCanci
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraArisbethBernalSalina
 
Programación de nivel básico 1. c1.
Programación de nivel básico 1. c1.Programación de nivel básico 1. c1.
Programación de nivel básico 1. c1.DENIRAMIREZANDRADE
 
Elementos de una variable trabajo grupal computacion
Elementos de una variable trabajo grupal computacionElementos de una variable trabajo grupal computacion
Elementos de una variable trabajo grupal computacionjime97
 
Lenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionLenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionIsrael Castillo Cruz
 
Estructura básica de un programa en C++
Estructura básica de un programa en C++Estructura básica de un programa en C++
Estructura básica de un programa en C++Rosbelia Balza
 

Semelhante a 02 lenguajes de_programacion (20)

Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Clase15
Clase15Clase15
Clase15
 
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
Lenguajesdeprogramacion c nivel1-unidad1-01-componentes y tipos de datos_1
 
Lenguaje phython
Lenguaje phythonLenguaje phython
Lenguaje phython
 
Visualbasic net tema de java
Visualbasic net tema de javaVisualbasic net tema de java
Visualbasic net tema de java
 
Programación de nivel básico 1. c1. p1.
Programación de nivel básico 1. c1. p1.Programación de nivel básico 1. c1. p1.
Programación de nivel básico 1. c1. p1.
 
Instrucciones Básicas para C++
Instrucciones Básicas para C++Instrucciones Básicas para C++
Instrucciones Básicas para C++
 
INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++INSTRUCCIONES BÁSICAS PARA C++
INSTRUCCIONES BÁSICAS PARA C++
 
Instrucciones básicas para C++
Instrucciones básicas para C++Instrucciones básicas para C++
Instrucciones básicas para C++
 
2022.1P.02.IntroduccionCPP.Metodos numericos
2022.1P.02.IntroduccionCPP.Metodos numericos2022.1P.02.IntroduccionCPP.Metodos numericos
2022.1P.02.IntroduccionCPP.Metodos numericos
 
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una mira
 
Programación de nivel básico 1. c1.
Programación de nivel básico 1. c1.Programación de nivel básico 1. c1.
Programación de nivel básico 1. c1.
 
Prolog
PrologProlog
Prolog
 
Prolog2
Prolog2Prolog2
Prolog2
 
Elementos de una variable trabajo grupal computacion
Elementos de una variable trabajo grupal computacionElementos de una variable trabajo grupal computacion
Elementos de una variable trabajo grupal computacion
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Lenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionLenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcion
 
Estructura básica de un programa en C++
Estructura básica de un programa en C++Estructura básica de un programa en C++
Estructura básica de un programa en C++
 

02 lenguajes de_programacion

  • 1. Diseño de compiladores Lenguajes de Programación
  • 2. Aspectos de los LP • Antes de comenzar con la construcción de un compilador, debemos comprender los conceptos basicos del lenguaje de programación con el que queremos trabajar • No es el propósito cubrir todos los aspectos de todos los lenguajes de programación
  • 3. Estático vs. Dinámico • Uno de los aspectos mas importantes a definir cuando construimos un compilador, es que decisiones puede tomar el compilador sobre el programa
  • 4. Estático vs. Dinámico • Si el lenguaje usa una política que permite que el compilador decida sobre un asunto, entonces decimos que el compilador utiliza una política estática, o que el asunto puede ser decidido en tiempo de compilación • Por el contrario, una política que solo permite decidir cuando ejecutamos, se define como dinámica, o que requiere una decisión en runtime
  • 5. Scopes (Ámbito) • Otro punto a considerar, es el scope de las declaraciones • El scope de una declaración de X, es la región del programa, en la que el uso de X, hacen referencia a esta declaración • Un lenguaje usa scope estático o léxico, si mirando el programa podemos determinar el scope de un símbolo X
  • 6. Scopes (Ámbito) • Por el contrario, un lenguaje utiliza scope dinámico, si con la ejecución del programa, el uso de la variable X puede hacer referencia a diferentes declaraciones de X • La mayoría de los lenguajes utilizan scope estático o léxico
  • 7. Environments vs. States • Otro aspecto importante, es si los cambios que ocurren al ejecutar el programa, afectan los elementos de datos, o la interpretación de los nombres usados para acceder a esos datos • Por ejemplo, x = y + 1 • Cambia el valor denotado por x • Sin embargo, un atributo “nombre” dentro de una clase, cambia para cada instancia de la clase
  • 8. Environments vs. States Environment Nombres Variables (Direcciones) Valores State
  • 9. Environments vs. States • Environment – Es una función que mapea nombres en direcciones de memoria • State – Es una función que mapea direcciones de memoria en valores
  • 10. Environments vs. States • Por ejemplo…dos int x; usos del nombre “i” ... void f(...) { int i; ... i = 3; ... } ... x = i + 1
  • 11. Scope estático y bloques • Los lenguajes tipo C utilizan scope estatico • La estructura del programa, determina el scope de los símbolos • Lenguajes posteriores como C#, Java y C++ agregaron el concepto de modificador de acceso – private, public, protected
  • 12. Scope estático y bloques • La mayoría de estos lenguajes utiliza una construcción denominada bloque para afectar el scope de los símbolos • Un bloque es una agrupación de sentencias • C utiliza { … } para definir un bloque • Otros lenguajes utilizan begin … end
  • 13. 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 parámetros – El scope de estas declaraciones están restringidos a la función en la que están contenidos
  • 14. Scope en C • El scope de una int x; declaración top-level de ... un nombre X, consiste void f(...) { char x; en todo el programa, ... salvo aquellas funciones x = ‘3’; en donde el nombre X ... también haya sido } declarado ... x = i + 1
  • 15. 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
  • 16.
  • 17. 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
  • 18. Bloques • Decimos que una declaración 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
  • 19. 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
  • 20.
  • 21. Control de acceso explicito • En los lenguajes orientados a objetos, las clases introducen una nueva forma de scope para sus miembros • En una clase C, el scope de un miembro X, es la clase C, junto con cualquier clase derivada, excepto si esta clase derivada redefine el miembro X – Los modificadores public, private y protected afectan esto
  • 22. Scope dinámico • Una técnica de scope es dinámica, si esta basada en factores que solo pueden ser determinados al ejecutar el programa • Con scope dinámico, el uso de un nombre X, se refiere a la declaración de X, en la función mas recientemente llamada con esa declaración
  • 23. Scope dinámico int x = 2; void b() ( int x = 1; printf (”%dn” , x); // Imprime 1 } void c() { printf(“%dn” , x); // Imprime 1 void main() { b(); c(); } main() b() c()
  • 24. Pasaje de parámetros • Lo que nos interesa, es como los parámetros actuales (los que usamos en la invocación a un procedimientos), son asociados con los parámetros formales (los que están en la declaración del procedimiento) • Tenemos tres formas de pasar parametros – Call by value, Call by reference, Call by name
  • 25. Call by value • El parámetro actual es evaluado (si es una expresión), y su valor es copiado en el parámetro formal • Es el método usado en C, Java, C# y el mas común en C++ • Los parámetros actuales no se ven afectados por los cambios realizados en el procedimiento • Podemos pasar por valor, la dirección de memoria de una variable
  • 26. Call by reference • En este caso, se pasa la dirección de los parámetros actuales, colocando la misma en los parámetros formales • El acceso a través de los parámetros formales, se hace siguiendo esta dirección – Parámetros “ref“ en C++ • Los cambios en los parámetros formales, afectan los parámetros actuales
  • 27. Call by name • Este mecanismo ya no es usado hoy • Funciona como una expansión de una macro en el procedimiento • Cada parámetro formal, es reemplazado literalmente por el parámetro actual • En el caso de pasar expresiones como parámetro, esto genera comportamientos poco intuitivos
  • 28. Aliasing • Esto se da cuando tenemos pasaje de parámetros por referencia (o por valor, pasando la misma dirección 2 veces) • Dos parámetros formales diferentes, pueden apuntar al mismo parámetro actual • Esto genera una situación de alias entre ambos parámetros formales