Anda di halaman 1dari 13

UNA FORMALIZACIN DE LA SEMNTICA DE LOS LENGUAJES DE PROGRAMACION

Alejandro Garcs Calvelo1 Pilar Clara Espinosa Soteras2 Magali Matilla Belett3 Departamento de Ciencia de la Computacin Universidad de Oriente Santiago de Cuba 90500 Cuba 1 agarces_cu@yahoo.es 2 pilar@csd.uo.edu.cu 3 magali@csd.uo.edu.cu

Resumen La mayora de las implementaciones de lenguajes de programacin, a partir de especificaciones formales, se basan en el enfoque operacional, el cual por su naturaleza algortmica est muy cercano al desarrollo de prototipos. Sin embargo, este mtodo de definicin, incorpora una gran cantidad de detalles irrelevantes, lo cual lo hace inapropiado para la demostracin de propiedades de programas. En este trabajo, se presenta un mtodo matemtico para la definicin de la semntica de los lenguajes de programacin, el cual es a la vez abstracto y cercano a la prctica de la programacin. Esta estrategia extiende una variante denotacional introducida por Iriarte, incorporando sistemas algebraicos para la especificacin de las abstracciones de datos. Palabras claves: Mtodos formales, Denotacional, Semntica Algebraica. Especificacin, Semntica

1. Introduccin.
La especificacin formal de los lenguajes de programacin tiene una singular importancia para la comunidad de investigadores de la Ciencia de la Computacin. A travs de la misma se expone con rigurosidad una serie de detalles que, para el programador comn, son transparentes o carecen de significado. Una definicin caracteriza la instrumentacin de cualquier rasgo del lenguaje, de forma tal que pueda ser usada en la prueba de propiedades de programas como la correccin, terminacin, eficiencia y equivalencias entre ellos. La definicin de cualquier lenguaje debe reunir ciertas cualidades, como son: Debe ser total o completa, en el sentido de que los aspectos esenciales del lenguaje estn rigurosamente definidos. Debe ser natural, clara y legible. Debe emplear una notacin adecuada, comprensible y factible de ser implementada.

A partir de la dcada del 60 esto ha sido tarea primordial de los cientficos de esta ciencia. En cuanto a la definicin de la sintaxis se cuenta con mtodos de definicin ampliamente aceptados (ej. La notacin BNF), para los cuales existen algoritmos cuyas implementaciones son muy eficientes. En cuanto a la semntica, sin embargo, no es hasta la dcada del 70 que adquiere un impulso trascendente. La formalizacin de la semntica de los lenguajes de programacin ha sido estudiada y elaborada desde posiciones diferentes. Fundamentalmente se distinguen tres enfoques: el operacional, el axiomtico y el denotacional. 1.1. Enfoque operacional En el enfoque operacional, el ms cercano a la construccin de compiladores, la semntica del lenguaje se define en trminos de una mquina abstracta. Es decir, a cada instruccin del lenguaje se le asocia un conjunto de operaciones de mquina. Las operaciones describen cambios en el estado de la mquina caracterizado por el conjunto de valores de las variables y en el acto de control. Mediante el control se define el flujo de ejecucin del programa, incluyendo la terminacin o interrupcin de su trabajo. A partir del estado donde termina el programa se determina el resultado de su ejecucin. En la medida de cuan satisfactoria sea la abstraccin del hardware, ser su valor como gua para la estructuracin general e instrumentacin de compiladores. En la actualidad existen dos tendencias principales de la semntica operacional: La aproximacin Mquina Abstracta. Se especifica una va de implementacin del lenguaje sobre alguna computadora (idealizada) de bajo nivel, o en su defecto la traduccin a un lenguaje de bajo nivel para el cual se tiene una semntica operacional. La ventaja de este enfoque es su aproximacin a la implementacin. Su gran desventaja es que lleva implcito una gran cantidad de detalles irrelevantes.

La Semntica Operacional Estructural. Fue introducida por Plotkin a principios de la dcada de los ochenta [14]. Parte de la construccin de reglas de generacin, para definir todas las relaciones relevantes. Estas reglas simblicas trabajan directamente con la sintaxis del lenguaje. Las mismas, especifican las transiciones elementales de un programa, por induccin sobre su estructura. La Semntica Operacional Estructurada es un poco ms abstracta y clara que la aproximacin Mquina Abstracta. Una introduccin ms amplia, puede encontrarse en [10]. 1.2. Enfoque Axiomtico La semntica axiomtica descansa en una teora formal cuyas frmulas son ciertas aserciones o propiedades de los operadores e instrucciones del lenguaje. Los axiomas y reglas de deduccin se utilizan para la demostracin de propiedades de programas, por lo que constituyen el basamento fundamental de la construccin de verificadores [2]. Un conjunto de axiomas, junto con una descripcin formal del programa, pueden permitir la deduccin del resultado de la ejecucin del programa en cualquier ambiente dado, as como inferir las propiedades ms generales, tales como la correccin, terminacin y equivalencia entre programas. Este enfoque, por estar orientado a las necesidades de demostracin de propiedades de programas, no constituye un camino natural ni directo a algn mtodo de implementacin. Existen numerosos libros en los que se describe con ms nivel de detalle (Un buen ejemplo lo brinda Balcazar en [2]). 1.3. Enfoque denotacional. El enfoque denotacional, que constituye el eslabn de enlace entre los enfoques anteriores, opera asignndole un significado (entidad matemtica) al programa. A travs de esta entidad se describe la dependencia funcional entre el resultado de la ejecucin de un programa y sus datos iniciales. En particular se utiliza fuertemente la teora de conjuntos, donde los programas se expresan como funciones donde la mquina no est presente. Este enfoque, tambin llamado matemtico o funcional, es libre de los detalles de implementacin. La semntica denotacional, a diferencia de otros mtodos, parte de considerar la interpretacin como un conjunto de funciones totales incluyendo funciones que estn bien definidas sobre toda funcin admisible como argumento (una clase de funcionales) y que aun pueden aplicarse a ellas mismas. Los inicios de este enfoque se enmarcan en los trabajos de Scott y Strachey [16]. Uno de los mayores retos, para los estudiosos del enfoque denotacional, es buscar variantes constructivas que permitan la implementacin directa de prototipos de los lenguajes de programacin. Precisamente, los trabajos con el enfoque de Iriarte [11][4], establecieron una estrategia singular, pues en ellos se establece la formalizacin de los conceptos partiendo de sus aspectos operacionales. Este trabajo extiende esta variante, incorporando especificaciones algebraicas para la definicin de las abstracciones de datos.
3

2. Fundamentos de la semntica denotacional.


La principal idea del enfoque denotacional, es que el significado de un programa puede describirse en trminos de la aplicacin de funciones a sus argumentos. As, no ser necesario basar la semntica en mquinas de bajo nivel, ni siquiera en mquinas virtuales, tal como se hace en la semntica operacional. Adems, con el uso de conjuntos y funciones, se podr modelar la mayora de los conceptos, tales como memoria, variables, tipos, etc. Esta modelacin, permite alcanzar tan alto nivel de abstraccin como el mtodo axiomtico. 2.1. Preliminares. En este epgrafe se exponen un conjunto de notaciones y definiciones matemticas, las cuales son necesarias para comprender los resultados principales de este trabajo. 2.1.1. Relaciones Si A1 = A2 =... = An con (n 1), entonces A1 A2 ... An se denotar por An. Tambin se denotara por A0 al conjunto { <> }. Se define por A* al conjunto
n0

An.

De igual forma, a* que pertenece a A*, denotar a una tupla ordenada de elementos de A. Definicin 1. (Funcin). Una funcin parcial (o simplemente funcin) f de A en B es una relacin en A B, tal que si <a,b> y <a,c> pertenecen a f, entonces b = c. En este caso, se escribir f : A B. A los conjuntos A y B se le llaman dominio (Dom(f)) y Codominio (Cdm(f) ) de f respectivamente. Definicin 2. (Funcin total). Si f : A B es una funcin definida para toda a A, es decir para toda a de A, existe un b de B tal que f(a) = b, entonces se dice que f es total. 2.1.2. Sistemas algebraicos. Definicin 3. (S-Conjunto). Un S-conjunto C es una familia de conjuntos indexada por S, C ={Cs}s S. Definicin 4. (Signatura Simple). El par ordenado = <S, F> se denomina signatura simple, si se cumplen las siguientes condiciones: i) ii) Los conjuntos S y F no tienen elementos comunes. F es un S*S conjunto, F = {Fw,s}<w,s> S*S.

S se denominan conjunto de gneros y los elementos del conjunto F son los smbolos de operaciones o de funciones. Sea w = w1 ... wn, y w1, ..., wn, s S. Si f Fw,s, decimos que f es un smbolo de operacin o funcin de dominio w1 ... wn y gnero s. Si f Fw,s, tambin podr denotarse por f: w1 ... wn s.

Sea = <S, F> una signatura simple. Definimos por F,s = {f f: s}, al conjunto de las operaciones constantes (o simplemente constantes) de gnero s. Definicin 5. (Conjunto de trminos de un gnero en una Signatura). Sea =<S,F> una signatura simple y fijemos V como un S-conjunto de variables. El conjunto Terms() de trminos (o expresiones) del gnero s en la signatura , se define recurrentemente como sigue: a) Toda variable x, tal que x Vs, es un trmino del gnero s en la signatura (Es decir, x Terms()). b) Toda constante m, tal que m F,s, es un trmino del gnero s en la signatura . c) Si f Fw1,,wn,s, y e1 Termw1(), , en Termwn(), entonces f(e1, , en) es un trmino del gnero s en la signatura . d) Todo trmino del gnero s en la signatura , se obtiene solamente como resultado de la aplicacin un nmero finito de veces de los pasos a), b) y c). Note, que cuando se fija un conjunto vaco de variables del gnero s (Vs=), entonces el conjunto Terms() slo est compuesto por trminos bsicos. Definicin 6. (Conjunto de trminos de una signatura). El conjunto de trminos de la signatura =<S, F> est definido por Term() = Terms()
sS

Definicin 7. (Enriquecimiento de una Signatura:). Sean dos signaturas simples 1=<S1,F1> y 2=<S2,F2>. Se dice que 2 es un enriquecimiento de 1, y lo denotamos por 1 2, si S1 S2 y F1 F2. Definicin 8. (Sistema Algebraico). El par ordenado = <DS, F>, es un sistema algebraico de la signatura =<S, F> (o simplemente una - lgebra), si se cumplen las siguientes condiciones: i. ii. El portador DS, es un S-conjunto. Es decir, DS = {Ds}sS. F ={f}fF, y es tal que para todo n 0 y f Fw1,..., wn,s, se tiene la interpretacin f de f en , definida como f: Dw1 ... Dwn Ds.

2.2. Conceptos bsicos del enfoque denotacional. Los conceptos fundamentales del enfoque denotacional son el estado y el transformador de estados [11]. La informacin dinmica de cada concepto del lenguaje de programacin (lo que cambia en ejecucin) est caracterizada en el concepto de estado. La informacin esttica (lo que no cambia en tiempo de ejecucin) se considera en la descripcin de los transformadores de estado. Estos dos conceptos permiten expresar las reglas semnticas de los lenguajes de programacin. El estado debe abarcar aquellos conceptos de mquina que cambian durante la ejecucin de un programa (direccin de memoria, valor almacenado, etc.) y deben ser slo los imprescindibles para describir completamente la semntica del lenguaje de programacin.
5

Se define por estado propio [11] a la terna = < , , >, donde: es el estado viejo (til para formalizar la estructuracin en mdulos del programa), : V MA es el ambiente de variables, donde V={x,x1,...} es el conjunto de identificadores de variables y MA el conjunto linealmente ordenado de direcciones de memoria. Si una variable x no est activa en el estado , entonces (x) = . : MA D , donde D = D {} {false, true}y D es el conjunto de datos representables en la mquina. El smbolo ( D) representa al valor indefinido. Por definicin, se cumple que ()=. En lo adelante, sin perdida de generalidad, el conjunto no vaco D representar al conjunto definido de la siguiente forma: D0 = Z , D = Dn
n0

Z representa el conjunto de nmeros enteros

Dn = {<d1, d2, , dn> di D0, para toda i (1 i n)}

Un transformador de estado es una funcin s: , donde es el conjunto de todos + + los estados propios [5] y a ( = {}) lo llamaremos el conjunto de estados. El elemento formal () representa el estado indefinido, til para indicar la no terminacin. Al conjunto de todos los transformadores de estado lo denotaremos por ST. Se cumple por definicin que si s ST, entonces s() = . El elemento ST, con la propiedad () = para todo , es un elemento distinguido en ST. 2.3. Significado de las expresiones predefinidas. La especificacin algebraica surge como un lenguaje para especificar estructuras de datos de una forma clara, sencilla, formal y no ambigua. A continuacin se presenta un lgebra 0 que caracteriza, de manera general, los principios de construccin y evaluacin de las expresiones enteras. El lgebra 0 corresponde a la realizacin del Tipo de Datos Abstracto (TDA) entero int, el cual constituye el nico TDA primitivo en nuestra aproximacin. La manipulacin de diferentes tipos de datos abstractos primitivos no ser abordada, pues no aporta informacin trascendente para los resultados que aqu se presentan. Descripciones ms amplias, sobre la formalizacin de lenguajes con mltiples tipos, se pueden encontrar en otros trabajos de Garcs ([5], [6]). Definicin 9. (Signatura del lgebra de los Enteros). La signatura 0 = < S0, F0> del lgebra de los Enteros est compuesta por: El conjunto S0 = {S, bool, int} de gneros de la signatura. Sea int2= int int. El conjunto F0 = { F,S , F,bool , F,int , Fint2,int , Fint2,bool } de funciones de la signatura, que es tal que: - F,S = {} - F,bool = {false, true} - F,int = {m | m D0}, (D0 definido como en epgrafe 2.2) - Fint2,int = { +, - } - Fint2,bool = { =, >, < }
6

Fijemos el S0-conjunto V0, el cual se denomina Conjunto de Variables de la signatura del TDA entero. Definimos por Term(0)=TermS(0) Termbool(0) Termint(0), al conjunto de trminos de la signatura de enteros 0, fijando el conjunto de variables V0. Asumimos que cualquiera de los elementos de V0 = V0int V0bool, es tal que no pertenece a ninguno de los conjuntos S0 y F0. Definicin 10.(Sistema Algebraico de Enteros). El Sistema Algebraico (o lgebra) de Enteros 0 de la signatura 0 = < S0, F0 > est dado por el par 0 = <DS0, F0>, donde DS0 y F0 se definen como sigue: a) El portador DS0 es un S0-conjunto, dado por DS0={ DS, Dbool, Dint }. Donde, DS= F,S, Dbool =F,bool y Dint =F,int. b) Si m F,s, con s S0, entonces m( )= m c) Si f Fint2,int y m1, m2 F,int, entonces f(m1, m2) = m1( ) m2( ). Donde es la interpretacin de f en el lgebra tradicional de enteros. d) Si r Fint2,bool y m1, m2 F,int, entonces r(m1, m2)= true( ), si <m1, m2> , donde es la interpretacin de la relacin r sobre los enteros. En caso contrario, r(m1, m2) = false( ). Note que se ha hecho coincidir las representaciones sintcticas y semnticas. Esto, no resta generalidad a los resultados presentados. En lo adelante, tambin se denotar a la constante m( ) simplemente por m. Definimos el Tipo de Datos Abstracto entero, denotado por int, como el par <0, 0>, el cual describe su interfaz e implementacin respectivamente. Definicin 11. (R-valor de expresiones enteros). Sea el Sistema Algebraico de los Enteros 0 = <DS0, F0> de la signatura 0 = < S0, F0 >, el S0-conjunto de variables V0 y el estado + ( ), entonces el R-valor I0(e, ) Dint DS de la expresin e (e Termint(0)) en 0 para el estado , se define como sigue: a) I0(e,)= b) I0(m,)= m( ) c) I0(x,)= ((x)) para toda e Termint(0) para toda m F,int y todo estado propio para toda x V0int y todo estado propio = < , , > .

d) I0(f(e1,e2),)= f(I0(e1,), I0(e2,)) para todo f Fint2,int y e1,e2 Termint(0) y Proposicin 1. La definicin de la interpretacin de expresiones I0 describe una funcin + + total I0 : Termint(0) D0 . 2.4. Significado de las frmulas. El concepto de frmula juega un papel fundamental en la formalizacin de las especificaciones y las instrucciones protegidas, destacndose entre estas ltimas las alternativas y la seleccin por casos. Estas instrucciones se basan en la evaluacin de una proteccin, cuyo resultado determina si la instruccin est abierta (si la proteccin se satisface) o est cerrada (si no se satisface).
7

Definicin 12. (Conjunto de frmulas de 0). El conjunto Form(0) de frmulas de la signatura 0 se define recurrentemente como sigue: a) Si A Termbool(0), entoces A es una frmulas de la signatura 0. b) Si A1 y A2 son frmulas de la signatura 0, entonces A1 A2; A1 A2; y A1 son frmulas de la signatura 0. c) Toda frmula se obtiene solamente como resultado de la aplicacin un nmero finito de veces de los pasos a) y b). Definicin 13. (Veracidad de frmulas en el Sistema Algebraico de Enteros). Sea el Sistema Algebraico de los Enteros 0 = <DS0, F0> de la signatura 0 = < S0, F0 >, el estado propio ( ), el S0-conjunto de variables V0, la funcin R-valor I0 y la frmula A Form(0), definimos la relacin 0, |= A (se lee para el lgebra 0 y el estado , es verdadero A) como sigue: 0, |= true es vlido. 0, |= false no es vlido. 0, |= x es vlido, si ((x)) = true. 0, |= x no es vlido, si ((x)) true. Si r Fint2,bool y e1, e2 Termint(0), entonces - 0, |= r(e1, e2) es vlido si, y slo si, r( I0(e1,), I0(e2,))= true( ). - En caso contrario 0, |= r(e1, e2) no es vlido. f) 0, |= A si, y slo si, no es vlido 0, |= A. g) 0, |= A1 A2 si, y slo si, son vlidos 0, |= A1 y 0, |= A2. h) 0, |= A1 A2 si, y slo si, es vlida 0, |= A1 o 0, |= A2. i) 0, |= A no es vlido. g a) b) c) d) e) 2.5. Tipo de datos abstracto Vector. En las secciones anteriores se ha definido completamente el Tipo de Datos Abstracto Primitivo int. En este epgrafe, se da la definicin (por extensin) del Tipo de Datos Abstracto Genrico VectorN, el cual caracteriza vectores (de dimensin variable) de enteros. El suprandice N (N>0) define la dimensin del tipo vector. El polimorfismo paramtrico que se presenta, es relativamente simple y evita relaciones de subtipos. El principio escogido, para la construccin de abstracciones de datos, se basa en el concepto de Extensiones de Tipos de Wirth[17]. Algunos trabajos ms recientes, pudieran servir de base a la generalizacin de esta clase de polimorfismo, destacndose entre ellos los de Abadi[1] y Leavens[13]. Sea FVectorN,int = {i | 1 i N}, que describe el conjunto de smbolos de proyecciones (operaciones), aplicables a cualquier tupla de un gnero VectorN. Definicin 14. (Signatura del TDA VectorN). La signatura N = < SN, FN> del TDA VectorN es un enriquecimiento de la signatura de entero 0, y est definida como sigue: a) El conjunto SN = S0 { VectorN}. b) El conjunto FN = F0+ F,VectorN FVectorN,int . Donde, F,VectorN = {m* | m* DN}, (DN definido como en epgrafe 2.2).

Fijemos el SN-conjunto VN (Conjunto de Variables de la signaturas del TDA VectorN). Sea Term(N)= TermS(N) Termbool(N) Termint(N) TermVectorN(N), el conjunto de trminos de la signatura N del TDA VectorN, fijando el conjunto de variables VN. Asumimos, igualmente, que los elemento de VN, no son miembros de ninguno de los conjuntos SN y FN. Definicin 15. (Sistema Algebraico del TDA VectorN). El Sistema Algebraico N de la signatura N = <SN, FN>, para el TDA VectorN, est dado por el par N = <DSN, FN>, donde DSN y FN se definen como sigue: a) El portador DSN es un SN-conjunto, dado por DSN={DS, Dbool, Dint, DVectorN}. Donde, DS= F,S, Dbool =F,bool , Dint =F,int y DVectorN = F,VectorN. b) Si m F,s, con s SN, entonces m( )= m c) Si f Fint2,int y m1, m2 F,int, entonces f(m1, m2) = m1( ) m2( ). Donde es la interpretacin de f en el lgebra tradicional de enteros. d) Si r Fint2,bool y m1, m2 F,int, entonces r(m1, m2)= true( ), si <m1, m2> , donde es la interpretacin de la relacin r sobre los enteros. En caso contrario, r(m1, m2) = false( ). e) Si i FVectorN,int y m*=<m1,,mN>(con m*F,VectorN), entonces i (m*)=mi. Definicin 16. (Generalizacin del R-valor de expresiones enteros). Sea el Sistema Algebraico N = <DSN, FN> de la signatura N=<SN, FN> del TDA VectorN, el estado + ( ) y el SN-conjunto de variables VN, entonces la generalizacin del R-valor, denotado por IN(e, ) Dint DS de la expresin e (e Termint(N) en N para el estado , se define como sigue: a) IN(e,)= i (m*) c) IN(e,)= I0(e,) si e i(m*) y m*F,VectorN y i FVectorN,int y . en otro caso.

b) IN(e,)= i(((xN))) si e i(xN) y xN VNVectorN y i FVectorN,int y .

Proposicin 2. La definicin de la generalizacin del R-valor de expresiones IN describe + + una funcin total IN : Termint(N) DN . Definicin 17. (Extensin de la Interpretacin (R-valor) de expresiones). La extensin de la interpretacin de expresiones IN, la cual denotamos por I+, se define como sigue: a) I+(e, ) = IN(E, ) b) I+(e, ) = si e Termint() y + en caso contrario

Definicin 18. (Conjunto de frmulas de N). El conjunto Form(n) de frmulas de la signatura N se define recurrentemente como sigue: a) Si A Termbool(N), entoces A es una frmulas de la signatura N. b) Si A1 y A2 son frmulas de la signatura N, entonces A1 A2; A1 A2; y A1 son frmulas de la signatura N. c) Toda frmula se obtiene solamente como resultado de la aplicacin un nmero finito de veces de los pasos a) y b). Note que chequear la veracidad de una frmula A Form(N) en un estado se reduce a probar que la relacin N, |= A se satisface. 2.6. Significado de las construcciones de programacin. Una vez definido el comportamiento algebraico de nuestro modelo de datos, definir la semntica denotacional de un lenguaje de programacin, radica en la construccin de las funciones (transformadores de estados) que dan significado a cada una de sus instrucciones. Para simplificar no tendremos en cuenta constructores de nuevos tipos. En esta seccin, nuestro propsito es construir una funcin (total) semntica Sem que para cualquier instruccin S del lenguaje retorne el transformador de estado asociado, el cual conserve las propiedades algebraicas para los enteros. Ms precisamente, se definir la funcin: Sem : Sts ST Donde Sts es el conjunto de instrucciones del lenguaje. Es decir, para cada S Sts se tiene que Sem(S) ST. La definicin de la semntica mediante este enfoque imprime un alto contenido constructivo, lo cual hace que sea preferida por muchos autores para la implementacin (por ejemplo, Reynolds[15]). Un estudio completo de la semntica denotacional de las estructuras de control de un Lenguaje de Programacin al estilo PASCAL (con slo un tipo) puede verse en [4]. En este trabajo slo se presenta, por razones didcticas, la semntica denotacional de un conjunto reducido de instrucciones. La sintaxis del conjunto de instrucciones del Lenguaje de Programacin objeto de estudio est dada por: S::= x:=e | xN:= eN | S1; S2 | <P(x,y); S0> | P(z,t) | if A then S1 else S2 Donde, x y e son trminos del gnero int; xN y eN son trminos del gnero Vector; S, S1, S2 son instrucciones; A es una frmula; <P(x,y); S0> denota la definicin del procedimiento P (no recursivo) con parmetros formales x (por referencia) e y (por valor); P(z,t) es el llamado al procedimiento P, donde z es una variable y t es una expresin. 2.6.1. Semntica denotacional de las instrucciones del Lenguaje de Programacin. La semntica denotacional de los lenguajes orientados a procedimientos ha sido abordada, en trabajos anteriores, desde diferentes puntos de vista (Ver [4], [5], [12], [15]). En esta seccin, para facilitar la comprensin del mtodo que se propone en este trabajo, mostramos la especificacin formal slo de algunas construcciones de programacin.

10

En cada definicin S, S1, S2 son instrucciones; A es una frmula; x una variable entera; xN es una variable vector; e es una expresin entera; eN representa un vector, ya sea una variable o una constante vector; d un valor entero; , direcciones de memoria. a) Secuencia de instrucciones. S S1; S2. Sem(S)() = Sem(S2)(sem(S1)()) b) Asignacin entera. S x := e. Para todo estado propio = < , , > - Sem(S)() = < , , { I+(e,) / (x) }> - Sem(S)() = Donde: { d / }() = d si = { d / }() = () si c) Asignacin de vectores. S xN := eN. Para todo estado propio = < , , > i. Si eN z y (existe N, tal que xN, z VNvectorN), entonces Sem(S)() = < , , { ((z)) / (xN) }> si xN y ((z)) Sem(S)() = en caso contrario ii. Si eN m* y (existe N, tal que xN VN y m* F,VectorN), entonces Sem(S)() = < , , { m( )/ (xN) }> Sem(S)() = iii. En cualquier otro caso, Sem(S)() = si N, |= A en caso contrario d) Alternativa simple. S if A then S1 else S2. - Sem(S)() = Sem(S1)() - Sem(S)() = Sem(S2)() si (xN) en caso contrario si I+ (e,) si I+ (e,) =

e) S P(z,t). Donde z es una variable y t una expresin. Sea <P(x,y);S0> la declaracin del procedimiento P (no recursivo); x es un parmetro formal por referencia e y por valor; x y z son del mismo gnero; y y t son trminos enteros. __ Sean adems los transformadores auxiliares S zx,,ty y S , tal que
S zx,,ty () = <, {(z)/x, /y}, { IN(t,)/(y)>
__

S () = <1(1()), 2(1()), >

Entonces la semntica denotacional del llamado S P(t,z) al procedimiento <P(x,y);S0> viene dada por: Sem(S) () = S ( Sem(S0)( S zx,,ty () ))
__

11

Conclusiones
Sin lugar a dudas, la principal ventaja de la semntica denotacional, con respecto a otros enfoques, es la rigurosidad. La definicin de los lenguajes de programacin, con este enfoque, tiene en cuenta tanto la estructura lgica, su almacenamiento en memoria y la propia sintaxis del programa. La metodologa denotacional para la especificacin de lenguajes de programacin, presentada en este trabajo, es una muestra elocuente de ello. En la misma, el proceso de interpretacin se establece a travs de la dependencia funcional entre los estados, los cuales caracterizan la ejecucin del programa en cada instante. Este proceso, por su alto carcter constructivo, permite instrumentaciones directas en los lenguajes ms ampliamente usados. Todos los conceptos tratados se definen exhaustivamente y con suficiente rigor. Se garantiza el carcter total de las funciones definidas. Esta ltima propiedad resulta de mucha utilidad para garantizar la terminacin de las implementaciones de los algoritmos definidos. La mayor contribucin, de este trabajo, es su valor metodolgico, por lo cual puede servir de gua a aquellos que se inicien en la difcil tarea de la especificacin formal de los lenguajes de programacin. Al igual que otras metodologas del enfoque denotacional, su mayor deficiencia radica en el nivel de detalles de especificacin, lo cual puede afectar la eficiencia de las implementaciones computacionales de los diferentes algoritmos de chequeo semntico. Sin embargo, los avances en las tecnologas de la programacin y el bajo costo para obtener hardware con muy altas prestaciones, hacen creer que el desarrollo de prototipos a partir de especificaciones formales, cada vez ms es una posibilidad prctica. Por otra parte, con el impacto de las tecnologas de informacin, quizs los puntos principales de atencin en la formalizacin de lenguajes y sistemas, estn relacionados con la modelacin basada en componentes[13][9], los sistemas multiagentes y sus lenguajes de comunicacin[8]. Referencias [1] Abadi, M.; Cardelle, L. and Burien, P.L. Formal Theoretical Computer Science 121(1993), pp. 9 -58. parametric polymorphism.

[2] Balczar, J. L. Programacin metdica. McGraw-Hill. 1994. [3] Crocker, D. Making Formal Methods popular through Automated Verification. In International Joint Conference on Automated Reasoning (Short Papers). Siena, Italy. June 2001. pp. 21-24. http://www.dii.unisi.it/~ijcar/Shortpapers/crocker.pdf [4] Daz, J. Semntica denotacional de procedimientos y funciones, con consideraciones sobre sus ambientes activos. Tesis de doctorado. Universidad de Oriente. Cuba. 1992. [5] Garcs, A. Una aproximacin matemtica a los tipos de datos. Revista Ciencias Matemticas, Vol. 16, No.2 (1998), pp. 153-168. [6] Garcs, A.; Matilla, M. Una metodologa de validacin exhaustiva basada en restricciones. Revista Ciencias Matemticas, Vol. 19, No. 1 (2001), pp. 80-88.
12

[7] Garcs, A.; Matilla, M. Verificacin de programas y especificaciones algebraicas. Proceedings of 2nd. International Conference on Automatic Control AUT 2002. Santiago de Cuba. 2002. ISBN 84-699-9025-X [8] Guerin, F. and Pitt, J. Denotational Semantic for Agent Communication Languages. In Proceedings of Fifth International Conference on Autonomous Agents AA2001. Montreal. ACM Press. Pp. 497 504. [9] Henderson, P. and Walters, B. Behavioral Analysis of Component-Based Systems. Information and Software Technology, Vol 43, 3 (2001), pp.161-169 [10] Hennesy, M. The semantics of programming Languages, John Wiley & Sons, New York. 1990. [11] Iriarte, M. Semntica denotacional de procedimientos, funciones y apuntadores. Tesis de doctorado. San Petersburgo. 1983. [12] Labra, J.; Cueva, J.; Luengo, M.; Cernuda, A. Y Joyanes, L. Comparacin de Tcnicas de Especificacin Semntica de Lenguajes de Programacin. In Proceedings of SISOFT 2001. Simposio Americano de Sistemas de Informacin e Ingeniera de Software en la Sociedad del Conocimiento. Santa F de Bogota. Agosto 2002. ACTAS ISBN 95897030-3-8. [13] Leavens, G. and Dhara, K. Concepts of behavioral Subtyping and Sketch of their Extension to Component-Based Systems. In Gary Leavens and Murali Sitarman (editors), Foundations of Component-Based Systems. Cambridge University Press (2000). Chapter 6, pp. 113-135. [14] Plotkin, G.D. A structural approach to operational semantics. Computer Science Dept., Aarthus Univesity, 1981. [15] Reynolds, J. A literate, executable, denotational semantics of simple C++ declarations. Department of Computer Science. Iowa State University. TR# 93-15. 1993. [16] Scott, D y Strachey, C. Towards a Mathematical Semantics for computer languages. In: Proceedings of the symposium on Computer and Automata (J.Fox ed.), Polytechnic Institute of Brooklyn, 1971. [17] Wirth, N. Type Extensions. ACM Transactions on Programming Languages and Systems. Vol 10, No.2 (April 1988), pp. 204 - 214.

13

Anda mungkin juga menyukai