Unidad II Sintaxis y Semántica de los LP Introducción Un lenguaje de programación es una notación formal que permite especificar un modelo de resolución de un programa. Como en todo lenguaje, para describir un lenguaje de programación hay que considerar tres aspectos: Sintaxis: La forma o estructura de las expresiones, las sentencias y unidades de programas. Semntica: !l significado de las expresiones, las sentencias y las unidades de programas. "ragmtica: !l uso practico. !s la función que ocupa en la prctica. !l aspecto sintctico influye fuertemente en la facilidad con que los programas pueden ser escritos y en su legibilidad posterior. La semntica de un lenguaje es la que determina que problemas se pueden resol#er. $efine el dominio de aplicación. $!%. $!%. &'(&$&: "Un LP es un sistema notacional que se usa para describir computaciones en una forma legible tanto para la máquina como para el humano, y que está conformado por un conunto de s!mbolos y reglas sintácticas que especifican la #$%&' o (S)%U*)U%' de las expresiones, sentencias y unidades de programa+ y semánticas que especifican el SI-I#I*'.$ de las expresiones, sentencias y unidades d e programa+"/
*oncepto de Sintaxis/ !s un con conjun junto to de reglas reglas que especi especific fican an la forma forma de los progra programas mas #lidos #lidos en el lengua lenguaje je )enunc )enunciado iados, s, senten sentencia cias, s, declaraciones y todas las construcciones permitidas por el L"*. +ambin se puede decir que son el conjunto de reglas que especifican si una sentencia est bien formada o no. La sintaxis de un lenguaje est definida por: 'eglas Lxicas: !specifican el conjunto de caracteres )como por !j., operadores - / 0* que constituyen el alfabeto del lenguaje y la forma en que estos se combinan para formar palabras #alidas. "or ejemplos: "ascal considera que son iguales los caracteres en may1sculas y min1sculas. C, &da y 2a#a los consideran distintos )son Case Sensiti#e*. !n "ascal, 34 es un operador #alido. !n C no )es 56*. !n &da, 76. 'eglas 'eglas Sintcticas: Sintcticas: !specifican !specifican construcciones construcciones mas complejas complejas a partir de la combinación combinación de elementos elementos lxicos lxicos )!jemplo, x6x-8* &mbas reglas contribuyen a lo que es la apariencia externa del L$" e influyen en los criterios generales de sintaxis. •
•
TERMINOLOGÍA Lenguaje: conjunto de cadenas de caracteres #lidos, pertenecientes a algun alfabeto )&SC99, Unicode...* • Sentencia: cada una de esas cadenas. • Lexemas: unidades sintcticas de ms bajo ni#el )-, 0, else, begin, contador, suma...* • +oen: +oen: categor;a de lexemas )identificador, )i dentificador, simbolo
*riterios enerales/ !l propósito primordial de la sintaxis es pre#er una notación para la comunicación entre el programador y el procesador de lenguajes de programación.
Legibilidad0 La estructura subyacente del algoritmo y los datos que el programa representa deben quedar en manifiesto al inspeccion inspeccionar ar el texto del programa. Se suele decir que un programa programa legible es autodocume autodocumentable ntable,, o sea, es entendible entendible sin documentación independiente alguna. !s de gran ayuda que las grandes diferencias sintcticas subyacentes reflejen diferencias semnticas. !sto aporta legibilidad.
8
#acilidad de (scritura0 !specifica la facilidad con que un lenguaje puede usarse para crear programas para un dominio de problema elegido. La mayor;a de las caracter;sticas del lenguaje que afectan la legibilidad tambin afectan la facilidad de escritura. Las caracter;sticas del L" que afectan a la legibilidad afectan a la facilidad de escritura, debido a que son criterios que se contraponen. (s fcil de escribir y ms dif;cil de leer y #ice#ersa. Las estructuras sintcticas concisas, claras y regulares mejoran la facilidad de escritura. *oncisas0 que no sean muy extensas a la hora de escribir. *laras0 si son entendibles, se escriben ms naturalmente. %egulares0 que no presenten #ariantes o excepciones dependiendo del contexto. "or ejemplo el 9% de 2a#a que permite ob#iar las lla#es en caso de que haya una sola sentencia dentro de la estructura )esto genera que la estructura no sea regular*. Las con1ersiones sintácticas impl!citas que permiten dejar sin especificar declaraciones y operaciones )es decir, hacer declaraciones impl;citas* hacen a los programas ms cortos y fciles de escribir pero dificultan su lectura. Ciertas redundancias son 1tiles en la sintaxis de los lenguajes de programación porque facilita la lectura del programa y tambin permite re#isar en busca de errores durante la traducción. La des#entaja es que la redundancia dificulta su escritura. !jemplo: declaración impl;cita en %ortran, busca reducir la redundancia. Si pones la #ariable pepe y despus escrib;s pepo por equi#ocación, considera un nue#o nombre de #ariable. !n cambio en "ascal se requiere una declaración expl;cita de cada #ariable, entonces ante el caso anterior caracteri=a el nombre de #ariable mal escrito como un error. Una sintaxis es redundante si comunica el mismo elemento de información en ms de una forma. • >entaja: facilita la lectura del programa y permite buscar errores durante la traducción. !jemplo, "ascal )debo ◦ declarar* int pepe int pepo ◦ $es#entaja: hay que escribir mas )//%acilidad
#acilidad de 1erificación0 esta estrechamente relacionada con la legibilidad y la facilidad de escritura. !ntender cada enunciado de un lenguaje es fcil, pero el proceso de crear programas correctos es dif;cil. Lo importante es darnos cuenta de los errores de lógica )legibilidad*. !n cuanto a los errores sintcticos se ocupa el compilador. Los entornos de programación facilita la #erificación de errores. "or ejemplo, 2a#a. &lgunos editores tienen debuggers incorporados. La facilidad de traducción0 se relaciona con las necesidades del traductor )Compilador del programa fuente o programa objeto* que procesa el programa escrito. La cla#e para una traducción fcil es la regularidad de la escritura. La regularidad del L" ayuda la traducción )hay menos excepciones que #erificar*. 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*. "or lo tanto, la traducción de los programas se dificulta conforme aumenta el numero de construcciones sintcticas. ?tro ejemplo, Cobol es muy dif;cil su traducción a causa del gran numero de formas de enunciados y declaraciones que se permiten )y que sea tan cercano a un lenguaje humano*. add 8 to & mo#e to & &-- @ mas fcil de traducir. compute & 6 & - 8 Si hay #arias posibilidades de resol#er algo, ayuda al programador pero el traductor #a a tener que hacer ms pasos. *arencia de ambig2edad0 la ambigAedad se da al tener una construcción con B o ms interpretaciones posibles. !l ejemplo mas t;pico es el 9% anidado de 2a#a. La carencia de ambigAedad ayuda a la legibilidad y tambin a la facilidad de escritura y simplifica el proceso de detección de errores debido a que las construcciones difieren a ni#el sintctico unas de otras. Cuando hay ambigAedad se soluciona con el uso adecuado de delimitadores o de con#enciones )el end del final cierra el primer begin encontrado hacia arribaD, no se como explicarlo bien*. (lementos/ *onunto de caracteres0 son los s;mbolos que estn permitidos dentro de la sintaxis. La elección de este conjunto es lo primero que se hace al proyectar una sintaxis de lenguaje. Eeneralmente est constituido por: letras may1sculas y7o min1sculas: algunos toman ambas y las distinguen y otros no )si lo hacen, se dice que son Case Sensiti#eD* $;gitos: del F al G. Caracteres especiales: )-, /, 0, 7, etc.* ac es donde empie=an las grandes diferencias. Se eligen para formar los operadores, delimitadores, !tc. del L". La mayor;a toma un subconjunto de caracteres de alg1n alfabeto conocido )&SC99 o Unicode*. •
• •
.elimitadores0 elemento sintctico que se usa para seHalar el principio o el final de alguna construcción. &lgunos #ienen en pares )como las lla#es* para indicar inicio o fin de alguna estructura y otros solos que marcan el fin de algo )como el D*. Las ra=ones por las cuales se usan delimitadores son: !liminar ambigAedades en estructuras en apariencia semejantes a ni#el sintaxis concreta. Simplificar el proceso de traducción. (ejorar la comprensión y legibilidad. <erar el orden de e#aluación de los operadores modificando las reglas de precedencia y asociati#idad. • • • •
B
Identificadores0 Los identificadores mas aceptados son una cadena de letras y d;gitos, que comien=a con una letra. Las #ariaciones en los lenguaje se debe principalmente a la inclusión 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. !jemplo. %ortran )I caracteres*. "ascal no permite el mismo nombre a B funciones, aunque tengan distintos parmetros. !l lenguaje determina la #igencia de uno. La sintaxis para identificadores es general para todos los lenguajes. 'estricciones de longitud: restringen la legibilidad. 9nclusión opcional de caracteres especiales: mejoran la legibilidad. S!mbolos de operadores0 casi todos los lenguaje adoptan el 3 y el 4 para representar las dos operaciones aritmticas bsicas o alguna combinación de ellos, en las dems no hay uniformidad. )por ejemplo .!J. y 00 de %ortran, para igualdad y exponenciación*. Palabras cla1es y reser1adas0 una palabra cla#e es un identificador que se usa como una parte fija de la sintaxis de un enunciado. "or ejemplo 9%, $? en %ortran. Una palabra cla#e es una palabra reser#ada )pero puede no serlo*. !n caso de no serlo, se puede usar como un identificador elegido por el programador )las cla#es pueden usarse como identificador, eso quiere decir*. Casi todos los lenguajes emplean actualmente palabras reser#adas, con lo cual se mejora la capacidad de detección de errores de los traductores. !l anlisis sintctico durante la traducción se facilita usando palabras reser#adas. "or ejemplo, en %ortran $? o 9% no son palabras reser#adas, por lo que pueden no ser un enunciado de iteración o condicional sino nombres de #ariables. Una dificultad se presenta cuando se quiere introducir nue#as palabras reser#adas en los enunciados al elaborar un estndar actuali=ado. Las #ersiones antiguas lle#aran ese identificar como #ariable, y ya no es sintcticamente correcto, no obstante que no ha sido modificado. !n Cobol, todas son palabras reser#adas. ?tra dificultad se presenta cuando se quiere introducir nue#as palabras reser#adas. Palabras pregonadas0 son palabras opcionales que se insertan en los enunciados para mejorar la legibilidad. "or ejemplo en Cobol el E?+? )+? es opcional ya que no transmite información* otro ejemplo +K! y "!'%?'( en Cobol. *omentarios0 la inclusión de los comentarios en los programas es una parte importante de su documentación. &l permite documentación, fa#orece el mantenimiento. Un lenguaje puede permitir comentarios de #arias maneras: 'englones de comentarios por separado en el programa. !jemplo %ortran. $elimitadores por marcadores especiales, como 07 y 07 de C sin que importen los limites del renglón. Comen=ando en cualquier punto de un renglón pero ya concluidos a final del mismo como el M en &da, 77 en C-- o 5 en %ortran GF. esta opción incluye a la primera. La segunda alternati#a tiene des#entaja de que la falla de un delimitador de conclusión en un comentario transforma los enunciados siguientes en comentariosD. (spacios en blanco0 en algunos L" cumplen un rol sintctico importante dado que se usan como separadores o inclusi#e como operadores y en otros, no tienen utilidad. "or ejemplo, en Snobol N, la operación primiti#a de concatenación se representa con un espacio en blanco, el cual tambin se usa como separador entre elementos de un enunciado )ambiguo*. !n %?'+'&, no son significati#os. #ormato de campos libres y fios0 una sintaxis es de campo libre si los enunciados se pueden escribir en cualquier parte de un renglón de entrada sin que importe la posición sobre el renglón o las interrupciones entre renglones. Los campos libre permiten mayor facilidad de escritura. Una sintaxis de campo fijo utili=a la posición sobre un renglón de entrada para transmitir información. !s decir que cada elemento debe aparecer dentro de una parte dada, de un renglón de entrada )com1n en lenguaje ensambladores*. Los campos fijos brindan mayor facilidad de traducción. !s ms com1n el uso de un formato de campo fijo parcial, por ejemplo: %ortran: los O primeros caracteres de un renglón, estn reser#adas para cada rotulo de enunciado. Snobol N: los rótulos de enunciados, comentarios y renglones de continuación se distinguen por un carcter en la primera posición del renglón. &ctualmente, se utili=a mucho mas el campo libre que el fijo. (xpresiones0 Son construcciones sintcticas compuestas de operadores y operandos, de cuya e#aluación se obtiene un #alor. !n los Lenguajes 9mperati#os 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. !n lenguajes aplicati#os como (L o Lisp, las expresiones forman el control bsico de secuencia que dirige la ejecución de programas. Las expresiones son los bloques sintcticos bsicos de construcción a partir de los cuales se construyen enunciados.
P
(nunciados0 Son las sentencias que permiten reali=ar operaciones dentro de los L" imperati#os. La sintaxis tiene un efecto decisi#o sobre la regularidad, legibilidad y facilidad de escritura. La mayor;a de los L" utili=an diferentes estructuras sintcticas para representar cada tipo de enunciado. Su #entaja es que se puede hacer que cada estructura sintctica, exprese de manera natural las operaciones que inter#ienen. "or ejemplo Cobol, en subestructuras participan palabras cla#es especiales, palabras pregonadas, construcciones alternati#as, elementos optati#os, !tc. !sto aporta legibilidad. )?tros utili=an un formato 1nico: el cual hace nfasis en la regularidad. "or ejemplo el SnobolN, cuya sintaxis bsica es el enunciado de sustitución por concordancia de patrones.* Sintaxis 'bstracta y *oncreta/ &lgunas construcciones del lenguaje en diferentes lenguajes de programación tienen la misma estructura conceptual pero difieren en su apariencia a ni#el lxico. "or ejemplo, un fragmento en: !n C:
Qhile )R 6 T* V X
!n "ascal: Qhile R34T Wegin V !nd
Jue difieren en: Los delimitadores: en C las lla#es y en "ascal el par Wegin/!nd La condición de iteración: en C debe ir encerrada entre parntesis y en "ascal, no. !l operador que indica distinto: en C es 6 y en "ascal 34 • • •
Cuando dos construcciones difieren sólo a ni#el lxico )begin..end #s. ..X y 34 #s. 56*, podemos decir que ellas tienen la misma sintaxis abstracta, pero difieren a ni#el de sintaxis concreta . • •
Sintaxis abstracta0 la que representa la estructura que subyace bajo las construcciones. !n este caso, es una iteración controlada por condición. Sintaxis concreta0 la manera en que se escribe en cada lenguaje. !n este caso una iteración controlada por condición en C y "ascal.
)&unque conceptualmente la sintaxis concreta puede ser irrele#ante, pragmticamente 8 puede afectar la utilidad de un lenguaje y la legibilidad de los programas. "or ejemplo, el s;mbolo YYdistintoYY es intuiti#amente mas legible que 56. o es lo mismo usar un espacio en blanco para denotar una suma, que el operando -D.*
&5todos formales para describir la sintaxis de los LP0 gramáticas libres de contexto, 6-# y (6-#, diagramas sintácticos y árboles de análisis sintáctico/ 6eneficios y restricciones/ "ara describir la sintaxis de los L" existen mtodos formales como gramticas libres de contexto, 6-# y (6-#, diagramas sintácticos y árboles de análisis sintáctico . La mayor;a de las descripciones de los L" son informales . !stn expresadas en forma narrati#a en lugar de usar una notación rigurosa. Las descripciones informales tienen una serie de des#entajas: "ueden resultar imprecisas, #agas y ambiguas para expresar claramente los detalles de sintaxis de un L". "ara alcan=ar exactitud, se introduce demasiada palabrer;a y se obtienen descripciones largas, poco prcticas y tediosas a la hora de consultarlas. !sto se da al carecer de un alto grado de poder expresi#o. "or ser imprecisas, pueden dar lugar a #arias interpretaciones y, por ende, a #arias implementaciones diferentes. • •
•
Las notaciones formales que definen la sintaxis de un L" son un conjunto de reglas )producciones* que especifican la serie de caracteres )elementos lxicos* que forman palabras y construcciones permisibles dentro de determinado L" usando una notación estricta. Las #entajas que traen aparejadas el uso de este tipo de notaciones: %eferencia para usuarios0 brindan un documento con información fiable, concisa y no ambigua. %eferencia para implementadores0 como se mencionó anteriormente, distintas interpretaciones dan lugar a distintas implementaciones. Son mucho ms 1tiles para estandari=ar debido a que carecen de ambigAedad. 7erramienta para prueba de programas0 testean y #erifican los programas. $ichas herramientas requieren que los constructores del L" estn formali=ados rigurosamente. $eben pro#ocar una r espuesta predecible. Prueba de implementaciones0 para anali=ar la correctitud de un programa, los requerimientos del sistema tienen que haber sido definidos rigurosamente. 7erramienta para implementaciones automáticas0 estas herramientas permiten automati=ar parte de la construcción de los traductores. "ara esto, necesitan una documentación formal a donde recurrir y no debe ser ambigua sino surgen #arias implementaciones. .ise8o de un LP0 en una notación formal, se permite #isuali=ar ms claramente si el L$" fue bien diseHado o no, #iendo los aspectos tales como simplicidad, poder expresi#o, etc. • •
•
•
•
•
8
o esta en filmina. Sintaxis pragmática0 el uso prctico que se le da. !j., definir una #ariable al principio del programa o al principio de un bloque )cambia el alcance de la misma* N
&l tratar formalmente las estructuras pro#istas por un L" nos permite detectar ms naturalmente irregularidades que, inclusi#e pueden llegar a no ser e#identes en una especificación informal. &dems nos permite detectar semejan=as en estructuras aparentemente muy distintas y diferencias en estructuras aparentemente similares de una manera ms sencilla. Una notación 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 utili=ar y comprender el L" )la complejidad de aprender, comprender y utili=ar la notación formal*. &dems los s;mbolos utili=ados para describir al lenguaje usado en la notación formal pueden confundirse debido a la similitud de los mismos. !xisten algunas facilidades que toda#;a no han sido modeladas por ning1n mtodo de especificación formal. "or ejemplo la concurrencia, excepciones, !tc.
ramáticas libres de contexto/ Una gramtica libre de contexto es una gramtica formal, en la que cada regla de producción es de la forma: > @ w , donde > es un s;mbolo no terminal y w es una cadena de terminales y7o no terminales B. !l trmino libre de contexto se refiere al hecho de que el no terminal > 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 ELC definen un conjunto de reglas que definen todas las construcciones #alidas que puede aceptar un lenguaje. 9 :t, :n, P, S+ donde0 :t es un conunto finito de terminales • :n es un conunto finito de no terminales • P es un conunto finito de producciones • S perteneciente a :n+ el denominado S!mbolo Inicial • los elementos de " son de la forma >n @ )>t U >n* • !jemplo:
La notación ms frecuentemente utili=ada para expresar gramticas libres de contexto es la W%.
6-# y (6-#/ La W% es un metalenguaje P muy utili=ado para definir la estructura sintctica de un lenguaje de programación. La W% que fue creada para definir la estructura sintctica del lenguaje de programación &lgol IF. !n W%, las reglas estn formadas por: "alabras y s;mbolos del lenguaje. • (etas;mbolos: ::6, 3, 4, Z, 0 y -. )s;mbolos propios de las gramticas W% y !W% y que no son parte del lenguaje • descripto. "or ejemplo: ::6D, ZD, etc.* (eta#ariables: )secuencia finita de s;mbolos que se usan para describir palabras del lenguaje descripto. !stn • encerradas entre los metas;mbolos 3D,D4D. &l lenguaje descrito, se lo llama lenguaje sujeto y al que describe, lenguaje objeto. $ichas gramticas permiten generar el conjunto de todas las cadenas que pueden constituir un programa en el lenguaje descrito y as; decidir si un programa es o no #lido de acuerdo a dichas cadenas.* La parte i=quierda de una regla es siempre una meta#ariable, asociada a la construcción que define la regla. • Si una misma meta#ariable puede ser definida a tra#s de dos o ms alternati#as se separan por el metas;mbolo Z. • !jemplo. 3entero4 @ 3d;gito4 3entero4 @ 3entero4 3d;gito4 3d;gito4 @ F 3d;gito4 @ 8 3d;gito4 @ B ... B P
[@[ 6 [Se define como[. Un metalenguaje consta de (etas;mbolos )son s;mbolos que aparecen en la especificación y no son parte del lenguaje sujeto* y (eta#ariables )son palabras que se usan para denotar secuencias de s;mbolos y palabras del lenguaje sujeto* O
La gramtica W%, se puede usar para hacer un trabajo sorprendentemente bueno al definir la sintaxis de casi todos los lenguajes de programación. Las reas de sintaxis que no pueden definirse con una gramtica W% son aquellos que implican dependencia contextual. "or ejemplo, las restricciones el mismo identificador no puede declararse B #eces en el mismo bloqueD, todo identificador se debe declarar en alg1n bloque que encierre el punto de su usoD, y un arreglo para el que se ha declarado que tiene B dimensiones no puede ser referido con P sub;ndicesD son todas no explicables usando solo una gramtica W%. S9 !(W&'E?, la gramtica W% no constituye una notación ideal para comunicar las reglas de sintaxis de lenguajes de programación al programador, debido a su sencille=. !sto obliga a una representación bastante poco natural de las construcciones sintcticas comunes de elementos optati#os, elementos alternati#os y elementos repetidos. $ebido a esto, han surgido extensiones de la W%, que dan cabida a descripciones ms fciles de los lenguajes, reducen el tamaHo e incrementar la claridad de las especificaciones, el metalenguaje puede enriquecerse con algunos recursos adicionales. "or ejemplo, una de las extensiones ms 1tiles es usar corchetes para indicar secuencias opcionales, el uso de lla#es para indicar iteración y el uso de reglas alternati#as.
<ernati#as de una regla. !n #e= de dar #arias reglas W% con la parte i=quierda idntica, se da una sola regla W% con #arias alternati#as, usando un pipe. "or ejemplo: 3entero4 @ 3digito4 Z 3entero4 3digito4 3digito4 @ FZ8ZBZPZNZOZIZ\Z]ZG
Lla#es. Se indica que lo que encierran xxxX se puede repetir F o un numero arbitrario de #eces. "or ejemplo. 3listaparametro4 @ 3parmetro4 Z 3listaparametro4 3parmetro4 quedar;a 3lista parmetro4 @ 3parmetro4 3parmetro4 X
Corchetes. Son un paso particular de las lla#es. !s decir, que encierran una cosa que es opcional, puede estar presente )una #e=* o no. !jemplo. 3sentencia/if4 @ if 3!W4 then 3sentencia4 ^else 3sentencia4_
!sto es lo que se conoce como (6-# o 6-# extendido . 'emarquemos que ninguno de estos mecanismos aumenta el poder expresi#o de las W% sólo permiten obtener especificaciones ms reducidas y claras. !l peligro que encierran estas extensiones es que los s;mbolos del metalenguaje se confundan con los del lenguaje sujeto. !W%. +iene una notación idntica al W% y adems agrega otros metas;mbolos: -D: indica que debe ocurrir al menos una iteración )8 a #arias* 0D: indica iteración pero se puede dar el caso de que no exista ninguna )F a #arias* ^ y D_D: para indicar secuencias opcionales. "ueden o no formar parte de la construcción. D y DXD: indican iteración. $eben estar definidas con un -D o un 0D. inguno de estos mecanismos agrega o aumenta el poder expresi#o de las W%, solo permite producciones ms claras y reducidas. Como des#entaja, se puede marcar que los metas;mbolos agregados se pueden confundir con los del L$" definido )o lenguaje sujeto*.
I
.iagramas rafos+ Sintácticos/ Son una representación #isual de la información descripta en una notación W% y !W% solo que son ms legibles y ms fciles de #isuali=ar debido a que son modelos #isuales. otación de los grafos sintcticos: Los s;mbolos terminales se representan encerrados en c;rculos. Los no terminales, con rectngulos. Una cadena es #lida si puede ser generada cru=ando un diagrama de sintaxis desde la entrada hasta la salida. • • •
.eri1ación/ !s una aplicación repetida de reglas, que comien=a por el s;mbolo inicial y termina con una sentencia. Cada cadena de s;mbolos en la deri#ación es una forma sentencial. Un sentencia es una forma sentencial que tiene solo s;mbolos terminales. Una deri#ación i=quierda es aquella en la que se expande el no terminal que esta mas a la i=quierda en cada forma sentencial. Una deri#ación derecha es aquella en la que se expande el no terminal que esta mas a la derecha en cada forma sentencial. ;rbol de análisis sintáctico/ "ermiten la representación grfica de las deri#aciones de una gramtica. )Se utili=an en la construcción de traductores*. "ara determinar si una cadena dada representa de hecho un programa sintcticamente #alido en el lenguaje definido por una gramtica W%, se deben usar las reglas gramaticales para construir un `rbol de &nlisis Sintctico, de la cadena. Si la cadena se puede anali=ar sistemticamente en forma satisfactoria, entonces est en el lenguaje, sino se puede encontrar una forma de anali=ar la cadena, esta no se encuentra en el lenguaje. "odemos decir, que un rbol sintctico es una representación grfica del proceso de reconocimiento o parsingD de una sentencia. !n los rboles de deri#ación: !l axioma representa la ra;= del rbol. Los nodos hojas son s;mbolos terminales de la gramtica. Los nodos intermedios son s;mbolos no terminales de la gramtica. T se colocan tantas ramas como s;mbolos )terminales y no terminales* haya concatenados en la parte derecha de la regla. !stos #an ordenados de i=quierda a derecha, en el mismo orden que aparecen en la regla. Solo se pueden definir rboles de deri#ación para gramticas de tipo8 o mas restricti#asD.
Una cadena asociada a ms de una rbol de deri#ación se dice ambigua y la regla que permite construirla se llama tambin ambigua. !n ocasiones la ambigAedad no afecta la semntica y puede tolerarse. !n otros casos la ambigAedad debe quedar eliminada. "or ejemplo, una expresión podr;a definirse sintcticamente como: 3!xpr4 ::6 x Z y Z = Z 3!xpr4 - 3!xpr4 Z 3!xp4 0 3!xp4 Z )3!xp4* !ntonces una expresión como: x - y 0 = tendr;a dos deri#aciones posibles, es decir existen dos rboles sintcticos que la representan )ergo, es ambigua*. T debe quedar eliminada porque produce deri#aciones que no son semnticamente equi#alentes. Si usamos el rbol de deri#ación para indicar los ni#eles de precedencia de los operadores, no podemos tener ambigAedad. \
Introducción de semántica -o está en filminas+ La Semntica denota el significado que tienen las di#ersas estructuras sintcticas que conforman al programa )sentencias, estructuras y unidades de programa*. "or ejemplo la cadena $$7$$7$$$$ forma parte de una fecha )siendo $ un d;gito*. La cadena FO7F]7BFF\ es una fecha. "ero hay que tener cuidado porque en algunas partes del mundo, esa fecha representa el d;a FO del mes F] y en otros el d;a F] del mes FO. !s decir que algunos toman $$7((7&&&& y otros ((7$$7&&&&. Se necesita de reglas para describir semnticamente un L". 'eglas que deben describir como tratar cada construcción sintctica. +al es el caso de la fecha del prrafo anterior. !stas reglas se pueden definir: Informalmente0 se define cada uno de los constructores usando un lenguaje natural. !sto trae aparejado ambigAedad, • alta propensión de errores y descripciones incompletas o muy #erborrgicas. (specificando el comportamiento de un procesador semántico abstracto0 dicho procesador ejecuta instrucciones • en un L". !s una buena alternati#a debido a que es un enfoque sencillo de implementar y permite reconocer las dificultades de implementación. #ormalmente0 se especifica un metalenguaje para describir la semntica. aturalmente el hecho de utili=ar • descripciones formales trae aparejada una serie de #entajas: ◦ "roporciona mecanismos para determinar cuando la definición de un lenguaje es completa y correcta. ◦ "uede producir un documento procesable por la mquina. ◦ "ermite desarrollar herramientas automticas que ayudan a procesar, #erificar e implementar un L". &unque tiene una des#entaja: ◦ Son descripciones que requieren de mucho esfuer=o para su definición y producen un resultado muy dif;cil de comprender sin el estudio y anlisis extenso. Limite entre la Sintaxis y la Semántica
!l l;mite exacto entre los trminos sintaxis y semntica es algo arbitrario. !xisten diferentes criterios: Considerar sintcticos aquellos aspectos que se resuel#en en compilación y semnticos todos los dems )en • ejecución*. Se tienen en cuenta los tiempos en los que un programa #a a ser procesado. ▪ Compilación. Un buen compilador reali=a tantos chequeos como le sea posible y posterga hasta la ejecución controles que no puede ejecutar en ese momento. ▪ !jecución. ◦ !ntonces, todos los aspectos lingA;sticos tenidos en cuenta durante la compilación, pueden ser considerados sintcticos. ◦ T todas las cuestiones que se resuel#en en ejecución son de naturale=a semntica. ◦ "ara este criterio, cuestiones como: declaraciones m1ltiples, identificadores no declarados e incompatibilidad de tipos en operaciones: ▪ !n lenguajes con ligadura esttica, formar;an parte del anlisis sintctico. ▪ !n lenguajes con ligadura dinmica, formar;an parte del anlisis semntico. &sociar sintaxis con todos los aspectos libres de contexto del lenguaje y semntica con los sensibles al contexto. • )Se ha definido la sintaxis como todo lo que se puede definir mediante una gramtica libre de contexto, y semntica como todo lo dems que no se puede definir as;.*
]
(lementos de la semántica de los LP0 1ariables, 1alores y referencias, expresiones/ :ariable0 una #ariable corresponde a una región de memoria que se utili=a para almacenar #alores que manipula el programa. Las reglas sintcticas especifican como pueden nombrarse las #ariables. Una declaración introduce una #ariable dndole un nombre y especificando algunas de sus propiedades semnticas)como por ejemplo, las operaciones #lidas con ella*. :alores y %eferencias . Se refiere a qu se asocia a una #ariable. Ju #alor se asocia con una #ariable >eamos una sentencia de asignación de la forma: R 6 T: !n el lado derecho de esta asignación necesitamos el contenido de celda de memoria a la que hace referencia T. !n el lado i=quierdo necesitamos la dirección de memoria a la que hace refenrencia la #ariable R. &s; es como surgen los conceptos de: L>alue o Left >alue: denota una locación de memoria. !n el caso anterior, se necesita del L>alue de RD para poder reali=ar la asignación. '>alue o 'ight >alue: denota el contenido de una locación de memoria )el #alor almacenado*. Las #ariables tienen tanto L>alue como '>alue. Los literales )n1meros, caracteres, etc* no tienen L>alue. Una de las reglas semnticas indica que para que una sentencia de asignación sea #lida, a la i=quierda debe haber un objeto que tenga L>alue porque sino da error de compilación. "or ejemplo P6R no es #lida porque el literal P no tiene L>alue. (xpresiones/ !structuras sintcticas que permiten combinar #alores y operadores para calcular nue#os #alores. !xisten expresiones de diferentes tipos )aritmticas, relacionales..., !tc.*. !l lenguaje especifica las reglas sintcticas y semnticas que permiten construir las expresiones. $entro de dicha especificación, puede definir el orden en que se #an a reali=ar las operaciones dentro de una expresión. &lgunos L" definen cierto orden y otros dejan que el implementador lo decida. !n este 1ltimo caso, se le exige al programador mayor cuidado debido a que un programa puede producir el resultado correcto con un compilador y puede ser que en otro directamente no compile o que produ=ca otro resultado. Semántica formal/ !s la descripción rigurosa del significado o comportamiento de las construcciones de un L". Consiste en el uso de un metalenguaje para definir rigurosamente las reglas semnticas de un L". $icha definición debe ser inequ;#oca, no debe dar lugar a ambigAedades. Una definición formal no necesariamente es legible. La formalidad no #a de la mano con la legibilidad. (ayor formalidad, menor legibilidad. 9mportancia de una definición formal de la semntica: %acilitar a los diseHadores de L" una forma no ambigua y consistente de definir un lenguaje. • !standari=ar un lenguaje por medio de una definición semntica no ambigua para que el lenguaje no sufra #ariaciones • de implementación en implementación. %acilitar la comprensión de un lenguaje por parte del programador. • "roporcionar los fundamentos para prueba de correctitud tanto de los compiladores como de los programas. • Se distinguen dos tipos: semntica esttica y semntica dinmica.
Semántica estática/ Se llama as; porque los chequeos se hacen en tiempo de compilación. Sir#e para definir aspectos sensibles al contexto como incompatibilidad de tipos o la correspondencia de etiquetas, que con W% ser;a dif;cil o imposibles de representar. $etermina las formas legales de un programa. Utili=a como herramienta la gramtica de atributos. Kay algunas caracter;sticas de la estructura de los lenguajes de programación que son dif;ciles de describir con W%, • T algunas que son imposibles. Como ejemplo, de una regla de lenguaje que no puede ser especificada en W%, considere la regla com1n de que todas las #ariables deben ser declaradas antes de ser referenciadas. !s probable que esta regla no pueda ser especificada en W%. ?tro ejemplo es la regla que el end de un subprograma en &da es seguido por un nombre, que debe ser el mismo • nombre que el del subprograma. !stos dos problemas ejemplifican la categor;a de reglas de lenguaje llamados reglas de semntica esttica. La • semntica esttica de un lenguaje esta solo indirectamente relacionado al significado de los programas durante la ejecución, adems, tiene que estar hecha con formas legales de programas. !n muchos casos, la regla de semntica esttica de un lenguaje determina sus restricciones de tipo. La semntica • esttica es tan nombrada porque el anlisis requerido para chequear estas especificaciones pueden ser hechas a momento de la compilación.
G
ramática de atributos0 conceptos básicos/ • • • •
$ebido a los problemas de describir la semntica esttica con W%, se in#entaron una #ariedad de mecanismos para esa tarea. La Eramtica de &tributos, fue diseHada por nuth en 8GI], para describir la sintaxis y la semntica de los programas. Una gramtica de atributos en una notación ms poderosa que W% porque permite formali=ar aspectos sensibles al contexto. Wsicamente una gramtica de atributos es una ELC a la que se le han agregado tres elementos: ◦ &tributos: $escriben propiedades semnticas de las estructuras. ◦ 'eglas: !xpresan la relación entre los atributos ligados a la parte i=quierda y derecha de una descripción. )!xpresan las relaciones entre los atributos ligados a ambas partes de las reglas de producción*. ◦ Condiciones: "ermiten especificar los aspectos sensibles al contexto de un lenguaje de programación.
&lgunas caracter;sticas: Cada s;mbolo o +erminal de una gramtica libre de contexto puede ser asociado a un conjunto finito de atributos. Cada atributo puede ser referenciado a tra#s de un nombre y tiene asociado un dominio de #alores. )Un atributo puede estar #inculado a #arios s;mbolos o +erminales.* Cada aparición de un atributo puede estar ligada a una condición lógica que exprese una restricción )sobre las estructuras o constructores* que debe ser satisfecha por el #alor de ese atributo. !stas condiciones expresan restricciones sobre los constructores definidos por los s;mbolos o +erminales.
Semántica dinámica0 operacional, axiomática y denotacional/ Semntica dinmica: !l anlisis requeridos para #erificar las especificaciones definidas se hacen en tiempo de ejecución )algunas no se • pueden hacer en compilación y otras no con#iene*. !s decir, determina y describe el significado de las expresiones, sentencias y unidades de programas en tiempo de • ejecución. • o existe una 1nica notación uni#ersal para la semntica dinmica debido a que cada una est orientada a apoyar a las distintas personas inter#inientes en el desarrollo y uso de un L". Las definiciones formales son 1tiles debido a que orientan y dan a conocer que hace cada construcción en un L" • )lectura de manuales*. Se sigue buscando una notación uni#ersal para todos los inter#inientes en un L". Kay #arias ra=ones diferentes por las que uno podr;a estar interesado por la descripción de semntica. "rimero, los programadores necesitan saber precisamente que definiciones de un lenguajes hay. Eeneralmente, 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. !stas descripciones informales son usadas debido a la complejidad de las descripciones de la semntica formal. o existe ninguna notación uni#ersalmente aceptada para describir semntica dinmica. !s un objeti#o de la in#estigación encontrar un formalismo de la semntica que pueda ser usado por los programadores u escritores de compiladores. Se han reali=ado trabajos experimentales en la generación automtica de compiladores desde las descripciones semnticas del lenguaje. Las semnticas dinmicas son: operacional, axiomtica, y denotacional.
Semántica $peracional0 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. !s un mecanismo que da una salida con un programa y unos datos de entrada arbitrarios. )!st orientada al implementador, le sir#e para plantear optimi=aciones .* • &ct1a como un intrprete de un L". )$ebe hacerlo lo ms eficientemente posible. Waja las construcciones de alto ni#el • a un ni#el ms cercano al lenguaje mquina y se anali=a su comportamiento.* Una definición semntica operacional actuar;a como una especie de intrprete de un lenguaje. • $escribir la semntica operacional de las sentencias de un lenguaje de alto ni#el requiere la construcción de una computadora #irtual o real. !l hardare de una computadora es un interprete puro para su lenguaje maquina. Un intrprete puro para cualquier lenguaje de programación puede ser construido en softare, que seria la computadora #irtual para el lenguaje. La semntica para un lenguaje de alto ni#el puede describirse usando el intrprete puro para el lenguaje. Sin embargo existen dos problemas: primero, la complejidad e naturale=a del hardare de la computadora y el sistema operati#o que fueron usados para correr el intrprete puro podr;an hacer a las acciones dif;ciles de entender. Segundo, una definición de semntica hecha de esta forma podr;a solo estar disponible en una maquina idnticamente configurada. 8F
!stos problemas pueden ser e#itados reempla=ando la computadora real con una computadora #irtual de bajo ni#el, implementada con una simulación softare. Los registros, la memoria, información de estado y procesos en ejecución serian todos simulados. !l set de instrucciones podr;a diseHarse para que la semntica de cada instrucción sea fcil de describir y comprender. $e esta manera, la maquina seria ideali=ada 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 programación L, requiere la construcción de dos componentes. "rimero, un traductor es necesario para con#ertir sentencias de L al lenguaje de bajo ni#el elegido. !l otro componente es la maquina #irtual para este lenguaje de bajo ni#el. !l estado cambia a causa de la ejecución del código que resulta de traducir una sentencia dada en un lenguaje de alto ni#el definiendo el significado de esa sentencia. )!xisten muchos mtodos que encuadran dentro de la semntica operacional. Semntica ?peracional con un &utómata Concreto. !l autómata es una computadora capa= de ejecutar programas escritos en una notación similar a los lenguajes de programación. (aquina #irtual. Semntica ?peracional &bstracta. 'eempla=a los conceptos computacionales con nociones matemticas y eliminar los constructores imperati#os.* •
•
•
"or ejemplo, la semntica de la sentencia for de C. <o ni#el. for )expr8 exprB exprP* VVV. X
Wajo ni#el /4 semntica operacional.
expr8 loop: if exprB 6 F goto out VVV. exprP goto loop out:V Como conclusión, la semntica operacional, fue creada por #arias ra=ones: !l primer y ms significati#o uso de semntica operacional formal fue para describir la semntica de "L79. • La maquina abstracta particular y las reglas de traducción para "L79 fueron llamadas Lenguajes de $efinición >iena • )>?L* el cual amplia el rbol de anlisis sintctico para incluir tambin el interprete de maquina. >?L es tan complejo que sir#e para propósitos no prcticos. • La semntica operacional depende de algoritmos, no de matemtica. •
Semántica 'xiomática0 $escribe las acciones de un programa mediante predicados o expresiones lógicas que especifican restricciones sobre • las #ariables del programas antes y despus de su ejecución. )Wasada en el calculo de predicados. o se basa en el modelo de estado de mquina. Las expresiones lógicas se • denominan predicados o asertos*. La semntica axiomtica es una herramienta poderosa para las correcciones de programas. • !n una prueba, cada sentencia de un programa es tanto precedida como seguida por una expresión lógica que • especifica restricciones a las #ariables de programa. )Usa reglas de inferencia para determinar el impacto de ejecución de la estructura, estableciendo una pre y • post/condición para cada sentencia o grupo de sentencias. !st orientada al programador porque funciona como una prueba de escritorio, dado que se anali=a si hace lo que uno • espera. !l significado de una sentencia o grupo de sentencias )SD* se anali=a en trminos de: • ◦ La condición " o pre/condición: que se supone #erdadera antes de que se ejecute S. ◦ La condición J o post/condición: que puede deducirse #erdadera despus de que S se ejecute. !sto se escribe como "X S JX. "or ejemplo: x6 a -8 Con una pre/condición: Se usa para anali=ar el comportamiento de las estructuras.
88
La semntica axiomtica fue definida en conjunción con el desarrollo de un mtodo para pro#eer la corrección de programas. !n una prueba, cada sentencia de un programa es tanto precedida como seguida por una expresión lógica que especifica restricciones a las #ariables de programa. !stas, adems, de ser el estado completo de una maquina abstracta )como la semntica operacional*, son usadas para especificar el significado de la sentencia. La notación usada para describir restricciones, en realidad el lenguaje de la semntica axiomtica es el Clculo de "redicado. &unque, las expresiones booleanas simples son frecuentemente adecuadas para expresar restricciones, en algunos casos no lo son: Como conclusión podemos decir que para definir la semntica de un lenguaje de programación 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 pro#ee un excelente marco de trabajo durante su construcción y su uso posterior. !s 1til, tanto para los usuarios de los lenguajes como para quienes escriben compiladores. Sin embargo, es ampliamente limitado. La especificación 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. "ueden ser #erdades o falsas. Una formula #erdadera se llama teorema. La intención de definir que formulas son teoremas. Una teor;a formal est formada por: 'eglas Sintcticas. &xiomas. 'eglas de inferencia.
Semántica .enotacional0 !st orientada al diseHador del L". La entrada a la misma es un programa y la salida es un objeto matemtico • )n1meros y funciones*. !s independiente de la implementación. La intención es que las estructuras se plasmen como las ideó el diseHador. !s • una semntica del tipo declarati#a. $efine el comportamiento de un L" aplicando funciones matemticas a programas o a construcciones )estructuras* del • lenguaje, para representar su significado. "ara cada entidad se define un objeto matemtico y una función que mapea las instancias de dicha entidad. Cada objeto matemtico YYdenotaYY el significado de su correspondiente entidad sintctica. & tra#s del objeto matemtico se describe la dependencia funcional entre el resultado de la ejecución de un programa y sus datos iniciales.
8B
•
La Semntica $. de un programa puede ser definida en trminos de cambios de estado de una computadora #irtual. )Concepto parecido a la semntica operacional. &mbas semnticas se basan para la especificación de los significados en los #alores de las #ariables. $iferencias: Código >s. %unciones*.
La semntica $enotacional es el mtodo conocido ampliamente ms riguroso para describir el significado de los programas. !sta sólidamente basado en la teor;a de la función recursi#a. !l concepto fundamental de la semntica $enotacional es definir para cada entidad del lenguaje un objeto matemtico y una función que mapee instancias de esa entidad dentro de instancias del objeto matemtico. $ebido 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 programación. La dificultad con este mtodo esta en crear los objetos y las funciones de mapeo. !l mtodo es llamado $enotacional porque los objetos matemticos denotan el significado de sus correspondientes entidades sintcticas. Una especiali=ación semntica $enotacional puede pensarse como una #ariante de la semntica translacional. )!S+? +!C9C&(!+! ? >&* !n ella, la semntica de un lenguaje de programación queda expresada como un esquema de traslación que asocia un significado a cada programa. La descripción $enotacional est dada por un conjunto de funciones de significado ( asociadas con los constructores de la gramtica. Cada función tiene la forma: (+ : + $+, donde: + es un constructor del lenguaje. $+ es una denotación para +. +ales funciones tendrn nombres de la forma ( subindicada por el nombre del constructor. La mayor;a de las funciones ( son funciones de alto orden. "roducen funciones como resultado y para distinguirlas se usan corchetes para encerrar los argumentos. • •
6666666666666666 "?' L&S $U$&S Semntica +ranslacional: la idea es expresar el significado de un lenguaje a tra#s de un esquema de translación con el cual sea posible, dado un programa cualquier escrito es ese lenguaje, producir un programa equi#alente en un lenguaje mas simple. La gramticas de atributos puede ser utili=ados para describir semnticamente un algoritmo. La tcnica consiste en construir un mapeo desde el lenguaje a definir hacia otro lenguaje objeto. !ste mapeo constituye una especiali=ación semntica completa si el lenguaje objeto esta a su #e= definido. La idea de la definición es asociar a cada constructor a un atributo )código* a cada programa, cuyo #alor #a a ser una secuencia de instrucciones. !l #alor de este atributo, para una construcción dada, representa su traducción al lenguaje objeto. !l #alor del código asociado al constructor inicial es la traducción completa. La semntica translacional act1a como el compilador de un lenguaje.
8P
&I-I %(SU&(- S(&;-)I*' con a8adidos de *arabio+0 La Sem/ #ormal se di#ide en dos tipos: (stática0 que especifica aspectos sensibles al contextos que no pueden ser modelados mediante una ELC, pero a1n as; • pueden ser corroborados en tiempo de compilación )por tanto, se considera como una extensión de las ELC* Eramtica de &tributos. !n esencia es una ELC aumentada, a la cual se le pueden definir: ◦ &+'9WU+?S )asociadas a cada s;mbolo* ▪ '!EL&S ▪ C?$9C9?!S ▪ ES LO QUE SE USA EN LA ETAPA DE ANÁLISIS SEMÁNTIO DE LA TRADUI!N" • .inámica0 que describe el significado de expresiones, sentencias y unidades de programa en tiempo de ejecución. ?peracional: describe el significado de un programa, ejecutando sus sentencias en una mquina de instrucciones ◦ simples )real o simulada*. Se caracteri=a por el uso de enunciados simples, como saltos incondicionales, etiquetas... ES USADA POR LOS IMPLEMENTADORES# AL MOMENTO DE PLANTEAR OPTIMI$AIONES %POR QUE LES PERMITE &ER ESPEI'IAMENTE EL 'UNIONAMIENTO DE ESTRUTURAS# A (A)O NI&EL# * A PARTIR DE ALLÍ &ISUALI$AR ME)ORAS+" La filmina dice tambin que la ?per. se usa en manuales de referencia yo dir;a ms bien que se usa en textos acadmicos... $e hecho, Sebesta explica algunas rutinas usando una especie de ?peracional. &xiomtica: describe las acciones de un programa mediante predicados o expresiones lógicas )asertos* que ◦ especifican restricciones sobre las #ariables del programa, antes y despus de la ejecución. Los axiomas son definidos para cada tipo de sentencia. )'ecordar pre/ y post/condiciones* ES USADA POR LOS USUARIOS# ES UNA MANERA DE QUE SE ASEGUREN LA ORRETITUD DE SUS PROGRAMAS %PARA UNA DETERMINADA ENTRADA ,PREOND, EL LENGUA)E ASEGURA UNA DETERMINADA SALIDA ,POSTOND,+ $enotacional: define el comportamiento de un L" aplicando funciones matemticas a programas o a construcciones ◦ del lenguaje. !st basado en la teor;a de funciones recursi#as. !s el mtodo ms riguroso y complejo, pero as; tambin es el ms correctoD de todos. "or cada entidad se define un objeto matemtico y una función que mapea instancias de dicha entidad a tra#s del objeto matemtico se describe la dependencia funcional entre el resultado de la ejecución de un programa, y sus datos iniciales. ES USADA POR LOS DISE-ADORES DEL LENGUA)E# POR QUE ES EL M.TODO MÁS ORRETO QUE TIENEN PARA PODER &ERI'IAR SUS ONSTRUIONES/ ES RÍGIDO * NO DA LUGAR A LA AM(IG0EDAD" 1 "or este moti#o es declarati#a, abstrayndose por completo de cual implementación, y con el 1nico fin de reflejar las ideas de los diseHadores.
8N