fundamentos de lenguajes de programación

110
Fundamentos de Lenguajes de Programaci´on Abstracci´ on de Datos Carlos Alberto Ram´ ırez Restrepo Programa Acad´ emico Ingenier´ ıa de Sistemas Universidad del Valle, Tulua, Colombia home page: http://tulua.univalle.edu.co/ [email protected]

Upload: independent

Post on 10-Dec-2023

0 views

Category:

Documents


0 download

TRANSCRIPT

Fundamentos de Lenguajes de ProgramacionAbstraccion de Datos

Carlos Alberto Ramırez Restrepo

Programa Academico Ingenierıa de SistemasUniversidad del Valle, Tulua, Colombia

home page: http://tulua.univalle.edu.co/[email protected]

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Contenido

1 Conceptos Generales

2 Estrategias para representar tipos de datos

3 Definicion de tipos de datos

4 Sintaxis Abstracta

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

X Cada vez que se decide representar un conjunto de valores en unaforma particular, se esta definiendo un nuevo tipo de dato.

X Sobre un tipo de dato se define sus valores o representaciones y lasoperaciones que lo manipulan.

X La representacion de estas entidades es bastante compleja y sepuede requerir modificarla.

X Para llevar a cabo esta tarea es utilizada la tecnica de abstraccionde datos.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

X Cada vez que se decide representar un conjunto de valores en unaforma particular, se esta definiendo un nuevo tipo de dato.

X Sobre un tipo de dato se define sus valores o representaciones y lasoperaciones que lo manipulan.

X La representacion de estas entidades es bastante compleja y sepuede requerir modificarla.

X Para llevar a cabo esta tarea es utilizada la tecnica de abstraccionde datos.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

X Cada vez que se decide representar un conjunto de valores en unaforma particular, se esta definiendo un nuevo tipo de dato.

X Sobre un tipo de dato se define sus valores o representaciones y lasoperaciones que lo manipulan.

X La representacion de estas entidades es bastante compleja y sepuede requerir modificarla.

X Para llevar a cabo esta tarea es utilizada la tecnica de abstraccionde datos.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

X Cada vez que se decide representar un conjunto de valores en unaforma particular, se esta definiendo un nuevo tipo de dato.

X Sobre un tipo de dato se define sus valores o representaciones y lasoperaciones que lo manipulan.

X La representacion de estas entidades es bastante compleja y sepuede requerir modificarla.

X Para llevar a cabo esta tarea es utilizada la tecnica de abstraccionde datos.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

X La abstraccion de datos es una tecnica general que separa las partesde un programa que tratan la representacion de los datos de laspartes del programa que tratan la forma de uso de los datos.

X La abstraccion de datos hace mucho mas facıl el diseno,mantenimiento y modificacion de los programas.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

X La abstraccion de datos es una tecnica general que separa las partesde un programa que tratan la representacion de los datos de laspartes del programa que tratan la forma de uso de los datos.

X La abstraccion de datos hace mucho mas facıl el diseno,mantenimiento y modificacion de los programas.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

X La abstraccion de datos divide un tipo de dato en dos partes: unainterfaz y una implementacion.

X La interfaz de un tipo de datos dice que representa el tipo de dato,sus operaciones y las propiedades de dichas operaciones.

X La implementacion proporciona una representacion especıfica de losdatos y un codigo para las operaciones que hacen uso de esarepresentacion.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

X La abstraccion de datos divide un tipo de dato en dos partes: unainterfaz y una implementacion.

X La interfaz de un tipo de datos dice que representa el tipo de dato,sus operaciones y las propiedades de dichas operaciones.

X La implementacion proporciona una representacion especıfica de losdatos y un codigo para las operaciones que hacen uso de esarepresentacion.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

X La abstraccion de datos divide un tipo de dato en dos partes: unainterfaz y una implementacion.

X La interfaz de un tipo de datos dice que representa el tipo de dato,sus operaciones y las propiedades de dichas operaciones.

X La implementacion proporciona una representacion especıfica de losdatos y un codigo para las operaciones que hacen uso de esarepresentacion.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Tipo Abstracto de Dato (TAD)

X Un tipo de dato que es abstracto se denomina Tipo Abstracto de Dato(TAD).

X El resto del programa fuera del tipo de dato, llamado el cliente del tipo dedato, manipula el nuevo dato solo mediante las operaciones especıficadasen la interfaz.

X El codigo del cliente es independiente de la representacion si manipula losvalores del tipo de dato solo a traves de los procedimientos en su interfaz.

X Todo el conocimiento sobre como el dato es representado debe estar en elcodigo de la implementacion.

X Se usa la notacion dve para referirse a “la representacion del dato v”.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Tipo Abstracto de Dato (TAD)

X Un tipo de dato que es abstracto se denomina Tipo Abstracto de Dato(TAD).

X El resto del programa fuera del tipo de dato, llamado el cliente del tipo dedato, manipula el nuevo dato solo mediante las operaciones especıficadasen la interfaz.

X El codigo del cliente es independiente de la representacion si manipula losvalores del tipo de dato solo a traves de los procedimientos en su interfaz.

X Todo el conocimiento sobre como el dato es representado debe estar en elcodigo de la implementacion.

X Se usa la notacion dve para referirse a “la representacion del dato v”.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Tipo Abstracto de Dato (TAD)

X Un tipo de dato que es abstracto se denomina Tipo Abstracto de Dato(TAD).

X El resto del programa fuera del tipo de dato, llamado el cliente del tipo dedato, manipula el nuevo dato solo mediante las operaciones especıficadasen la interfaz.

X El codigo del cliente es independiente de la representacion si manipula losvalores del tipo de dato solo a traves de los procedimientos en su interfaz.

X Todo el conocimiento sobre como el dato es representado debe estar en elcodigo de la implementacion.

X Se usa la notacion dve para referirse a “la representacion del dato v”.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Tipo Abstracto de Dato (TAD)

X Un tipo de dato que es abstracto se denomina Tipo Abstracto de Dato(TAD).

X El resto del programa fuera del tipo de dato, llamado el cliente del tipo dedato, manipula el nuevo dato solo mediante las operaciones especıficadasen la interfaz.

X El codigo del cliente es independiente de la representacion si manipula losvalores del tipo de dato solo a traves de los procedimientos en su interfaz.

X Todo el conocimiento sobre como el dato es representado debe estar en elcodigo de la implementacion.

X Se usa la notacion dve para referirse a “la representacion del dato v”.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Tipo Abstracto de Dato (TAD)

X Un tipo de dato que es abstracto se denomina Tipo Abstracto de Dato(TAD).

X El resto del programa fuera del tipo de dato, llamado el cliente del tipo dedato, manipula el nuevo dato solo mediante las operaciones especıficadasen la interfaz.

X El codigo del cliente es independiente de la representacion si manipula losvalores del tipo de dato solo a traves de los procedimientos en su interfaz.

X Todo el conocimiento sobre como el dato es representado debe estar en elcodigo de la implementacion.

X Se usa la notacion dve para referirse a “la representacion del dato v”.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

X La interfaz consiste de cuatro entidades: una constante zero y tresprocedimientos iszero?, succ y pred.

X Un conjunto de procedimientos sera aceptable como implementacion deestas entidades si satisface estas ecuaciones:

zero = d0e

(iszero? dne) ={

#t n = 0#f n 6= 0

(succ dne) = dn+ 1e (n ≥ 0)(pred dn+ 1e) = dne (n ≥ 0)

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

X La interfaz consiste de cuatro entidades: una constante zero y tresprocedimientos iszero?, succ y pred.

X Un conjunto de procedimientos sera aceptable como implementacion deestas entidades si satisface estas ecuaciones:

zero = d0e

(iszero? dne) ={

#t n = 0#f n 6= 0

(succ dne) = dn+ 1e (n ≥ 0)(pred dn+ 1e) = dne (n ≥ 0)

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

X Esta especificacion no dice como se representaran los numeros enteros nonegativos.

X A partir de esta espeficicacion se pueden escribir programas quemanipulan los enteros no negativos, asegurando que seran correctos, noimporta cual sea la representacion que se use.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

X Esta especificacion no dice como se representaran los numeros enteros nonegativos.

X A partir de esta espeficicacion se pueden escribir programas quemanipulan los enteros no negativos, asegurando que seran correctos, noimporta cual sea la representacion que se use.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

Es posible escribir la funcion plus que manipula dos numeros enteros nonegativos a traves de su interfaz:

(define plus

(lambda (x y)

(if (iszero? x)

y

(succ (plus (pred x) y)))))

Satisface (plus dxe dye) = dx+ ye.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

Es posible escribir la funcion plus que manipula dos numeros enteros nonegativos a traves de su interfaz:

(define plus

(lambda (x y)

(if (iszero? x)

y

(succ (plus (pred x) y)))))

Satisface (plus dxe dye) = dx+ ye.

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

Tres posibles representaciones para los enteros no negativos:

1. Representacion Unaria: Donde un entero no negativo n es representadopor una lista de n sımbolos ’#t’.

d0e = ()

dn+ 1e = (cons #t dne)

En esta representacion, se satisface la especificacion escribiendo:

(define zero ’())

(define iszero? null?)

(define succ (lambda (n) (cons #t n)))

(define pred cdr)

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

Tres posibles representaciones para los enteros no negativos:

1. Representacion Unaria: Donde un entero no negativo n es representadopor una lista de n sımbolos ’#t’.

d0e = ()

dn+ 1e = (cons #t dne)

En esta representacion, se satisface la especificacion escribiendo:

(define zero ’())

(define iszero? null?)

(define succ (lambda (n) (cons #t n)))

(define pred cdr)

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

2. Representacion de Numeros de Scheme: Se usa la representacion internade numeros de Scheme.

dne = n

Se definen las entidades como:

(define zero 0)

(define iszero? zero?)

(define succ (lambda (n) (+ n 1)))

(define pred (lambda (n) (- n 1)))

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

2. Representacion de Numeros de Scheme: Se usa la representacion internade numeros de Scheme.

dne = n

Se definen las entidades como:

(define zero 0)

(define iszero? zero?)

(define succ (lambda (n) (+ n 1)))

(define pred (lambda (n) (- n 1)))

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

3. Representacion Bignum: Los numeros son representados en base N , paraalgun entero grande N . Dicha representacion es una lista que consiste denumeros entre 0 y N − 1.

dne ={

() n = 0(cons r dqe) n = qN + r, 0 ≤ r < N

Luego si N = 16, entonces:

d33e = (1 2) ((1× 160) + (2× 161))d258e = (2 0 1) ((2× 160) + (0× 161) + (1× 162)).

Fundamentos de Lenguajes de Programacion

Conceptos Generales

Abstraccion de datos

Ejemplo - Tipo de dato entero no negativo

3. Representacion Bignum: Los numeros son representados en base N , paraalgun entero grande N . Dicha representacion es una lista que consiste denumeros entre 0 y N − 1.

dne ={

() n = 0(cons r dqe) n = qN + r, 0 ≤ r < N

Luego si N = 16, entonces:

d33e = (1 2) ((1× 160) + (2× 161))d258e = (2 0 1) ((2× 160) + (0× 161) + (1× 162)).

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Contenido

1 Conceptos Generales

2 Estrategias para representar tipos de datos

3 Definicion de tipos de datos

4 Sintaxis Abstracta

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

X Cuando es usada la abstraccion de datos, los programas tienen lapropiedad de independencia de representacion.

X Se presentan algunas estrategias para representar tipos de datos. Seilustran estas estrategias usando el tipo de dato ambiente.

X Un ambiente asocia un valor con cada elemento de un conjuntofinito de variables.

X Un ambiente puede ser usado para asociar las variables con susvalores en la implementacion de un lenguaje de programacion.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

X Cuando es usada la abstraccion de datos, los programas tienen lapropiedad de independencia de representacion.

X Se presentan algunas estrategias para representar tipos de datos. Seilustran estas estrategias usando el tipo de dato ambiente.

X Un ambiente asocia un valor con cada elemento de un conjuntofinito de variables.

X Un ambiente puede ser usado para asociar las variables con susvalores en la implementacion de un lenguaje de programacion.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

X Cuando es usada la abstraccion de datos, los programas tienen lapropiedad de independencia de representacion.

X Se presentan algunas estrategias para representar tipos de datos. Seilustran estas estrategias usando el tipo de dato ambiente.

X Un ambiente asocia un valor con cada elemento de un conjuntofinito de variables.

X Un ambiente puede ser usado para asociar las variables con susvalores en la implementacion de un lenguaje de programacion.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

X Cuando es usada la abstraccion de datos, los programas tienen lapropiedad de independencia de representacion.

X Se presentan algunas estrategias para representar tipos de datos. Seilustran estas estrategias usando el tipo de dato ambiente.

X Un ambiente asocia un valor con cada elemento de un conjuntofinito de variables.

X Un ambiente puede ser usado para asociar las variables con susvalores en la implementacion de un lenguaje de programacion.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

X Las variables pueden ser representadas de cualquier manera, siemprey cuando sea posible chequear la igualdad entre dos variables.

X Las variables se pueden representar mediante simbolos, cadenas,referencias en una tabla hash o incluso mediante numeros.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

X Las variables pueden ser representadas de cualquier manera, siemprey cuando sea posible chequear la igualdad entre dos variables.

X Las variables se pueden representar mediante simbolos, cadenas,referencias en una tabla hash o incluso mediante numeros.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Interfaz

X Un ambiente es una funcion cuyo dominio es un conjunto finito devariables y cuyo rango es el conjunto de todos los valores de Scheme.

X De acuerdo a la notacion matematica, los ambientes representan todoslos conjuntos de la forma {(s1, v1), . . . , (sn, vn)}, donde los si sonsımbolos diferentes y los vi son valores de Scheme.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Interfaz

X Un ambiente es una funcion cuyo dominio es un conjunto finito devariables y cuyo rango es el conjunto de todos los valores de Scheme.

X De acuerdo a la notacion matematica, los ambientes representan todoslos conjuntos de la forma {(s1, v1), . . . , (sn, vn)}, donde los si sonsımbolos diferentes y los vi son valores de Scheme.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Interfaz

La interfaz del tipo de dato ambiente tiene tres procedimientos:

(empty-env) = d∅e(apply-env dfe s) = f(s)(extend-env var v dfe) = dge,

donde g(s′) =

{v si s′ = varf(s′) de otra forma

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Interfaz

X El procedimiento empty-env debe producir una representacion delambiente vacıo.

X El procedimiento apply-env aplica una representacion de un ambiente aun argumento.

X El procedimiento (extend-env var val env) produce un nuevo ambienteque se comporta como env, excepto que su valor en el sımbolo var es val.

(define e

(extend-env ’d 6

(extend-env ’y 8

(extend-env ’x 7

(extend-env ’y 14

(empty-env))))))

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Interfaz

X El procedimiento empty-env debe producir una representacion delambiente vacıo.

X El procedimiento apply-env aplica una representacion de un ambiente aun argumento.

X El procedimiento (extend-env var val env) produce un nuevo ambienteque se comporta como env, excepto que su valor en el sımbolo var es val.

(define e

(extend-env ’d 6

(extend-env ’y 8

(extend-env ’x 7

(extend-env ’y 14

(empty-env))))))

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Interfaz

X El procedimiento empty-env debe producir una representacion delambiente vacıo.

X El procedimiento apply-env aplica una representacion de un ambiente aun argumento.

X El procedimiento (extend-env var val env) produce un nuevo ambienteque se comporta como env, excepto que su valor en el sımbolo var es val.

(define e

(extend-env ’d 6

(extend-env ’y 8

(extend-env ’x 7

(extend-env ’y 14

(empty-env))))))

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion como estructura de datos

X Cada ambiente puede ser construido mediante una expresion en lasiguiente gramatica:

<env-exp> ::= (empty-env)

::= (extend-env <identificador> <scheme-value> <env-exp>)

X De acuerdo a esta gramatica los ambientes pueden ser representadoscomo listas en Scheme.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion como estructura de datos

X Cada ambiente puede ser construido mediante una expresion en lasiguiente gramatica:

<env-exp> ::= (empty-env)

::= (extend-env <identificador> <scheme-value> <env-exp>)

X De acuerdo a esta gramatica los ambientes pueden ser representadoscomo listas en Scheme.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion como estructura de datos

empty-env: () → Env

(define empty-env

(lambda () (list ’empty-env)))

extend-env: V ar ∗ SchemeV alue ∗ Env → Env

(define extend-env

(lambda (var val env)

(list ’extend-env var val env)))

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion como estructura de datos

empty-env: () → Env

(define empty-env

(lambda () (list ’empty-env)))

extend-env: V ar ∗ SchemeV alue ∗ Env → Env

(define extend-env

(lambda (var val env)

(list ’extend-env var val env)))

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion como estructura de datos

apply-env: Env ∗ V ar → SchemeV alue

(define apply-env

(lambda (env search-var)

(cond ((eqv? (car env) ’empty-env)

(report-no-binding-found search-var))

((eqv? (car env) ’extend-env)

(let ((saved-var (cadr env))

(saved-val (caddr env))

(saved-env (cadddr env)))

(if (eqv? search-var saved-var)

saved-val

(apply-env saved-env search-var))))

(else (report-invalid-env env)))))

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion Procedimental

X La interfaz del tipo de dato ambiente tiene una propiedad importante: ellatiene exactamente una entidad observadora apply-env.

X Esto permite representar un ambiente como un procedimiento que tomauna variable y retorna su valor asociado.

X Se define empty-env y extend-env de tal manera que retornan unprocedimiento que al ser aplicado devuelve el valor asociado a la variableen el ambiente.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion Procedimental

X La interfaz del tipo de dato ambiente tiene una propiedad importante: ellatiene exactamente una entidad observadora apply-env.

X Esto permite representar un ambiente como un procedimiento que tomauna variable y retorna su valor asociado.

X Se define empty-env y extend-env de tal manera que retornan unprocedimiento que al ser aplicado devuelve el valor asociado a la variableen el ambiente.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion Procedimental

X La interfaz del tipo de dato ambiente tiene una propiedad importante: ellatiene exactamente una entidad observadora apply-env.

X Esto permite representar un ambiente como un procedimiento que tomauna variable y retorna su valor asociado.

X Se define empty-env y extend-env de tal manera que retornan unprocedimiento que al ser aplicado devuelve el valor asociado a la variableen el ambiente.

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion Procedimental

empty-env: () → Env

(define empty-env

(lambda ()

(lambda (search-var)

(report-no-binding-found search-var))))

extend-env: V ar ∗ SchemeV alue ∗ Env → Env

(define extend-env

(lambda (saved-var saved-val saved-env)

(lambda (search-var)

(if (eqv? search-var saved-var)

saved-val

(apply-env saved-env search-var)))))

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion Procedimental

empty-env: () → Env

(define empty-env

(lambda ()

(lambda (search-var)

(report-no-binding-found search-var))))

extend-env: V ar ∗ SchemeV alue ∗ Env → Env

(define extend-env

(lambda (saved-var saved-val saved-env)

(lambda (search-var)

(if (eqv? search-var saved-var)

saved-val

(apply-env saved-env search-var)))))

Fundamentos de Lenguajes de Programacion

Estrategias para representar tipos de datos

Estrategias para representar tipos de datos

Tipo de dato Ambiente: Representacion Procedimental

apply-env: Env ∗ V ar → SchemeV alue

(define apply-env

(lambda (env search-var)

(env search-var)))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Contenido

1 Conceptos Generales

2 Estrategias para representar tipos de datos

3 Definicion de tipos de datos

4 Sintaxis Abstracta

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Hasta el momento hemos visto como definir tipos de datos recursivosmediante diferentes metodos. Por ejemplo:

〈lambda-exp〉 ::= 〈identificador〉::= (lambda(〈identificador〉) 〈lambda-exp〉)::= (〈lambda-exp〉 〈lambda-exp〉)

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Ası mismo, hemos intentado manipular y operar tipos de datos recursivos. Porejemplo, para las expresiones del calculo λ se han definido procedimientos comooccurs-free?:

(define occurs-free?

(lambda (var exp)

(cond ((symbol? exp) (eqv? var exp))

((eqv? (car exp) ’lambda)

(and (not (eqv? var (car (cadr exp))))

(occurs-free? var (caddr exp))))

(else

(or (occurs-free? var (car exp))

(occurs-free? var (cadr exp)))))))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

X No obstante, esta definicion de occurs-free? es dıficil de leer (esdıficil decir que (car (cadr exp)) se refiere a la declaracion deuna variable en una expresion lambda o que (caddr exp) se refierea su cuerpo).

X Esta definicion establece cierta dependencia con la implementacionde las expresiones del calculo λ como listas.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

X No obstante, esta definicion de occurs-free? es dıficil de leer (esdıficil decir que (car (cadr exp)) se refiere a la declaracion deuna variable en una expresion lambda o que (caddr exp) se refierea su cuerpo).

X Esta definicion establece cierta dependencia con la implementacionde las expresiones del calculo λ como listas.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

X Se puede mejorar estos aspectos introduciendo interfaces para lacreacion y manipulacion de datos de un cierto tipo.

X Una interfaz para un tipo de dato consta de procedimientosconstructores y procedimientos observadores.

X Los procedimientos observadores pueden ser predicados oextractores.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

X Se puede mejorar estos aspectos introduciendo interfaces para lacreacion y manipulacion de datos de un cierto tipo.

X Una interfaz para un tipo de dato consta de procedimientosconstructores y procedimientos observadores.

X Los procedimientos observadores pueden ser predicados oextractores.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

X Se puede mejorar estos aspectos introduciendo interfaces para lacreacion y manipulacion de datos de un cierto tipo.

X Una interfaz para un tipo de dato consta de procedimientosconstructores y procedimientos observadores.

X Los procedimientos observadores pueden ser predicados oextractores.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz para expresiones calculo λ

Para las expresiones del calculo λ tenemos la siguiente interfaz:

X Constructores:

var-exp : Var → Lc-explambda-exp : Var * Lc-exp → Lc-expapp-exp : Lc-exp * Lc-exp → Lc-exp

X Predicados:

var-exp? : Lc-exp → Boollambda-exp? : Lc-exp → Boolapp-exp? : Lc-exp → Bool

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz para expresiones calculo λ

Para las expresiones del calculo λ tenemos la siguiente interfaz:

X Constructores:

var-exp : Var → Lc-explambda-exp : Var * Lc-exp → Lc-expapp-exp : Lc-exp * Lc-exp → Lc-exp

X Predicados:

var-exp? : Lc-exp → Boollambda-exp? : Lc-exp → Boolapp-exp? : Lc-exp → Bool

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz para expresiones calculo λ

X Extractores:

var-exp->var : Lc-exp → Varlambda-exp->bound-var : Lc-exp → Varlambda-exp->body : Lc-exp → Lc-expapp-exp->rator : Lc-exp → Lc-expapp-exp->rand : Lc-exp → Lc-exp

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz para expresiones calculo λ

Ahora es posible escribir una version de occurs-free? que depende solode la interfaz.

(define occurs-free?

(lambda (search-var exp)

(cond

((var-exp? exp) (eqv? search-var (var-exp->var exp)))

((lambda-exp? exp)

(and

(not (eqv? search-var (lambda-exp->bound-var exp)))

(occurs-free? search-var (lambda-exp->body exp))))

(else

(or

(occurs-free? search-var (app-exp->rator exp))

(occurs-free? search-var (app-exp->rand exp)))))))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

X La interfaz para el tipo de dato ambiente consta de losconstructores empty-env y extended-env y del procedimientoobservador apply-env.

X La interfaz para el tipo de dato lista consta de los constructoresempty-list y cons, de los procedimientos extractores car y cdr ydel predicado list?.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

X La interfaz para el tipo de dato ambiente consta de losconstructores empty-env y extended-env y del procedimientoobservador apply-env.

X La interfaz para el tipo de dato lista consta de los constructoresempty-list y cons, de los procedimientos extractores car y cdr ydel predicado list?.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Receta general para el diseno de interfaces de datos recursivos

1. Incluir un constructor para cada clase de dato (regla de produccion) en eltipo de dato.

2. Incluir un predicado para cada clase de dato en el tipo de dato.

3. Incluir un extractor para cada pieza de dato pasada a un constructor deltipo de dato.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Receta general para el diseno de interfaces de datos recursivos

1. Incluir un constructor para cada clase de dato (regla de produccion) en eltipo de dato.

2. Incluir un predicado para cada clase de dato en el tipo de dato.

3. Incluir un extractor para cada pieza de dato pasada a un constructor deltipo de dato.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Receta general para el diseno de interfaces de datos recursivos

1. Incluir un constructor para cada clase de dato (regla de produccion) en eltipo de dato.

2. Incluir un predicado para cada clase de dato en el tipo de dato.

3. Incluir un extractor para cada pieza de dato pasada a un constructor deltipo de dato.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype

X Para tipos de datos complejos, resulta tedioso construir interfacesrapidamente.

X La interfaz define-datatype es una herramienta de Scheme praconstruir e implementar interfaces para tipos de datos.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype

X Para tipos de datos complejos, resulta tedioso construir interfacesrapidamente.

X La interfaz define-datatype es una herramienta de Scheme praconstruir e implementar interfaces para tipos de datos.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype

X Las interfaces en Scheme pueden ser especificadas mediante la expresiondefine-datatype que tiene la forma general:

(define-datatype nombre-tipo nombre-predicado-tipo{(nombre-variante {(nombre-campo predicado )}∗ )}∗ )

X Esta declaracion crea un tipo de dato llamado nombre-tipo con algunasvariantes.

X Cada variante tiene un nombre (nombre-variante) y cero o mas campos,cada uno con un nombre y un predicado asociado.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype

X Las interfaces en Scheme pueden ser especificadas mediante la expresiondefine-datatype que tiene la forma general:

(define-datatype nombre-tipo nombre-predicado-tipo{(nombre-variante {(nombre-campo predicado )}∗ )}∗ )

X Esta declaracion crea un tipo de dato llamado nombre-tipo con algunasvariantes.

X Cada variante tiene un nombre (nombre-variante) y cero o mas campos,cada uno con un nombre y un predicado asociado.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype

X Las interfaces en Scheme pueden ser especificadas mediante la expresiondefine-datatype que tiene la forma general:

(define-datatype nombre-tipo nombre-predicado-tipo{(nombre-variante {(nombre-campo predicado )}∗ )}∗ )

X Esta declaracion crea un tipo de dato llamado nombre-tipo con algunasvariantes.

X Cada variante tiene un nombre (nombre-variante) y cero o mas campos,cada uno con un nombre y un predicado asociado.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype

X Dos tipos no pueden tener el mismo nombre, tampoco dos variantes,aunque pertenezcan a tipos diferentes, pueden tener el mismo nombre.

X Para cada variante, un procedimiento constructor es creado.

X Si hay n campos en una variante, su constructor recibe n argumentos,prueba sı cada uno de ellos satisface el predicado asociado y retorna unnuevo valor de dicha variante del tipo de dato.

X El nombre nombre-predicado-tipo es ligado a un predicado. Este predicadodetermina sı su argumento es un valor perteneciente al tipo nombre-tipo.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype

X Dos tipos no pueden tener el mismo nombre, tampoco dos variantes,aunque pertenezcan a tipos diferentes, pueden tener el mismo nombre.

X Para cada variante, un procedimiento constructor es creado.

X Si hay n campos en una variante, su constructor recibe n argumentos,prueba sı cada uno de ellos satisface el predicado asociado y retorna unnuevo valor de dicha variante del tipo de dato.

X El nombre nombre-predicado-tipo es ligado a un predicado. Este predicadodetermina sı su argumento es un valor perteneciente al tipo nombre-tipo.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype

X Dos tipos no pueden tener el mismo nombre, tampoco dos variantes,aunque pertenezcan a tipos diferentes, pueden tener el mismo nombre.

X Para cada variante, un procedimiento constructor es creado.

X Si hay n campos en una variante, su constructor recibe n argumentos,prueba sı cada uno de ellos satisface el predicado asociado y retorna unnuevo valor de dicha variante del tipo de dato.

X El nombre nombre-predicado-tipo es ligado a un predicado. Este predicadodetermina sı su argumento es un valor perteneciente al tipo nombre-tipo.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype: Ejemplo Expresiones calculo λ

El tipo de dato correspondiente a las expresiones del calculo λ puede serdefinido mediante la interfaz define-datatype como sigue:

(define-datatype lc-exp lc-exp?

(var-exp (id identifier?))

(lambda-exp (id identifier?)

(body lc-exp?))

(app-exp (rator lc-exp?)

(rand lc-exp?)))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype: Ejemplo Tipo de Dato s-list

El tipo de dato s-list puede ser definido mediante la interfazdefine-datatype como sigue:

(define-datatype s-list s-list?

(empty-s-list)

(non-empty-s-list (first s-exp?)

(rest s-list?)))

(define-datatype s-exp s-exp?

(symbol-s-exp (sym symbol?))

(s-list-s-exp (slst s-list?)))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Interfaz define-datatype: Ejemplo Tipo de Dato s-list

El tipo de dato s-list puede ser definido mediante la interfazdefine-datatype como sigue:

(define-datatype s-list s-list?

(an-s-list (sexps (list-of s-exp?))))

(define list-of

(lambda (pred)

(lambda (val)

(or (null? val)

(and (pair? val)

(pred (car val))

((list-of pred) (cdr val)))))))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Operador cases

Para determinar a que objeto de un tipo de dato pertenece una variante yextraer sus componentes, se usa la forma cases, la cual tiene la siguientesintaxis general:

(cases nombre-tipo expresion{(nombre-variante ( {nombre-campo}∗) consecuente)}∗(else por-defecto))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Operador cases

X La expresion cases evalua expresion. Esto da como resultado un valor vde tipo nombre-tipo.

X Si v es una variante nombre-variante, cada uno de los camposnombre-campo son asociados al valor del correspondiente campo de v.Luego la expresion consecuente es evaluada y su valor es retornado.

X Si v no es una de las variantes y la clausula else es especıficada, laexpresion por-defecto es evaluada y su valor retornado.

X Si no existe una clausula else, entonces tiene que existir una variantepara todos los tipos de dato.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Operador cases

X La expresion cases evalua expresion. Esto da como resultado un valor vde tipo nombre-tipo.

X Si v es una variante nombre-variante, cada uno de los camposnombre-campo son asociados al valor del correspondiente campo de v.Luego la expresion consecuente es evaluada y su valor es retornado.

X Si v no es una de las variantes y la clausula else es especıficada, laexpresion por-defecto es evaluada y su valor retornado.

X Si no existe una clausula else, entonces tiene que existir una variantepara todos los tipos de dato.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Operador cases

X La expresion cases evalua expresion. Esto da como resultado un valor vde tipo nombre-tipo.

X Si v es una variante nombre-variante, cada uno de los camposnombre-campo son asociados al valor del correspondiente campo de v.Luego la expresion consecuente es evaluada y su valor es retornado.

X Si v no es una de las variantes y la clausula else es especıficada, laexpresion por-defecto es evaluada y su valor retornado.

X Si no existe una clausula else, entonces tiene que existir una variantepara todos los tipos de dato.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Operador cases

X La expresion cases evalua expresion. Esto da como resultado un valor vde tipo nombre-tipo.

X Si v es una variante nombre-variante, cada uno de los camposnombre-campo son asociados al valor del correspondiente campo de v.Luego la expresion consecuente es evaluada y su valor es retornado.

X Si v no es una de las variantes y la clausula else es especıficada, laexpresion por-defecto es evaluada y su valor retornado.

X Si no existe una clausula else, entonces tiene que existir una variantepara todos los tipos de dato.

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Operador cases - Ejemplo

El procedimiento occurs-free? puede ser definido con cases como sigue:

(define occurs-free?

(lambda (search-var exp)

(cases lc-exp exp

(var-exp (var)

(eqv? var search-var))

(lambda-exp (bound-var body)

(and (not (eqv? search-var bound-var))

(occurs-free? search-var body)))

(app-exp (rator rand)

(or (occurs-free? search-var rator)

(occurs-free? search-var rand))))))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Mas ejemplos - Tipo de dato bin-tree

(define-datatype bintree bintree?

(leaf-node (datum number?))

(interior-node (key symbol?)

(left bintree?)

(right bintree?)))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Mas ejemplos - Tipo de dato bin-tree

Definir un procedimiento que permita encontrar la suma de los enteros en lashojas de un arbol. Usando cases se tiene:

(define leaf-sum

(lambda (tree)

(cases bintree tree

(leaf-node (datum) datum)

(interior-node (key left right)

(+ (leaf-sum left) (leaf-sum right))))))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Mas ejemplos - Ambientes

Es posible definir el tipo de dato ambiente mediante define-datatype comosigue:

(define-datatype environment environment?

(empty-env-record)

(extended-env-record (syms (list-of symbol?))

(vals (list-of scheme-value?))

(env environment?)))

(define scheme-value? (lambda (v) #t))

Fundamentos de Lenguajes de Programacion

Definicion de tipos de datos

Interfaces para tipos de datos recursivos

Mas ejemplos - Ambientes

La funcion apply-env puede ser definida con cases como sigue:

(define apply-env

(lambda (env sym)

(cases environment env

(empty-env-record ()

(eopl:error ’apply-env "No binding for ~s" sym))

(extended-env-record (syms vals env)

(let ((pos (list-find-position sym syms)))

(if (number? pos)

(list-ref vals pos)

(apply-env env sym)))))))

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Contenido

1 Conceptos Generales

2 Estrategias para representar tipos de datos

3 Definicion de tipos de datos

4 Sintaxis Abstracta

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Dada la gramatica de las expresiones del calculo lambda:

〈lambda-exp〉 ::= 〈identificador〉::= (lambda(〈identificador〉) 〈lambda-exp〉)::= (〈lambda-exp〉 〈lambda-exp〉)

X Se puede representar cada expresion del calculo lambda usando eltipo de dato lc-exp definido anteriormente mediantedefine-datatype.

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Dada la gramatica de las expresiones del calculo lambda:

〈lambda-exp〉 ::= 〈identificador〉::= (lambda(〈identificador〉) 〈lambda-exp〉)::= (〈lambda-exp〉 〈lambda-exp〉)

X Se puede representar cada expresion del calculo lambda usando eltipo de dato lc-exp definido anteriormente mediantedefine-datatype.

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Una BNF especifica una representacion particular de un tipo de datoque usa los valores generados por la gramatica.

X Esta representacion es llamada sintaxis concreta o representacionexterna.

X Para procesar dichos datos, se requiere convertirlos a unarepresentacion interna o sintaxis abstracta, en la cual los sımbolosterminales (como parentesis) no necesitan ser almacenados ya queno llevan informacion.

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Una BNF especifica una representacion particular de un tipo de datoque usa los valores generados por la gramatica.

X Esta representacion es llamada sintaxis concreta o representacionexterna.

X Para procesar dichos datos, se requiere convertirlos a unarepresentacion interna o sintaxis abstracta, en la cual los sımbolosterminales (como parentesis) no necesitan ser almacenados ya queno llevan informacion.

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Una BNF especifica una representacion particular de un tipo de datoque usa los valores generados por la gramatica.

X Esta representacion es llamada sintaxis concreta o representacionexterna.

X Para procesar dichos datos, se requiere convertirlos a unarepresentacion interna o sintaxis abstracta, en la cual los sımbolosterminales (como parentesis) no necesitan ser almacenados ya queno llevan informacion.

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Para crear una sintaxis abstracta a partir de una sintaxis concreta,se debe nombrar cada regla de produccion de la sintaxis concreta ycada ocurrencia de un sımbolo no terminal

X Para la gramatica de las expresiones del calculo λ, se puede resumirlas opciones (sintaxis concreta y abstracta) usando la siguientenotacion:

〈expresion〉 ::= 〈identificador〉var-exp (id)

::= (lambda (〈identificador〉) 〈expresion〉)lambda-exp (id body)

::= (〈expresion〉 〈expresion〉)app-exp (rator rand)

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Para crear una sintaxis abstracta a partir de una sintaxis concreta,se debe nombrar cada regla de produccion de la sintaxis concreta ycada ocurrencia de un sımbolo no terminal

X Para la gramatica de las expresiones del calculo λ, se puede resumirlas opciones (sintaxis concreta y abstracta) usando la siguientenotacion:

〈expresion〉 ::= 〈identificador〉var-exp (id)

::= (lambda (〈identificador〉) 〈expresion〉)lambda-exp (id body)

::= (〈expresion〉 〈expresion〉)app-exp (rator rand)

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X La sintaxis abstracta de una expresion es mas facil de comprendercuando se visualiza como un arbol de sintaxis abstracta

X El siguiente ejemplo muestra el arbol para la expresion (lambda

(x) (f (f x))):

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

lambda−exp

app−exp

var−exp app−exp

var−exp var−exp

id body

x

rator rand

id

f

rator rand

id

f

id

x

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Los arboles de sintaxis son utiles en lenguajes de programacion deprocesamiento de sistemas ya que los programas que procesan otrosprogramas (como los interpretadores o compiladores) son casisiempre dirigidos por sintaxis.

X Esto es que cada parte de un programa es guiado por la reglagramatical asociada con dicha parte, y cualquier subpartecorrespondiente a un sımbolo no terminal puede ser accedido confacilidad.

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Los arboles de sintaxis son utiles en lenguajes de programacion deprocesamiento de sistemas ya que los programas que procesan otrosprogramas (como los interpretadores o compiladores) son casisiempre dirigidos por sintaxis.

X Esto es que cada parte de un programa es guiado por la reglagramatical asociada con dicha parte, y cualquier subpartecorrespondiente a un sımbolo no terminal puede ser accedido confacilidad.

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Cuando se procesa la expresion (lambda (x) (f (f x))), primerose debe reconocer como una expresion del calculo lambda,correspondiente a la regla:

〈expresion〉 ::= (lambda (〈identificador〉) 〈expresion〉)

X El parametro formal es x y el cuerpo es (f (f x)). El cuerpo debeser reconocido como una app-exp, y ası sucesivamente.

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X Cuando se procesa la expresion (lambda (x) (f (f x))), primerose debe reconocer como una expresion del calculo lambda,correspondiente a la regla:

〈expresion〉 ::= (lambda (〈identificador〉) 〈expresion〉)

X El parametro formal es x y el cuerpo es (f (f x)). El cuerpo debeser reconocido como una app-exp, y ası sucesivamente.

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

El problema de convertir un arbol de sintaxis abstracta a unarepresentacion lista-y-sımbolo (con lo cual Scheme mostrarıa lasexpresiones en su sintaxis concreta), se resuelve con el procedimiento:

(define unparse-expression

(lambda (exp)

(cases expression exp

(var-exp (id) id)

(lambda-exp (id body)

(list ’lambda (list id)

(unparse-expression body)))

(app-exp (rator rand)

(list (unparse-expression rator)

(unparse-expression rand))))))

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X La tarea de derivar el arbol de sintaxis abstracta a partir de unacadena de caracteres es denominado parsing, y es llevado a cabo porun programa llamado parser (analizador sintactico)

X El siguiente procedimiento deriva la representacion en sintaxisconcreta a arboles de sintaxis abstracta:

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

X La tarea de derivar el arbol de sintaxis abstracta a partir de unacadena de caracteres es denominado parsing, y es llevado a cabo porun programa llamado parser (analizador sintactico)

X El siguiente procedimiento deriva la representacion en sintaxisconcreta a arboles de sintaxis abstracta:

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Sintaxis Abstracta

(define parse-expression

(lambda (datum)

(cond

((symbol? datum) (var-exp datum))

((pair? datum)

(if (eqv? (car datum) ’lambda)

(lambda-exp (caadr datum)

(parse-expression (caddr datum)))

(app-exp

(parse-expression (car datum))

(parse-expression (cadr datum)))))

(else (eopl:error ’parse-expression

"Invalid concrete syntax ~s" datum)))))

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Preguntas

?

Fundamentos de Lenguajes de Programacion

Sintaxis Abstracta

Proxima sesion

X Semantica de los conceptos fundamentales de los lenguajes deprogramacion.

X Primer interpretador.