fundamentos de lenguajes de programación
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)))))