Está en la página 1de 4

Semntica Esttica

Como un ejemplo de una regla de sintaxis que no se puede especificar en BNF, tenga en
cuenta la regla comn de que todas las variables deben ser declaradas antes de poder
hacer referencia a ella. Se ha demostrado que esta regla no se puede especificar en BNF.
stos problemas ejemplifican las categor!as de reglas de lenguaje llamadas reglas de
sem"ntica est"tica. #a sem"ntica est"tica de un lenguaje esta relacionada solo de manera
indirecta con el significado de los programas durante la ejecuci$n, m"s bien tiene que
ver con la forma correcta de escribir programas %sintaxis m"s que sem"ntica&. 'uchas
reglas de sem"ntica est"tica de un lenguaje establecen sus restricciones de tipo. Se
denomina sem"ntica est"tica porque el an"lisis necesario para verificar dichas
especificaciones se puede hacer en tiempo de
Compilaci$n.
Semntica Operacional
#a sem"ntica operacional describe el significado de una sentencia o de un programa
completo, especificando los efectos de correrlo en una maquina. #os efectos sobre la
maquina son vistos como la secuencia de cambios en su estado, donde el estado de la
maquina es el conjunto de los valores en su memoria.
(na descripci$n obvia de sem"ntica operacional, entonces, esta dada por la ejecuci$n de
una versi$n compilada del programa en una computadora. #a ma)or!a de los
programadores, en al menos en una ocasi$n, escribi$ un peque*o programa de prueba
para determinar el significado de una construcci$n de un lenguaje de programaci$n, a
menudo mientras lo est"n aprendiendo. n esencia, lo que tal programador esta
haciendo es usar sem"ntica operacional para determinar el significado de la
construcci$n. Sin embargo ha) varios problemas con el uso de este enfoque para una
completa descripci$n formal de la sem"ntica. +or lo tanto, los lenguajes maquina )
ordenadores reales no se utili,an para la sem"ntica operacional. '"s bien, se utili,an
lenguajes de nivel intermedio e interpretes para computadoras ideali,adas dise*ados
espec!ficamente para el proceso.
-a) diferentes niveles de uso de la sem"ntica operacional. n el mas alto nivel, el
inter.s esta en el resultado final de la ejecuci$n de un programa completo. / veces es
denominada semntica operacional natural. n un nivel inferior, la sem"ntica
operacional se puede utili,ar para determinar el significado exacto de un programa a
trav.s de un examen de la secuencia completa de los cambios de estado que ocurren
cuando se ejecuta el programa. ste uso es a veces llamado semntica operacional
estructurada.
El proceso bsico
l primer paso en la creaci$n de una descripci$n de la sem"ntica operacional de un
lenguaje es dise*ar un lenguaje intermedio apropiado, donde la caracter!stica principal
del lenguaje es la claridad. Cada construcci$n del lenguaje intermedio debe tener un
significado obvio e inequ!voco. Si la descripci$n de la sem"ntica se va a utili,ar para
una sem"ntica operacional natural, se debe construir una maquina virtual %un interprete&
para el lenguaje intermedio. #a maquina virtual se puede utili,ar para ejecutar
cualquiera de las declaraciones individuales, segmentos de c$digo, o programas enteros.
#a descripci$n de la sem"ntica se puede utili,ar sin una maquina virtual si todo lo que
se requiere es el significado de una sentencia simple. n este caso estamos utili,ando
sem"ntica operacional estructurada ) el c$digo intermedio puede inspeccionarse
visualmente.
#a sem"ntica de la sentencia for en C puede ser descripta en t.rminos de estados
simples, como sigue0
l lector humano de esta descripci$n es el ordenador virtual ) se supone que es capa, de
1ejecutar1 las instrucciones de la definici$n de manera correcta ) de reconocer los
efectos de la 1ejecuci$n1. l lenguaje intermedio ) su maquina virtual asociada utili,ada
para descripciones formales sem"ntica operacional suelen ser mu) abstractas. l
lenguaje intermedio esta dise*ado de manera tal que sea conveniente para la maquina
virtual, en lugar que para los lectores humanos. +ara nuestros prop$sitos, sin embargo,
un lenguaje intermedio orientado m"s al lector humano puede ser utili,ado.
Semntica Denotacional
Semntica denotativa es el mtodo formal ms riguroso y conocido para describir el
significado de los programas.
El mtodo se denomina denotacional porque los objetos matemticos denotan el
significado de sus entidades sintcticas correspondientes.
Las funciones de mapeo, al igual que todas las funciones matemticas, tienen un
dominio e imagen. En la semntica denotacional, el dominio se denomina dominio
sintctico, porque lo que se mapea son las estructuras sintcticas. El rango se
denomina dominio semntico.
La semntica denotacional esta relacionada con la semntica operacional. En la
semntica operacional las construcciones del lenguaje de programacin se traducen
en construcciones de un lenguaje de programacin ms simple, que se convierten en
la base del sentido de la construccin. En la semntica denotacional, las
construcciones del lenguaje de programacin son asignadas a los objetos
matemticos, conjuntos o ms a menudo funciones. Sin embargo, a diferencia de la
semntica operacional, la semntica denotacional no modela el proceso
computacional paso a paso de los programas.
Ejemplos sencillos
Para introducir el mtodo denotacional utiliaremos un lenguaje muy simple,
representaciones de n!meros binarios en cadena de caracteres. La sinta"is de estos
n!meros binarios puede ser descripta por las producciones de la siguiente gramtica#
$bin%num& '(' ) '*' ( * )
) $bin%num& '('
) $bin%num& '*'
+n rbol de anlisis sintctico para el n!mero binario **(, es el siguiente#
,otar que ponemos apostrofes alrededor de los d-gitos sintcticos para denotar que no
son d-gitos matemticos.
Esto es similar a la relacin entre d-gitos .S/00 codificados y los d-gitos matemticos.
/uando un programa lee un n!mero como una cadena, se debe convertirlo a un
n!mero matemtico antes de que pueda ser utiliado como un valor en el programa.
El dominio sintctico de la funcin de mapeo de los n!meros binarios es el conjunto de
todas las representaciones de cadena de caracteres de n!meros binarios. El dominio
semntico es el conjunto de n!meros decimales no negativos, simboliado por ,.
Para describir el significado de los n!meros binarios usando la semntica
denotacional, asociamos el significado actual 1un numero decimal2 con cada regla que
tiene un solo s-mbolo terminal en sus 34S.
En nuestro ejemplo, los n!meros decimales deben estar asociados con las dos
primeras reglas de la gramtica ( * ). Las otras dos reglas gramaticales son, en cierto
sentido, reglas computacionales, ya que combinan un s-mbolo terminal, a la que un
objeto puede ser asociado, con un no terminal, que se puede esperar represente
alguna construccin.
Suponiendo una evaluacin que se desarrolle de abajo 5acia arriba en el rbol de
anlisis sintctico, el no terminal en el lado derec5o ya tendr-a su significado asociado.
.s-, una regla de sinta"is con un no terminal como sus 34S requerir-a de una funcin
que calcule el significado del L4S, que representa el significado de la completo del
34S.
La funcin semntica, llamada 6bin, mapea los objetos sintcticos, como se describen
en las reglas de la gramtica anterior, a los objetos de ,, el conjunto de n!meros
decimales no negativos. La funcin 6bin se define como sigue#
6bin1'('2 7 (
6bin1'*'2 7 *
6bin1$bin%num& '('2 7 8 9 6bin1$bin%num&2
6bin1$bin%num& '*'2 7 8 9 6bin1$bin%num&2 : *
Los significados indicados, o los objetos 1que en este caso es un n!mero decimal2, se
pueden unir a los nodos del rbol de anlisis sintctico produciendo el siguiente rbol#
Esto es una semntica dirigida por la sinta"is. Entidades sintcticas se asignan a los
objetos matemticos con un significado concreto.
El estado de un programa
La semntica denotacional de un programa puede ser definida en trminos de cambios
de estado en una maquina ideal. La semntica operacional se define de esta manera y
de manera similar lo 5ace la semntica denotacional. Simplificando ms aun, sin
embargo, la semntica denotacional se define solo en trminos de los valores de todas
las variables del programa. Por lo tanto, la semntica denotacional utilia el estado del
programa para describir significado, mientras que la semntica operacional utilia el
estado de una maquina;;;. La diferencia clave entre semntica operacional y la
semntica denotacional es que los cambios de estado en la semntica operacional son
definidos por los algoritmos codificados, escritos en alg!n lenguaje de programacin,
mientras que en semntica denotacional, los cambios de estado estn definidos por
funciones matemticas.
Supongamos que el estado de un programa se representa como un conjunto de pares
ordenados, de la siguiente manera#
s 7 <$i*, v*&, $i8, v8&, . . . , $in, vn&=
/ada i es el nombre de una variable, y las v asociadas son los valores actuales de
esas variables. /ualquiera de las v puede tener el valor especial undef, que indica que
su variable asociada es actualmente indefinida. Supongamos que >.36.P ser una
funcin de dos parmetros# el primero el nombre de la variable y el segundo el estado
del programa. El valor de >.36.P 1ij, s2 es vj 1el valor emparejado con ij en el estado
s2. La mayor-a de las funciones
Semnticas de mapeo para programas y construcciones de programas mapea estados
a los estados. Estos cambios de estado se utilian para definir los significados de los
programas y de construcciones de programas. .lgunas construcciones de lenguajes?
por ejemplo, las e"presiones?se asignan a valores, no estados.
Ver hoja 9 y consultar que determina el VARMAP la sentencia de asi!naci"n no
se entiende