Professional Documents
Culture Documents
Criterios Generales.
El propsito primordial de la sintaxis es prever una notacin para la comunicacin entre el programador y el procesador de
lenguajes de programacin.
Legibilidad: La estructura subyacente del algoritmo y los datos que el programa representa deben quedar en manifiesto al
inspeccionar el texto del programa. Se suele decir que un programa legible es autodocumentable, o sea, es entendible sin
documentacin independiente alguna. Es de gran ayuda que las grandes diferencias sintcticas subyacentes reflejen diferencias
semnticas. Esto aporta legibilidad.
Facilidad de Escritura: Especifica la facilidad con que un lenguaje puede usarse para crear programas para un dominio de
problema elegido. La mayora de las caractersticas del lenguaje que afectan la legibilidad tambin afectan la facilidad de
escritura. Las caractersticas del LP que afectan a la legibilidad afectan a la facilidad de escritura, debido a que son criterios
que se contraponen. Ms fcil de escribir y ms difcil de leer y viceversa. Las estructuras sintcticas concisas, claras y
regulares mejoran la facilidad de escritura.
Concisas: que no sean muy extensas a la hora de escribir.
Claras: si son entendibles, se escriben ms naturalmente.
Regulares: que no presenten variantes o excepciones dependiendo del contexto. Por ejemplo el IF de Java que
permite obviar las llaves en caso de que haya una sola sentencia dentro de la estructura (esto genera que la estructura
no sea regular).
Las conversiones sintcticas implcitas que permiten dejar sin especificar declaraciones y operaciones (es decir, hacer
declaraciones implcitas) hacen a los programas ms cortos y fciles de escribir pero dificultan su lectura. Ciertas
redundancias son tiles en la sintaxis de los lenguajes de programacin porque facilita la lectura del programa y tambin
permite revisar en busca de errores durante la traduccin. La desventaja es que la redundancia dificulta su escritura. Ejemplo:
declaracin implcita en Fortran, busca reducir la redundancia. Si pones la variable pepe y despus escribs pepo por
equivocacin, considera un nuevo nombre de variable. En cambio en Pascal se requiere una declaracin explcita de cada
variable, entonces ante el caso anterior caracteriza el nombre de variable mal escrito como un error.
Una sintaxis es redundante si comunica el mismo elemento de informacin en ms de una forma.
Ventaja: facilita la lectura del programa y permite buscar errores durante la traduccin. Ejemplo, Pascal (debo
declarar) int pepe; int pepo;
Desventaja: hay que escribir mas (--Facilidad_Escritura).
Facilidad de verificacin: esta estrechamente relacionada con la legibilidad y la facilidad de escritura. Entender cada
enunciado de un lenguaje es fcil, pero el proceso de crear programas correctos es difcil. Lo importante es darnos cuenta de
los errores de lgica (legibilidad). En cuanto a los errores sintcticos se ocupa el compilador. Los entornos de programacin
facilita la verificacin de errores. Por ejemplo, Java. Algunos editores tienen debuggers incorporados.
La facilidad de traduccin: se relaciona con las necesidades del traductor (Compilador del programa fuente o programa
objeto) que procesa el programa escrito. La clave para una traduccin fcil es la regularidad de la escritura. La regularidad del
LP ayuda la traduccin (hay menos excepciones que verificar). Un ejemplo, Lisp no es muy legible ni especialmente fcil de
escribir pero resulta muy fcil de traducir, a causa de sus pocas construcciones (regularidad). Por lo tanto, la traduccin de los
programas se dificulta conforme aumenta el numero de construcciones sintcticas. Otro ejemplo, Cobol es muy difcil su
traduccin a causa del gran numero de formas de enunciados y declaraciones que se permiten (y que sea tan cercano a un
lenguaje humano).
add 1 to A
move to A
A++ mas fcil de traducir.
compute A = A + 1
Si hay varias posibilidades de resolver algo, ayuda al programador pero el traductor va a tener que hacer ms pasos.
Carencia de ambigedad: la ambigedad se da al tener una construccin con 2 o ms interpretaciones posibles. El ejemplo
mas tpico es el IF anidado de Java. La carencia de ambigedad ayuda a la legibilidad y tambin a la facilidad de escritura y
simplifica el proceso de deteccin de errores debido a que las construcciones difieren a nivel sintctico unas de otras. Cuando
hay ambigedad se soluciona con el uso adecuado de delimitadores o de convenciones (el end del final cierra el primer begin
encontrado hacia arriba, no se como explicarlo bien).
Elementos.
Conjunto de caracteres: son los smbolos que estn permitidos dentro de la sintaxis. La eleccin de este conjunto es lo
primero que se hace al proyectar una sintaxis de lenguaje. Generalmente est constituido por:
letras maysculas y/o minsculas: algunos toman ambas y las distinguen y otros no (si lo hacen, se dice que son Case
Sensitive)
Dgitos: del 0 al 9.
Caracteres especiales: (+, -, *, /, etc.) ac es donde empiezan las grandes diferencias. Se eligen para formar los
operadores, delimitadores, Etc. del LP. La mayora toma un subconjunto de caracteres de algn alfabeto conocido
(ASCII o Unicode).
Delimitadores: elemento sintctico que se usa para sealar el principio o el final de alguna construccin. Algunos vienen en
pares (como las llaves) para indicar inicio o fin de alguna estructura y otros solos que marcan el fin de algo (como el ;). Las
razones por las cuales se usan delimitadores son:
Eliminar ambigedades en estructuras en apariencia semejantes a nivel sintaxis concreta.
Simplificar el proceso de traduccin.
Mejorar la comprensin y legibilidad.
Alterar el orden de evaluacin de los operadores modificando las reglas de precedencia y asociatividad.
Identificadores: Los identificadores mas aceptados son una cadena de letras y dgitos, que comienza con una letra. Las
variaciones en los lenguaje se debe principalmente a la inclusin de caracteres especiales (. o -) para mejorar la legibilidad y en
restricciones de longitud. Los identificadores de poca longitud, no son muy nemotcnicos y restringen la legibilidad del
programa. Ejemplo.
Fortran (6 caracteres).
Pascal no permite el mismo nombre a 2 funciones, aunque tengan distintos parmetros. El lenguaje determina la
vigencia de uno.
La sintaxis para identificadores es general para todos los lenguajes.
Restricciones de longitud: restringen la legibilidad.
Inclusin opcional de caracteres especiales: mejoran la legibilidad.
Smbolos de operadores: casi todos los lenguaje adoptan el + y el para representar las dos operaciones aritmticas bsicas o
alguna combinacin de ellos, en las dems no hay uniformidad. (por ejemplo .EQ. y ** de Fortran, para igualdad y
exponenciacin).
Palabras claves y reservadas: una palabra clave es un identificador que se usa como una parte fija de la sintaxis de un
enunciado. Por ejemplo IF, DO en Fortran. Una palabra clave es una palabra reservada (pero puede no serlo). En caso de no
serlo, se puede usar como un identificador elegido por el programador (las claves pueden usarse como identificador, eso quiere
decir). Casi todos los lenguajes emplean actualmente palabras reservadas, con lo cual se mejora la capacidad de deteccin de
errores de los traductores. El anlisis sintctico durante la traduccin se facilita usando palabras reservadas. Por ejemplo, en
Fortran DO o IF no son palabras reservadas, por lo que pueden no ser un enunciado de iteracin o condicional sino nombres de
variables. Una dificultad se presenta cuando se quiere introducir nuevas palabras reservadas en los enunciados al elaborar un
estndar actualizado. Las versiones antiguas llevaran ese identificar como variable, y ya no es sintcticamente correcto, no
obstante que no ha sido modificado. En Cobol, todas son palabras reservadas. Otra dificultad se presenta cuando se quiere
introducir nuevas palabras reservadas.
Palabras pregonadas: son palabras opcionales que se insertan en los enunciados para mejorar la legibilidad. Por ejemplo en
Cobol el GOTO (TO es opcional ya que no transmite informacin); otro ejemplo THEN y PERFORM en Cobol.
Comentarios: la inclusin de los comentarios en los programas es una parte importante de su documentacin. Al permite
documentacin, favorece el mantenimiento. Un lenguaje puede permitir comentarios de varias maneras:
Renglones de comentarios por separado en el programa. Ejemplo Fortran.
Delimitadores por marcadores especiales, como */ y */ de C sin que importen los limites del rengln.
Comenzando en cualquier punto de un rengln pero ya concluidos a final del mismo como el en Ada, // en C++ o !
en Fortran 90. esta opcin incluye a la primera.
La segunda alternativa tiene desventaja de que la falla de un delimitador de conclusin en un comentario transforma
los enunciados siguientes en comentarios.
Espacios en blanco: en algunos LP cumplen un rol sintctico importante dado que se usan como separadores o inclusive como
operadores y en otros, no tienen utilidad. Por ejemplo, en Snobol 4, la operacin primitiva de concatenacin se representa con
un espacio en blanco, el cual tambin se usa como separador entre elementos de un enunciado (ambiguo). En FORTRAN, no
son significativos.
Formato de campos libres y fijos: una sintaxis es de campo libre si los enunciados se pueden escribir en cualquier parte de un
rengln de entrada sin que importe la posicin sobre el rengln o las interrupciones entre renglones. Los campos libre permiten
mayor facilidad de escritura. Una sintaxis de campo fijo utiliza la posicin sobre un rengln de entrada para transmitir
informacin. Es decir que cada elemento debe aparecer dentro de una parte dada, de un rengln de entrada (comn en lenguaje
ensambladores). Los campos fijos brindan mayor facilidad de traduccin. Es ms comn el uso de un formato de campo fijo
parcial, por ejemplo:
Fortran: los 5 primeros caracteres de un rengln, estn reservadas para cada rotulo de enunciado.
Snobol 4: los rtulos de enunciados, comentarios y renglones de continuacin se distinguen por un carcter en la
primera posicin del rengln.
Actualmente, se utiliza mucho mas el campo libre que el fijo.
Expresiones: Son construcciones sintcticas compuestas de operadores y operandos, de cuya evaluacin se obtiene un valor.
En los Lenguajes Imperativos como C, las expresiones constituyen las operaciones bsicas que permiten que cada enunciado
modifique el estado de la maquina, hasta llegar a un estado final. En lenguajes aplicativos como ML o Lisp, las expresiones
forman el control bsico de secuencia que dirige la ejecucin de programas. Las expresiones son los bloques sintcticos
bsicos de construccin a partir de los cuales se construyen enunciados.
Enunciados: Son las sentencias que permiten realizar operaciones dentro de los LP imperativos. La sintaxis tiene un efecto
decisivo sobre la regularidad, legibilidad y facilidad de escritura. La mayora de los LP utilizan diferentes estructuras
sintcticas para representar cada tipo de enunciado. Su ventaja es que se puede hacer que cada estructura sintctica, exprese de
manera natural las operaciones que intervienen. Por ejemplo Cobol, en subestructuras participan palabras claves especiales,
palabras pregonadas, construcciones alternativas, elementos optativos, Etc. Esto aporta legibilidad. (Otros utilizan un formato
nico: el cual hace nfasis en la regularidad. Por ejemplo el Snobol4, cuya sintaxis bsica es el enunciado de sustitucin por
concordancia de patrones.)
Sintaxis Abstracta y Concreta.
Algunas construcciones del lenguaje en diferentes lenguajes de programacin tienen la misma estructura conceptual pero
difieren en su apariencia a nivel lxico. Por ejemplo, un fragmento en:
En C:
While (X = Y){
Sintaxis abstracta: la que representa la estructura que subyace bajo las construcciones. En este caso, es una iteracin
controlada por condicin.
Sintaxis concreta: la manera en que se escribe en cada lenguaje. En este caso una iteracin controlada por condicin
en C y Pascal.
(Aunque conceptualmente la sintaxis concreta puede ser irrelevante, pragmticamente 1 puede afectar la utilidad de un lenguaje
y la legibilidad de los programas. Por ejemplo, el smbolo ''distinto'' es intuitivamente mas legible que !=. No es lo mismo
usar un espacio en blanco para denotar una suma, que el operando +.)
Mtodos formales para describir la sintaxis de los LP: gramticas libres de contexto, BNF y EBNF, diagramas
sintcticos y rboles de anlisis sintctico. Beneficios y restricciones.
Para describir la sintaxis de los LP existen mtodos formales como gramticas libres de contexto, BNF y EBNF, diagramas
sintcticos y rboles de anlisis sintctico. La mayora de las descripciones de los LP son informales . Estn expresadas en
forma narrativa en lugar de usar una notacin rigurosa. Las descripciones informales tienen una serie de desventajas:
Pueden resultar imprecisas, vagas y ambiguas para expresar claramente los detalles de sintaxis de un LP.
Para alcanzar exactitud, se introduce demasiada palabrera y se obtienen descripciones largas, poco prcticas y
tediosas a la hora de consultarlas. Esto se da al carecer de un alto grado de poder expresivo.
Por ser imprecisas, pueden dar lugar a varias interpretaciones y, por ende, a varias implementaciones diferentes.
Las notaciones formales que definen la sintaxis de un LP son un conjunto de reglas (producciones) que especifican la serie de
caracteres (elementos lxicos) que forman palabras y construcciones permisibles dentro de determinado LP usando una
notacin estricta. Las ventajas que traen aparejadas el uso de este tipo de notaciones:
Referencia para usuarios: brindan un documento con informacin fiable, concisa y no ambigua.
Referencia para implementadores: como se mencion anteriormente, distintas interpretaciones dan lugar a distintas
implementaciones. Son mucho ms tiles para estandarizar debido a que carecen de ambigedad.
Herramienta para prueba de programas: testean y verifican los programas. Dichas herramientas requieren que los
constructores del LP estn formalizados rigurosamente. Deben provocar una respuesta predecible.
Prueba de implementaciones: para analizar la correctitud de un programa, los requerimientos del sistema tienen que
haber sido definidos rigurosamente.
Herramienta para implementaciones automticas: estas herramientas permiten automatizar parte de la
construccin de los traductores. Para esto, necesitan una documentacin formal a donde recurrir y no debe ser
ambigua sino surgen varias implementaciones.
Diseo de un LP: en una notacin formal, se permite visualizar ms claramente si el LDP fue bien diseado o no,
viendo los aspectos tales como simplicidad, poder expresivo, etc.
No esta en filmina. Sintaxis pragmtica: el uso prctico que se le da. Ej., definir una variable al principio del programa o al principio de un bloque
(cambia el alcance de la misma)
4
Al tratar formalmente las estructuras provistas por un LP nos permite detectar ms naturalmente irregularidades que,
inclusive pueden llegar a no ser evidentes en una especificacin informal. Adems nos permite detectar semejanzas en
estructuras aparentemente muy distintas y diferencias en estructuras aparentemente similares de una manera ms sencilla.
Una notacin informal est escrita en un lenguaje conocido y una formal en uno que debemos aprender a usar por lo que
se suma la complejidad de aprender a utilizar y comprender el LP (la complejidad de aprender, comprender y utilizar la
notacin formal). Adems los smbolos utilizados para describir al lenguaje usado en la notacin formal pueden
confundirse debido a la similitud de los mismos. Existen algunas facilidades que todava no han sido modeladas por
ningn mtodo de especificacin formal. Por ejemplo la concurrencia, excepciones, Etc.
Gramticas libres de contexto.
Una gramtica libre de contexto es una gramtica formal, en la que cada regla de produccin es de la forma: V w , donde V
es un smbolo no terminal y w es una cadena de terminales y/o no terminales 2. El trmino libre de contexto se refiere al hecho
de que el no terminal V puede siempre ser sustituido por w sin tener en cuenta el contexto en el que ocurra. Un lenguaje formal
es libre de contexto si hay una gramtica libre de contexto que lo genera. Las GLC definen un conjunto de reglas que definen
todas las construcciones validas que puede aceptar un lenguaje.
G = (Vt, Vn, P, S) donde:
Vt es un conjunto finito de terminales
Vn es un conjunto finito de no terminales
P es un conjunto finito de producciones
S (perteneciente a Vn) el denominado Smbolo Inicial
los elementos de P son de la forma Vn (Vt U Vn)
Ejemplo:
La gramtica BNF, se puede usar para hacer un trabajo sorprendentemente bueno al definir la sintaxis de casi todos los
lenguajes de programacin. Las reas de sintaxis que no pueden definirse con una gramtica BNF son aquellos que implican
dependencia contextual. Por ejemplo, las restricciones el mismo identificador no puede declararse 2 veces en el mismo
bloque, todo identificador se debe declarar en algn bloque que encierre el punto de su uso, y un arreglo para el que se ha
declarado que tiene 2 dimensiones no puede ser referido con 3 subndices son todas no explicables usando solo una gramtica
BNF.
SIN EMBARGO, la gramtica BNF no constituye una notacin ideal para comunicar las reglas de sintaxis de lenguajes de
programacin al programador, debido a su sencillez. Esto obliga a una representacin bastante poco natural de las
construcciones sintcticas comunes de elementos optativos, elementos alternativos y elementos repetidos. Debido a esto, han
surgido extensiones de la BNF, que dan cabida a descripciones ms fciles de los lenguajes, reducen el tamao e incrementar la
claridad de las especificaciones, el metalenguaje puede enriquecerse con algunos recursos adicionales. Por ejemplo, una de las
extensiones ms tiles es usar corchetes para indicar secuencias opcionales, el uso de llaves para indicar iteracin y el uso de
reglas alternativas.
Alternativas de una regla. En vez de dar varias reglas BNF con la parte izquierda idntica, se da una sola regla BNF
con varias alternativas, usando un pipe. Por ejemplo:
<entero> <digito> | <entero> <digito>
<digito> 0|1|2|3|4|5|6|7|8|9
Llaves. Se indica que lo que encierran {xxx} se puede repetir 0 o un numero arbitrario de veces. Por ejemplo.
<listaparametro> <parmetro> | <listaparametro> <parmetro>
quedara
<lista parmetro> <parmetro> { <parmetro> }
Corchetes. Son un paso particular de las llaves. Es decir, que encierran una cosa que es opcional, puede estar presente
(una vez) o no. Ejemplo.
<sentencia-if> if <EB> then <sentencia> [else <sentencia>]
Esto es lo que se conoce como EBNF o BNF extendido.
Remarquemos que ninguno de estos mecanismos aumenta el poder expresivo de las BNF; slo permiten obtener
especificaciones ms reducidas y claras. El peligro que encierran estas extensiones es que los smbolos del metalenguaje se
confundan con los del lenguaje sujeto.
EBNF. Tiene una notacin idntica al BNF y adems agrega otros metasmbolos:
+: indica que debe ocurrir al menos una iteracin (1 a varias)
*: indica iteracin pero se puede dar el caso de que no exista ninguna (0 a varias)
[ y ]: para indicar secuencias opcionales. Pueden o no formar parte de la construccin.
{ y }: indican iteracin. Deben estar definidas con un + o un *.
Ninguno de estos mecanismos agrega o aumenta el poder expresivo de las BNF, solo permite producciones ms claras y
reducidas. Como desventaja, se puede marcar que los metasmbolos agregados se pueden confundir con los del LDP definido
(o lenguaje sujeto).
Derivacin.
Es una aplicacin repetida de reglas, que comienza por el smbolo inicial y termina con una sentencia. Cada cadena de
smbolos en la derivacin es una forma sentencial. Un sentencia es una forma sentencial que tiene solo smbolos terminales.
Una derivacin izquierda es aquella en la que se expande el no terminal que esta mas a la izquierda en cada forma sentencial.
Una derivacin derecha es aquella en la que se expande el no terminal que esta mas a la derecha en cada forma sentencial.
rbol de anlisis sintctico.
Permiten la representacin grfica de las derivaciones de una gramtica. (Se utilizan en la construccin de traductores). Para
determinar si una cadena dada representa de hecho un programa sintcticamente valido en el lenguaje definido por una
gramtica BNF, se deben usar las reglas gramaticales para construir un rbol de Anlisis Sintctico, de la cadena. Si la cadena
se puede analizar sistemticamente en forma satisfactoria, entonces est en el lenguaje, sino se puede encontrar una forma de
analizar la cadena, esta no se encuentra en el lenguaje. Podemos decir, que un rbol sintctico es una representacin grfica del
proceso de reconocimiento o parsing de una sentencia.
En los rboles de derivacin:
El axioma representa la raz del rbol.
Los nodos hojas son smbolos terminales de la gramtica.
Los nodos intermedios son smbolos no terminales de la gramtica.
Y se colocan tantas ramas como smbolos (terminales y no terminales) haya concatenados en la parte derecha de la
regla. Estos van ordenados de izquierda a derecha, en el mismo orden que aparecen en la regla.
Solo se pueden definir rboles de derivacin para gramticas de tipo1 o mas restrictivas.
Una cadena asociada a ms de una rbol de derivacin se dice ambigua y la regla que permite construirla se llama tambin
ambigua. En ocasiones la ambigedad no afecta la semntica y puede tolerarse. En otros casos la ambigedad debe quedar
eliminada. Por ejemplo, una expresin podra definirse sintcticamente como:
<Expr> ::= x | y | z | <Expr> + <Expr> | <Exp> * <Exp> | (<Exp>)
Entonces una expresin como: x + y * z tendra dos derivaciones posibles, es decir existen dos rboles sintcticos que la
representan (ergo, es ambigua). Y debe quedar eliminada porque produce derivaciones que no son semnticamente
equivalentes. Si usamos el rbol de derivacin para indicar los niveles de precedencia de los operadores, no podemos tener
ambigedad.
7
Debido a los problemas de describir la semntica esttica con BNF, se inventaron una variedad de mecanismos para
esa tarea.
La Gramtica de Atributos, fue diseada por Knuth en 1968, para describir la sintaxis y la semntica de los
programas.
Una gramtica de atributos en una notacin ms poderosa que BNF porque permite formalizar aspectos sensibles al
contexto.
Bsicamente una gramtica de atributos es una GLC a la que se le han agregado tres elementos:
Atributos: Describen propiedades semnticas de las estructuras.
Reglas: Expresan la relacin entre los atributos ligados a la parte izquierda y derecha de una descripcin.
(Expresan las relaciones entre los atributos ligados a ambas partes de las reglas de produccin).
Condiciones: Permiten especificar los aspectos sensibles al contexto de un lenguaje de programacin.
Algunas caractersticas:
Cada smbolo No Terminal de una gramtica libre de contexto puede ser asociado a un conjunto finito de atributos.
Cada atributo puede ser referenciado a travs de un nombre y tiene asociado un dominio de valores. (Un atributo
puede estar vinculado a varios smbolos No Terminales.)
Cada aparicin de un atributo puede estar ligada a una condicin lgica que exprese una restriccin (sobre las
estructuras o constructores) que debe ser satisfecha por el valor de ese atributo. Estas condiciones expresan
restricciones sobre los constructores definidos por los smbolos No Terminales.
Semntica dinmica: operacional, axiomtica y denotacional.
Semntica dinmica:
El anlisis requeridos para verificar las especificaciones definidas se hacen en tiempo de ejecucin (algunas no se
pueden hacer en compilacin y otras no conviene).
Es decir, determina y describe el significado de las expresiones, sentencias y unidades de programas en tiempo de
ejecucin.
No existe una nica notacin universal para la semntica dinmica debido a que cada una est orientada a apoyar a las
distintas personas intervinientes en el desarrollo y uso de un LP.
Las definiciones formales son tiles debido a que orientan y dan a conocer que hace cada construccin en un LP
(lectura de manuales). Se sigue buscando una notacin universal para todos los intervinientes en un LP.
Hay varias razones diferentes por las que uno podra estar interesado por la descripcin de semntica. Primero, los
programadores necesitan saber precisamente que definiciones de un lenguajes hay. Generalmente, ellos se enteran leyendo las
explicaciones en ingles en los manuales del lenguaje, que suelen ser imprecisos e incompletos. Los escritores de compiladores
tambin determinan la semntica de los lenguajes para los cuales ellos escriben los compiladores desde descripciones en
ingles. Estas descripciones informales son usadas debido a la complejidad de las descripciones de la semntica formal. No
existe ninguna notacin universalmente aceptada para describir semntica dinmica. Es un objetivo de la investigacin
encontrar un formalismo de la semntica que pueda ser usado por los programadores u escritores de compiladores.
Se han realizado trabajos experimentales en la generacin automtica de compiladores desde las descripciones semnticas del
lenguaje.
Las semnticas dinmicas son: operacional, axiomtica, y denotacional.
Semntica Operacional:
La idea de la semntica operacional es describir el significado de un programa, ejecutando sus sentencias sobre una maquina
ya sea real o simulada. Los cambios que ocurren en el estado de la maquina cuando se ejecuta una sentencia dada, definen el
significado de la sentencia. Es un mecanismo que da una salida con un programa y unos datos de entrada arbitrarios.
(Est orientada al implementador, le sirve para plantear optimizaciones.)
Acta como un intrprete de un LP. (Debe hacerlo lo ms eficientemente posible. Baja las construcciones de alto nivel
a un nivel ms cercano al lenguaje mquina y se analiza su comportamiento.)
Una definicin semntica operacional actuara como una especie de intrprete de un lenguaje.
Describir la semntica operacional de las sentencias de un lenguaje de alto nivel requiere la construccin de una computadora
virtual o real. El hardware de una computadora es un interprete puro para su lenguaje maquina. Un intrprete puro para
cualquier lenguaje de programacin puede ser construido en software, que seria la computadora virtual para el lenguaje. La
semntica para un lenguaje de alto nivel puede describirse usando el intrprete puro para el lenguaje. Sin embargo existen dos
problemas: primero, la complejidad e naturaleza del hardware de la computadora y el sistema operativo que fueron usados para
correr el intrprete puro podran hacer a las acciones difciles de entender. Segundo, una definicin de semntica hecha de esta
forma podra solo estar disponible en una maquina idnticamente configurada.
10
Estos problemas pueden ser evitados reemplazando la computadora real con una computadora virtual de bajo nivel,
implementada con una simulacin software. Los registros, la memoria, informacin de estado y procesos en ejecucin serian
todos simulados. El set de instrucciones podra disearse para que la semntica de cada instruccin sea fcil de describir y
comprender. De esta manera, la maquina seria idealizada y as, altamente simplificada, haciendo sus cambios de estado fciles
de entender.
Usar el mtodo operacional para describir completamente la semntica de un lenguaje de programacin L, requiere la
construccin de dos componentes. Primero, un traductor es necesario para convertir sentencias de L al lenguaje de bajo nivel
elegido. El otro componente es la maquina virtual para este lenguaje de bajo nivel. El estado cambia a causa de la ejecucin del
cdigo que resulta de traducir una sentencia dada en un lenguaje de alto nivel definiendo el significado de esa sentencia.
(Existen muchos mtodos que encuadran dentro de la semntica operacional.
Semntica Operacional con un Autmata Concreto.
El autmata es una computadora capaz de ejecutar programas escritos en una notacin similar a los lenguajes de
programacin.
Maquina virtual.
Semntica Operacional Abstracta.
Reemplaza los conceptos computacionales con nociones matemticas y eliminar los constructores imperativos.)
Por ejemplo, la semntica de la sentencia for de C.
Alto nivel.
for (expr1; expr2; expr3) {
.
}
Bajo nivel -> semntica operacional.
expr1;
loop: if expr2 = 0 goto out
.
expr3;
goto loop
out:
Como conclusin, la semntica operacional, fue creada por varias razones:
El primer y ms significativo uso de semntica operacional formal fue para describir la semntica de PL/I.
La maquina abstracta particular y las reglas de traduccin para PL/I fueron llamadas Lenguajes de Definicin Viena
(VOL) el cual amplia el rbol de anlisis sintctico para incluir tambin el interprete de maquina.
VOL es tan complejo que sirve para propsitos no prcticos.
La semntica operacional depende de algoritmos, no de matemtica.
Semntica Axiomtica:
Describe las acciones de un programa mediante predicados o expresiones lgicas que especifican restricciones sobre
las variables del programas antes y despus de su ejecucin.
(Basada en el calculo de predicados. No se basa en el modelo de estado de mquina. Las expresiones lgicas se
denominan predicados o asertos).
La semntica axiomtica es una herramienta poderosa para las correcciones de programas.
En una prueba, cada sentencia de un programa es tanto precedida como seguida por una expresin lgica que
especifica restricciones a las variables de programa.
(Usa reglas de inferencia para determinar el impacto de ejecucin de la estructura, estableciendo una pre y
post-condicin para cada sentencia o grupo de sentencias.
Est orientada al programador porque funciona como una prueba de escritorio, dado que se analiza si hace lo que uno
espera.
El significado de una sentencia o grupo de sentencias (S) se analiza en trminos de:
La condicin P o pre-condicin: que se supone verdadera antes de que se ejecute S.
La condicin Q o post-condicin: que puede deducirse verdadera despus de que S se ejecute.
Esto se escribe como {P} S {Q}.
Por ejemplo: x= a +1;
Con una pre-condicin:
Se usa para analizar el comportamiento de las estructuras.
11
La semntica axiomtica fue definida en conjuncin con el desarrollo de un mtodo para proveer la correccin de programas.
En una prueba, cada sentencia de un programa es tanto precedida como seguida por una expresin lgica que especifica
restricciones a las variables de programa. Estas, adems, de ser el estado completo de una maquina abstracta (como la
semntica operacional), son usadas para especificar el significado de la sentencia. La notacin usada para describir
restricciones, en realidad el lenguaje de la semntica axiomtica es el Clculo de Predicado. Aunque, las expresiones booleanas
simples son frecuentemente adecuadas para expresar restricciones, en algunos casos no lo son:
Como conclusin podemos decir que para definir la semntica de un lenguaje de programacin completo usando el mtodo
axiomtico, deben ser definidos un axioma o una regla de inferencia por cada tipo de sentencia en el lenguaje. La semntica
axiomtica es una herramienta poderosa para las correcciones de programas, y provee un excelente marco de trabajo durante su
construccin y su uso posterior. Es til, tanto para los usuarios de los lenguajes como para quienes escriben compiladores. Sin
embargo, es ampliamente limitado.
La especificacin axiomtica de un lenguaje de un sistema en el cual pueden expresarse sentencias interesantes sobre los
programas y probarlas o refutarlas. Las sentencias de inters son expresiones formales llamadas formulas. Pueden ser verdades
o falsas. Una formula verdadera se llama teorema. La intencin de definir que formulas son teoremas.
Una teora formal est formada por:
Reglas Sintcticas.
Axiomas.
Reglas de inferencia.
Semntica Denotacional:
Est orientada al diseador del LP. La entrada a la misma es un programa y la salida es un objeto matemtico
(nmeros y funciones).
Es independiente de la implementacin. La intencin es que las estructuras se plasmen como las ide el diseador. Es
una semntica del tipo declarativa.
Define el comportamiento de un LP aplicando funciones matemticas a programas o a construcciones (estructuras) del
lenguaje, para representar su significado. Para cada entidad se define un objeto matemtico y una funcin que mapea
las instancias de dicha entidad. Cada objeto matemtico ''denota'' el significado de su correspondiente entidad
sintctica. A travs del objeto matemtico se describe la dependencia funcional entre el resultado de la ejecucin de un
programa y sus datos iniciales.
12
La Semntica D. de un programa puede ser definida en trminos de cambios de estado de una computadora virtual.
(Concepto parecido a la semntica operacional. Ambas semnticas se basan para la especificacin de los significados
en los valores de las variables. Diferencias: Cdigo Vs. Funciones).
La semntica Denotacional es el mtodo conocido ampliamente ms riguroso para describir el significado de los programas.
Esta slidamente basado en la teora de la funcin recursiva. El concepto fundamental de la semntica Denotacional es definir
para cada entidad del lenguaje un objeto matemtico y una funcin que mapee instancias de esa entidad dentro de instancias
del objeto matemtico. Debido a que los objetos estn rigurosamente definidos, ellos representan el significado exacto de sus
correspondientes entidades. La idea esta basada en el hecho que hay rigurosas formas de manipular objetos matemticos pero
no para construcciones del lenguaje de programacin. La dificultad con este mtodo esta en crear los objetos y las funciones de
mapeo. El mtodo es llamado Denotacional porque los objetos matemticos denotan el significado de sus correspondientes
entidades sintcticas.
Una especializacin semntica Denotacional puede pensarse como una variante de la semntica translacional. (ESTO
TECNICAMENTE NO VA) En ella, la semntica de un lenguaje de programacin queda expresada como un esquema de
traslacin que asocia un significado a cada programa. La descripcin Denotacional est dada por un conjunto de funciones de
significado M asociadas con los constructores de la gramtica.
Cada funcin tiene la forma: MT : T DT, donde:
T es un constructor del lenguaje.
DT es una denotacin para T.
Tales funciones tendrn nombres de la forma M subindicada por el nombre del constructor.
La mayora de las funciones M son funciones de alto orden.
Producen funciones como resultado y para distinguirlas se usan corchetes para encerrar los argumentos.
================
POR LAS DUDAS
Semntica Translacional: la idea es expresar el significado de un lenguaje a travs de un esquema de translacin con el cual sea
posible, dado un programa cualquier escrito es ese lenguaje, producir un programa equivalente en un lenguaje mas simple. La
gramticas de atributos puede ser utilizados para describir semnticamente un algoritmo. La tcnica consiste en construir un
mapeo desde el lenguaje a definir hacia otro lenguaje objeto. Este mapeo constituye una especializacin semntica completa si
el lenguaje objeto esta a su vez definido. La idea de la definicin es asociar a cada constructor a un atributo (cdigo) a cada
programa, cuyo valor va a ser una secuencia de instrucciones. El valor de este atributo, para una construccin dada, representa
su traduccin al lenguaje objeto. El valor del cdigo asociado al constructor inicial es la traduccin completa. La semntica
translacional acta como el compilador de un lenguaje.
13
14