VOLUMEN_1 sintaxis

Click here to load reader

  • date post

    02-Jul-2015
  • Category

    Documents

  • view

    10.321
  • download

    8

Embed Size (px)

Transcript of VOLUMEN_1 sintaxis

SSL1 Desde sus Usuarios Jorge D. Muchnik, 2010 SSL 1 2 Muchnik El libro Sintaxis y Semntica de los Lenguajes est formado por tres volmenes: Vol. 1 Desde sus Usuarios (programadores y otros) Vol.2 Desde el Compilador Vol.3 Algoritmos Este libro cubre todos los objetivos y los contenidos de la asignatura con el mismo nombre. Agradezco a los profesores que integran la ctedra Sintaxis y Semntica de los Lenguajes, que siempre han apoyado mi gestin y han colaborado de distintas maneras para que este libro sea una realidad. Por orden alfabtico, los profesores de esta ctedra son: Adamoli, Adriana Barca, Ricardo Bruno, Oscar Daz Bott, Ana Mara Ferrari, Marta Ortega, Silvina Sola, Jos Maria. Jorge D. Muchnik, Titular febrero 2010 SSL 1 3 Muchnik NDICE 1 DEFINICIONES BSICAS E INTRODUCCIN A LENGUAJES FORMALES. . . . . 7 1.1 CARACTERES Y ALFABETOS. . . . . . . . . . . . . . . . . . . . . 7 1.2 CADENAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2.1 LONGITUD DE UNA CADENA. . . . . . . . . . . . . . . . . . . . 8 1.2.2 CADENA VACA. . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2.3 UNA SIMPLIFICACIN: LA POTENCIACIN DE UN SMBOLO . . . . . . . 9 1.2.4 CONCATENACIN DE DOS CADENAS. . . . . . . . . . . . . . . . . 9 1.2.5 POTENCIACIN DE UNA CADENA. . . . . . . . . . . . . . . . . .10 1.3 LENGUAJES NATURALES Y LENGUAJES FORMALES. . . . . . . . . . . .11 1.3.1 PALABRA . . . . . . . . . . . . . . . . . . . . . . . . . . . .13 1.3.2 PROPIEDADES DE LAS PALABRAS . . . . . . . . . . . . . . . . . .14 1.3.3 CARDINALIDAD DE UN LENGUAJE FORMAL. . . . . . . . . . . . . .15 1.3.4 SUBLENGUAJES. . . . . . . . . . . . . . . . . . . . . . . . .15 1.4 LENGUAJES FORMALES INFINITOS. . . . . . . . . . . . . . . . . .16 1.4.1 LENGUAJE UNIVERSAL SOBRE UN ALFABETO. . . . . . . . . . . . .16 1.4.2 LENGUAJES FORMALES INFINITOS MS COMPLEJOS. . . . . . . . . .17 1.5 IMPLEMENTACIN EN C . . . . . . . . . . . . . . . . . . . . . . .18 2 GRAMTICAS FORMALES Y JERARQUA DE CHOMSKY. . . . . . . . . . . .19 2.1 GRAMTICA FORMAL. . . . . . . . . . . . . . . . . . . . . . . .19 2.1.1 DEFINICIN FORMAL DE UNA GRAMTICA FORMAL . . . . . . . . . . .20 2.2 LA JERARQUA DE CHOMSKY . . . . . . . . . . . . . . . . . . . . .222.2.1 GRAMTICA REGULAR (GR). . . . . . . . . . . . . . . . . . . .222.2.1.1 GRAMTICA REGULAR QUE GENERA UN LENGUAJE REGULAR INFINITO . .23 2.2.1.2 GRAMTICA QUASIREGULAR (GQR) . . . . . . . . . . . . . . . .242.2.2 GRAMTICA INDEPENDIENTE DEL CONTEXTO (GIC). . . . . . . . . .25 2.2.2.1 GIC QUE GENERA UN LENGUAJE INFINITO . . . . . . . . . . . . .262.2.3 GRAMTICA IRRESTRICTA . . . . . . . . . . . . . . . . . . . . .272.2.4 GRAMTICA SENSIBLE AL CONTEXTO (GSC). . . . . . . . . . . . .272.3 EL PROCESO DE DERIVACIN. . . . . . . . . . . . . . . . . . . .272.4 INTRODUCCIN A LAS GQRs, LAS GICs Y LOS LENGUAJES DE PROGRAMACIN30 3 SINTAXIS Y BNF. . . . . . . . . . . . . . . . . . . . . . . . . .33 3.1 INTRODUCCIN A LA SINTAXIS. . . . . . . . . . . . . . . . . . .333.2 IDENTIFICADORES Y SU SINTAXIS . . . . . . . . . . . . . . . . . .343.3 LAS EXPRESIONES Y LA SINTAXIS . . . . . . . . . . . . . . . . . .363.3.1 LA EVALUACIN DE UNA EXPRESIN, PRECEDENCIA Y ASOCIATIVIDAD . .38 3.4 BNF Y ALGOL . . . . . . . . . . . . . . . . . . . . . . . . . . .423.4.1 DOS EJEMPLOS DE BNF EN ALGOL. . . . . . . . . . . . . . . . .433.5 BNF Y EL LENGUAJE PASCAL. . . . . . . . . . . . . . . . . . . .443.5.1 LA SINTAXIS DEL LENGUAJE PASCAL, SEGN WIRTH. . . . . . . . .44 3.5.2 EXPRESIONES EN PASCAL . . . . . . . . . . . . . . . . . . . . .47 3.5.3 SENTENCIAS CON CONDICIONES BOOLEANAS. . . . . . . . . . . . .49SSL 1 4 Muchnik 3.6 BNF Y EL ANSI C . . . . . . . . . . . . . . . . . . . . . . . . .503.6.1 UN PROGRAMA EN ANSI C . . . . . . . . . . . . . . . . . . . . .513.6.2 SINTAXIS DE UN SUBCONJUNTO DE ANSI C. . . . . . . . . . . . .53 3.6.2.1 LAS CATEGORAS LXICAS. . . . . . . . . . . . . . . . . . .533.6.2.1.1 LAS PALABRAS RESERVADAS . . . . . . . . . . . . . . . . . .553.6.2.1.2 LOS IDENTIFICADORES . . . . . . . . . . . . . . . . . . . .553.6.2.1.3 LAS CONSTANTES. . . . . . . . . . . . . . . . . . . . . .55 3.6.2.1.4 LOS OPERADORES Y LOS CARACTERES DE PUNTUACIN . . . . . . .58 3.6.2.2 LAS CATEGORAS GRAMATICALES . . . . . . . . . . . . . . . . .583.6.2.2.1 LAS EXPRESIONES . . . . . . . . . . . . . . . . . . . . . .583.6.2.2.2 DECLARACIONES Y DEFINICIONES. . . . . . . . . . . . . . .633.6.2.2.3 SENTENCIAS. . . . . . . . . . . . . . . . . . . . . . . .64 3.7 OTROS USOS DE BNF . . . . . . . . . . . . . . . . . . . . . . . .66 4 SEMNTICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . .674.1 DEFINICIN DE UN LENGUAJE DE PROGRAMACIN . . . . . . . . . . . .674.2 EL ANSI C Y SU SEMNTICA. . . . . . . . . . . . . . . . . . . .674.2.1 IDENTIFICADOR . . . . . . . . . . . . . . . . . . . . . . . . .68 4.2.2 SEMNTICA DE LAS CONSTANTES . . . . . . . . . . . . . . . . . .684.2.2.1 CONSTANTES ENTERAS. . . . . . . . . . . . . . . . . . . . .684.2.2.2 CONSTANTES REALES . . . . . . . . . . . . . . . . . . . . . .694.2.2.3 CONSTANTES CARCTER . . . . . . . . . . . . . . . . . . . . .704.2.2.4 LITERAL CADENA. . . . . . . . . . . . . . . . . . . . . . .704.2.3 SEMNTICA DE LOS OPERADORES . . . . . . . . . . . . . . . . . .71 4.2.4 SEMNTICA DE LOS CARACTERES DE PUNTUACIN . . . . . . . . . . .71 4.2.5 SEMNTICA DE LAS EXPRESIONES. . . . . . . . . . . . . . . . .71 4.2.6 SEMNTICA DE LAS DECLARACIONES Y DEFINICIONES . . . . . . . . .73 4.2.7 SEMNTICA DE LAS SENTENCIAS . . . . . . . . . . . . . . . . . .73 5 LENGUAJES REGULARES Y EXPRESIONES REGULARES . . . . . . . . . . . .75 5.1 DETERMINACIN DE LENGUAJES REGULARES. . . . . . . . . . . . . .75 5.2 LAS EXPRESIONES REGULARES . . . . . . . . . . . . . . . . . . . .765.2.1 EXPRESIONES REGULARES PARA LENGUAJES REGULARES FINITOS. . . .77 5.2.1.1 EL OPERADOR POTENCIA. . . . . . . . . . . . . . . . . . . .79 5.2.2 EXPRESIONES REGULARES PARA LENGUAJES REGULARES INFINITOS. . .80 5.2.2.1 EL OPERADOR CLAUSURA POSITIVA . . . . . . . . . . . . . . .81 5.2.2.2 LA EXPRESIN REGULAR UNIVERSAL Y SU APLICACIN. . . . . . .83 5.3 DEFINICIN FORMAL DE LAS EXPRESIONES REGULARES. . . . . . . . .85 5.4 OPERACIONES SOBRE LENGUAJES REGULARES Y LAS EXPRESIONES REGULARES CORRESPONDIENTES. . . . . . . . . . . . . . . . . . . . . . . .86 5.4.1 GENERALIDADES . . . . . . . . . . . . . . . . . . . . . . . . .865.4.2 LA UNIN DE LENGUAJES REGULARES . . . . . . . . . . . . . . . .865.4.3 LA CONCATENACIN DE LENGUAJES REGULARES . . . . . . . . . . . .875.4.4 LA CLAUSURA DE KLEENE DE UN LENGUAJE REGULAR. . . . . . . . .87 5.4.5 LA CLAUSURA POSITIVA DE UN LENGUAJE REGULAR . . . . . . . . . .88SSL 1 5 Muchnik 5.4.6 EL COMPLEMENTO DE UN LENGUAJE REGULAR . . . . . . . . . . . . .88 5.4.7 LA INTERSECCIN DE DOS LENGUAJES REGULARES. . . . . . . . . .895.5 EXPRESIONES REGULARES Y LENGUAJES DE PROGRAMACIN . . . . . . . .89 5.6 EXPRESIONES REGULARES EXTENDIDAS. . . . . . . . . . . . . . . .925.6.1 UN METALENGUAJE PARA EXPRESIONES REGULARES. . . . . . . . . .92 5.6.1.1 EL METALENGUAJE, SUS METACARACTERES Y SUS OPERADORES. . . .93 5.6.1.2 EJERCICIOS PARA ESCRIBIR META EXPRESIONES REGULARES . . . . .95 5.6.1.3 UNA APLICACIN: LEX Y EJEMPLOS. . . . . . . . . . . . . . .95 6 BIBLIOGRAFA. . . . . . . . . . . . . . . . . . . . . . . . . . .99 7 EJERCICIOS RESUELTOS. . . . . . . . . . . . . . . . . . . . . . . 101 - Captulo 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 - Captulo 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 - Captulo 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 - Captulo 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 - Captulo 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 SSL 1 6 Muchnik SSL 1 7 Muchnik 1DEFINICIONESBSICASEINTRODUCCINALENGUAJESFORMALES El Volumen 1 de este libro trata la Sintaxis y la Semntica de los Lenguajes de Programacin (LPs) desde el punto de vista de los que necesitan conocerla,sus usuarios, mientras que el Volumen 2 la analizar desde el punto de vista del compilador. NOTA MUY IMPORTANTE PARA UNA BUENA COMPRENSIN DE TODOS LOS TEMAS,SIEMPRE RESUELVA LOS EJERCICIOS EN LA MEDIDA QUE VAN APARECIENDO.NO LOS DEJE COMO LTIMA TAREA DE CADA CAPTULO. La SINTAXIS de un LENGUAJE DE PROGRAMACIN describe las combinaciones de smbolos queformanunprogramasintcticamentecorrecto.ComoestaSINTAXISestbasadaenlos LENGUAJES FORMALES, debemos comenzar con este concepto. Los LENGUAJES FORMALES estn formados por PALABRAS, las palabras son CADENAS y las cadenasestnconstituidasporCARACTERESdeunALFABETO.Estafraseinvolucracinco trminos(lenguajeformal,palabra,cadena,carcteryalfabeto)quesonfundamentaleseneste campo. A continuacin los analizamos detenidamente. 1.1 CARACTERES y ALFABETOS UnCARCTER(tambinllamadoSMBOLO)eselelementoconstructivobsico.Eslaentidad fundamental, indivisible, a partir de la cual se forman los alfabetos. UnALFABETOesunconjuntofinitodecaracteres.Seloidentifica,habitualmente,conlaletra griegaE(sigma),yconsuscaracteresseconstruyenlascadenasdecaracteresdeunLenguaje Formal. Ejemplo 1 La letra a es un carcter o smbolo que forma parte del alfabeto espaol, del alfabeto ingls, etc. Ejemplo 2 Loscaracteres>,=y+sonelementosdelalfabetodelosoperadoresdemuchosLenguajesde Programacin. Ejemplo 3 ElalfabetoE={0,1}proporcionaloscaracteresutilizadosenlaconstruccindelosnmeros binarios. Un carcter de un alfabeto tambin puede ser mltiple. SSL 1 8 Muchnik Ejemplo 4 El alfabeto E = {ab, cde} est integrado por dos caracteres: el carcter ab y el carcter cde. * Ejercicio 1 * Escribaelalfabetoqueserequiereparaconstruirelconjuntodelosnmerosenterosconsignoen base 10. 1.2CADENAS UnaCADENA,formaabreviadadelafrasecadenadecaracteres,esunasecuenciafinitade caracteres tomados de cierto alfabeto y colocados uno a continuacin de otro. Es decir: una cadena se construye CONCATENANDO caracteres de un alfabeto dado. Como sinnimo de cadena se usa, a veces,el trmino ingls string. Ejemplo 5 abac (se lee a-b-a-c) es una cadena formada con caracteres del alfabeto {a, b, c}. Ejemplo 6 101110 (uno-cero-uno-uno-uno-cero) es una cadena construida con caracteres del alfabeto {0, 1}. Ejemplo 7 a es una cadena formada por un solo smbolo de cualquier alfabeto que contenga el carcter a. Para los conocedores delLenguaje de Programacin C: recuerden ladiferencia que existe entre a y a. Es la misma diferencia que existe entre un carcter de un alfabeto y una cadena compuesta por ese nico carcter. * Ejercicio 2 * Dadoelalfabeto{0, 1, 2}, construyadoscadenasenlaquecadaunodeestoscaracteresaparezca una sola vez. * Ejercicio 3 * Dado el alfabeto {ab, cde}, construya una cadena que tenga cuatro caracteres 1.2.1LONGITUD DE UNA CADENA La LONGITUD de una cadena S (se representa |S|) es la cantidad de caracteres que la componen. Ejemplo 8 La longitud de la cadena abac es: |abac| = 4. Ejemplo 9 La longitud de la cadena b es: |b| = 1. SSL 1 9 Muchnik 1.2.2CADENA VACA La CADENA VACA, que se simboliza habitualmente con la letragriegac (psilon), es lacadena que no tiene caracteres. En otras palabras: la cadena vaca es la cadena de longitud 0 (|c| = 0). Nota 1 Este smbolo c no forma parte de ningn alfabeto. Nota 2 Algunos autores utilizan la letra griega (lambda) para representar a la cadena vaca. 1.2.3UNA SIMPLIFICACIN: LA POTENCIACIN DE UN SMBOLO En muchas ocasiones, una cadena puede contener un carcter que se repite un nmero determinado de veces. Ejemplo 10 Lacadenaaaaabbbbbbb,construidasobreelalfabeto{a,b},estformadaporcuatroaes concatenadas con siete bes. La POTENCIACIN de un carcter simplifica la escritura de cadenas como la del ejemplo anterior, de la siguiente manera: Seacuncarctercualquiera;entonces,cnrepresentalaconcatenacindelcarcterc,consigo mismo, n-1 veces. En otras palabras, cn representa la repeticin del carcter c, n veces. Por lo tanto: c1 = c, c2 = cc, c3 = ccc, etc. Nota 3 Para un carcter, no existe la potencia 0. Ejemplo 11 La cadena del Ejemplo 10 (aaaabbbbbbb) se puede escribir, ms sintticamente, as: a4b7. Como se puede apreciar, esta simplificacin tambin produce una mejor y ms rpida lectura y, por lo tanto, una mejor comprensin- de la cadena en cuestin. * Ejercicio 4 * Simplificando con el uso de la potenciacin, escriba la cadena que tiene 1300 aes seguidas de 846 bes seguidas de 257 aes. 1.2.4CONCATENACIN DE DOS CADENAS La operacin de CONCATENACIN aplicadaa cadenas (se escribe S1-S2 o, simplemente, S1S2) produce una nueva cadena formada por los caracteres de la primera cadena seguidos inmediatamente por los caracteres de la segunda cadena. SSL 1 10 Muchnik Ejemplo 12 Sean las cadenas S1 = aab y S2 = ba; entonces, S1S2 = aabba. Nota 4Laconcatenacinseescribe,normalmente,sinutilizareloperadorcorrespondiente(-),comoenel ejemplo anterior. Simplemente, se coloca una cadena a continuacin de la otra. Nota 5 La concatenacin se extiende, fcilmente, a ms de dos cadenas. Ejemplo 13 S1-S2-S3 = S1S2S3. * Ejercicio 5 * Sean las cadenas S1 = aab y S2 = ba.Obtenga la cadena S1S2S1S2. La concatenacin NO ES CONMUTATIVA (excepto en casos muy especiales). Ejemplo 14 Lacadenaaaconcatenadaconlacadenabbproducelacadenaaabb,mientrasquelacadenabb concatenadaconlacadenaaaproducelacadenabbaa.Estasdoscadenassondiferentes;en consecuencia, la concatenacin no es siempre conmutativa. A continuacin, veamos algunos casos especiales en los que la concatenacin s es conmutativa. CASO 1: Si ambas cadenas son idnticas, entonces la concatenacin es conmutativa. Ejemplo 15 Silaprimeracadenaesabylasegundacadenatambinesab,entonces:ab-ab(encualquier orden) es abab. CASO 2: Cuando ambas cadenas estn compuestas por una repeticin del mismo carcter, entonces la concatenacin es conmutativa. Ejemplo 16 Sea S1 = aay sea S2 = aaa. Entonces: S1S2 = a2a3 = a2+3 = a5y S2S1 = a3a2 = a3+2 = a5. En consecuencia, S1S2 = S2S1 = a5. CASO 3: La cadena vaca (c) es la IDENTIDAD para la concatenacin.Esto es: para cualquier cadena S, S-c = c-S = S. 1.2.5POTENCIACIN DE UNA CADENA El suprandice utilizado en la seccin 1.2.3 para representar la repeticin de un carcter se extiende fcilmenteaunacadena,deestamanera:siSesunacadena,entoncesSn(conn>1yentero) SSL 1 11 Muchnik representalacadenaqueresultadeCONCATENARlacadenaS,consigomisma,n-1veces;es decir: la cadena final resulta de repetir la cadena original n veces. Por lo tanto:S1 = S,S2 = SS,S3 = SSS,etc. Esta definicin se completa con la siguiente afirmacin: S0 es c (la cadena vaca), para cualquier cadena S. Ejemplo 17 Sea S = ab; entonces: S3 = SSS = (ab)3 = ababab. Ejemplo 18 Nteseladiferenciaqueexisteentrelacadena(ab)3ylacadenaab3:(ab)3representalacadena ababab, mientras que ab3 es la cadena abbb. * Ejercicio 6 * Por qu el suprandice 0 no es aplicable a caracteres pero s a cadenas? * Ejercicio 7 * Demuestre que (abc)0 = (1234)0. Un caso particular:cn = c para cualquier valor entero de n > 0. * Ejercicio 8 * Demuestre que las cadenas (ab3)3 y ((ab)3)3 son diferentes. 1.3LENGUAJES NATURALES Y LENGUAJES FORMALES SedenominaLENGUAJENATURALatodolenguajehabladoy/oescritoqueesutilizadoporlos seres humanos para comunicarse. Ejemplo 19 Elespaol,elinglsyelchinosonlostreslenguajesnaturalesempleadospormspersonasenel mundo. Los Lenguajes Naturales tienen cuatro caractersticas fundamentales:1EVOLUCIONANconelpasodeltiempo,incorporandonuevostrminosynuevasreglas gramaticales para mejorar y actualizar la comunicacin;Ejemplo 20 Laspalabraspnfiloyzopenconosonutilizadasactualmente,aunquefiguranenlos diccionarios. * Ejercicio 9 *Escriban sinnimos de las palabras del Ejemplo 20, que se utilicen actualmente. 2Sus REGLAS GRAMATICALES surgen despus del desarrollo del lenguaje, para poder explicar su estructura, es decir: su sintaxis;SSL 1 12 Muchnik 3ElSIGNIFICADO(osea,lasemntica)decadapalabra,decadaoracinydecadafrasedeun Lenguaje Natural es, en general, ms importante que su composicin sintctica.Ejemplo 21 Donya Innes ah vaniado a su perro con javom pra labar la roppa. Esta oracin tiene muchos errores,peroseguroquetodosnosotroscomprendemossusignificado.Enconsecuencia, comprobamosque,enlosLenguajesNaturales,lasemnticaesmsimportantequela sintaxis. Ejemplo 22 Engeneral,losmensajesdetextotienenmuchoserroressintcticos.Apesardeello,las personasquesecomunicanatravsdeelloscomprendensusemntica,esdecir:su significado. 4 Los Lenguajes Naturales son intrnsecamente AMBIGUOS, por lo siguiente: en todo proceso de comunicacinexistenunEMISORyunRECEPTOR.Elemisorpiensaloquequieretransmitir,pero no siempre lo pensado es lo que realmente comunica. El receptor percibe lo comunicado por el emisor y, de lo percibido, hay una comprensin que no necesariamente coincide con lo comunicado por el emisor,y menos aun, con lo que ste pens comunicar. En este proceso interviene mucho el Lenguaje Natural. Ejemplo 23 Hay una llama en la cima de la montaa. La palabra llama se puede referir a un animal o a la existencia de fuego. Su interpretacin depender, fundamentalmente, de la forma en la que la persona lo diga (tono de la voz) y de sus gestos. Por otro lado, un LENGUAJE FORMAL es un conjunto de cadenas formadas con caracteres de un alfabeto dado, y tiene dos caractersticas fundamentales:1)lascadenasqueconstituyenunLenguajeFormalnotienenunasemnticaasociada,solo tienen una sintaxis dada por la ubicacin de los caracteres dentro de cada cadena; 2)un Lenguaje Formal nunca es ambiguo. Ejemplo 24 El Lenguaje Formal {Argentina, Holanda, Brasil} no est formado por los nombres de tres pases (semntica).Soloconsistedetrescadenas,cadaunadelascualestieneloscaracteresqueestn escritos y ubicados tal como se muestra (sintaxis). * Ejercicio 10 * Escriba el alfabeto mnimo a partir del cual se construye el Lenguaje Formal del ejemplo anterior. ContrariamentealoqueocurreconlosLenguajesNaturales,losLENGUAJESFORMALESestn definidosporreglasgramaticalesPREESTABLECIDASysedebenajustarrigurosamenteaellas. En consecuencia, un Lenguaje Formal nunca puede evolucionar. Ejemplo 25 Sea E = {a}, un alfabeto con un solo carcter. Los que siguen son algunos Lenguajes Formales que se pueden construir sobre este alfabeto: L1 = {a};L2 = {aa, aaa};L3 = {c, a, a18}. SSL 1 13 Muchnik Ningunodeestoslenguajespuedeevolucionar,esdecir:nosepuedemodificarmedianteel agregadodenuevascadenasoquitandocadenasyaexistentesenellenguaje.Siassehiciera, obtendramos otros lenguajes. Observecmo,enelEjemplo25,laletraaesutilizadaendoscontextosdiferentes, representando dos entidades distintas. Por un lado, a es un carcter de un alfabeto, mientras que, por otrolado,aesunacadenadeunLenguajeFormal.Enconsecuencia,elcontextoenelquese encuentrauncarcter,debedeterminar,sinambigedades,elsignificadonicodeesesmbolo,ya sea como miembro de un alfabeto o bien como componente de un Lenguaje Formal. * Ejercicio 11* Escriba un Lenguaje Formal con cuatro cadenas de longitud cinco sobre el alfabeto {c, p}. 1.3.1PALABRA Una cadena es vaca o bien est compuesta por una sucesin de uno o ms caracteres que pertenecen a un alfabeto dado, como hemos visto ya en muchos ejemplos. Adems,unacadenapuedeserunmiembrodeunLenguajeFormal,perotambinpuedenoserlo. Por ello, incorporamos una nueva definicin: si unacadena pertenece aun determinadoLenguaje Formal, decimos que la cadena es una PALABRA de ese lenguaje. La pertenencia de una cadena a un Lenguaje Formal le da la propiedad de ser PALABRA de ese lenguaje en particular. Ejemplo 26 Refirindonos al Ejemplo 25, observamos que el lenguaje L1 tiene una sola palabra, a, mientras que el lenguaje L3 tiene tres palabras: c, a, a18. La cadena aa no es una palabra de ninguno de estos dos lenguajes, pero s lo es del lenguaje L2. Ejemplo 27 Sea el siguienteLenguaje Formal descripto por EXTENSIN: L = {101, 1001, 10001, 100001}. Utilizandoeloperador"suprandice",estelenguajepuedeserdescriptoporCOMPRENSIN,en forma ms compacta, as:L = {10n1/ 1 s n s 4}. Entonces, la cadena 1001 (uno-cero-cero-uno) esunapalabradellenguajeL,mientrasque1100(uno-uno-cero-cero)esunacadenaconstruida con caracteres del mismo alfabeto pero no es una palabra de L. Nota 6Un Lenguaje Formal puede ser descripto por extensin, por comprensin, mediante una frase en un Lenguaje Natural (castellano, en nuestro caso) o mediante otras formas especiales que veremos ms adelante. Ejemplo 28 SeaellenguajeLdelEjemploanterior.EsteLenguajeFormalpuedeserdescriptomedianteuna frase en castellano (Lenguaje Natural), de la siguiente manera: L es un lenguaje de cuatro palabras, cada una de las cuales comienza con el carcter 1, termina con otro carcter 1, y en medio tiene una secuencia de uno a cuatro 0s. SSL 1 14 Muchnik Nota 7 Si al describir un Lenguaje Formal no se indica explcitamente sobre qu alfabeto est construido, se considera que el alfabeto est formado por los caracteres que forman las palabras dellenguaje. Por caso: en el Ejemplo 27, el lenguaje L est construido sobre el alfabeto {0, 1}. Si analizamos las tres formas de describir un Lenguaje Formal (por comprensin, por extensin o mediante una frase en Lenguaje Natural), seguramente consideraremos que son ms simples las dos que figuran en el Ejemplo 27. Sin embargo, hay muchos casos en los que la dificultad para describir un Lenguaje Formal con simbologa matemtica es evidente. En estos casos, debemos utilizar una frase en Lenguaje Natural, evitando ambigedades, u otras herramientas que veremos ms adelante. Ejemplo 29 El lenguaje L = {a2ibi / 0 s i s 2} est formado por tres palabras: si i = 0, a2*0b0 = a0b0 (ausencia de aes y ausencia de bes) representa la palabra vaca (c); si i = 1, la palabra es a2*1b1 = aab; y si i = 2, lapalabraesa2*2b2=aaaabb.Enestecaso,obviamenteesmssencillaladescripcinpor extensin que por comprensin. * Ejercicio 12 * Describa por comprensin al siguiente lenguaje:L = {c, b, bb, bbb, bbbb, bbbbb, bbbbbb, bbbbbbb, bbbbbbbb}. * Ejercicio 13 * Describa mediante una frase al lenguaje del ejercicio anterior. Ejemplo 30 Sea el Lenguaje Formal sobre el alfabeto {a, b, c} formado por todas las palabras de longitud 30 que comienzancona,terminanconby,enmedio,tienenexactamentetresces.Unapalabradeeste lenguaje es: a20cbbcacb4. * Ejercicio 14 * Intente describir por comprensin o por extensin el Lenguaje Formal del Ejemplo 30.

1.3.2PROPIEDADES DE LAS PALABRAS DadoqueunaPALABRAesunacadenaqueperteneceaundeterminadoLenguajeFormal,todos los conceptos sobre cadena explicados anteriormente se aplican tambin a las palabras. Por lo tanto, hablaremosde:longituddeunapalabra,palabravaca,concatenacindedosomspalabras, potenciacin de una palabra, con el mismo significado ya visto. Ejemplo 31 Sea el lenguaje L = {(abc)n / 0 s n s 3} = {c, abc, abcabc, abcabcabc}. Entonces: La longitud de la palabra abc es |abc| = 3.La palabra vaca c es un miembro de este lenguaje. Laconcatenacindelaspalabrasabcyabcabcproduceotrapalabradeestelenguaje: abcabcabc. En cambio, la concatenacin de la palabraabcabc consigomisma produce lacadena abcabcabcabc, que no es una palabra de este lenguaje.La potencia (abc)2 es una palabra del lenguaje. SSL 1 15 Muchnik Laconcatenacindedospalabrasproduceunacadenaquenosiempreesunapalabradel lenguaje, como se observa en el ejemplo anterior y en el ejemplo que sigue. Ejemplo 32 SeaellenguajeL={a2n+1/0sns200}.EsteLenguajeFormalestformadopor201palabras, cada una de las cuales tiene un nmero impar de letras a. Si n = 0, la palabra es a; sta es la palabra de menor longitud de L. Si n = 200, la palabra es a401; sta es la palabra de mayor longitud de L. Si se concatenan dos palabras cualesquiera deL, el resultado ser una cadena con una cantidad par deletrasa,yaquelasumadedosnmerosimparesproduceunnmeropar.Enconsecuencia,la concatenacindedospalabrascualesquieradeestelenguajeproduceunacadenaquenuncaesuna palabra de L. * Ejercicio 15 * Describa mediante una frase al lenguaje del Ejemplo 32. * Ejercicio 16 * SeaellenguajeL={a2n/0sns200}.Escriba,porcomprensin,elLenguajeFormalquese obtiene realizando todas las concatenaciones de dos palabras cualesquiera del lenguaje dado. 1.3.3CARDINALIDAD DE UN LENGUAJE FORMAL La cardinalidad de un Lenguaje Formal es la cantidad de palabras que lo componen. Ejemplo 33 L = {a, ab, aab} es un lenguaje de cardinalidad 3 sobre el alfabeto {a, b}. Ejemplo 34 EllenguajeL={c}esunlenguajemuyespecial,puesestformadosoloporlapalabravaca.Su cardinalidad es 1, ya que contiene una palabra. 1.3.4SUBLENGUAJES DadoqueunLenguajeFormalesunconjunto,unSUBLENGUAJEesunsubconjuntodeun Lenguaje Formal dado. Ejemplo 35 Sea L1 = {a, ab, aab}.Entonces,L2 = {ab, aab} es un sublenguaje de L1, mientras que L3 = { } es el sublenguaje vaco de L1. Elsublenguajevaco,habitualmenterepresentadoconelsmbolo,esunsublenguajede cualquier Lenguaje Formal. Nosedebeconfundirelsublenguajevaco,quetienecardinalidad0,conellenguajequesolo contiene la palabra vaca, que tiene cardinalidad 1. SSL 1 16 Muchnik 1.4LENGUAJES FORMALES INFINITOS TodosloslenguajesejemplificadoshastaelmomentohansidoLENGUAJESFORMALES FINITOS,esdecir:lenguajesconunnmerofinitodepalabras.Sinembargo,losLenguajes FormalestambinpuedenserINFINITOS,loquesignificaqueestoslenguajespuedenteneruna cantidadinfinitadepalabras,aunquecadaunadeellasdebeserdelongitudfinita;noexistenlas palabras de longitud infinita. Nota 8 Las propiedades de las palabras que han sido ejemplificadas anteriormente se aplican tambin a los lenguajes infinitos. Ejemplo 36 L={an/n>1}esunLenguajeFormalinfinitoyaquenoexisteunlmitesuperiorparael suprandice n. Cada palabra de este lenguaje est formada por una secuencia de una o ms aes. Por ello, la concatenacin de dos palabras cualesquiera de este lenguaje producir siempre otra palabra del lenguaje L. Por esta propiedad, se dice que este lenguajeL tiene una particularidad especial:es cerrado bajo la concatenacin. Ejemplo 37 EllenguajeL ={abn / n> 0} esotroLenguajeFormalinfinito.Estelenguajeestformadoporla palabraaytodasaquellaspalabrasquecomienzanconunaa,seguidadeunasecuenciadeunao msbes.Estelenguajenoescerradobajolaconcatenacinyaque,porcaso:siconsideramossus dos palabras de menor longitud a y ab y las concatenamos, obtenemos la cadena aab, que no es una palabra de este lenguaje. * Ejercicio 17 * Sea el lenguaje L = {abna / n > 1}.a) Escriba las tres palabras de menor longitud.b) Describa este lenguaje mediante una frase en castellano. 1.4.1LENGUAJE UNIVERSAL SOBRE UN ALFABETO DadounalfabetoE,elLENGUAJEUNIVERSALsobreestealfabetoesunLenguajeFormalinfinito que contiene todas las palabras que se pueden formar con los caracteres del alfabeto E, ms la palabra vaca. Se lo representa con la notacin E*, que se leesigma clausura o sigma estrella. Importante: acabamos de introducir un nuevo operador que representamos con el suprandice*. Esteesunoperadorunario(operasobreunsolooperando),comoloeslapotenciacinen matemticas.SelodenominaclausuradeKleene(sepronunciaklaini)oestrelladeKleene,y ser muy utilizado en los prximos captulos. Una propiedad fundamental del Lenguaje Universal es que es cerrado bajo concatenacin. SSL 1 17 Muchnik Ejemplo 38 Si E = {a, b}, entonces el Lenguaje Universal para este alfabeto est formado por la palabra vaca, todaslaspalabrasquesolotienenaes,todaslaspalabrasquesolotienenbes,ytodaslaspalabras formadas por aes y bes concatenadas en cualquier orden:E* = {c, a, b, aa, ab, ba, bb, aaa, aab, aba, abb, ..., aabaabbbab, }, Afirmacin:LaconcatenacindepalabrasdeE*siempreproduceunapalabradeesteLenguaje Universal sobre el alfabeto {a, b}. * Ejercicio 18 * Puede encontrar un caso en que la afirmacin anterior sea falsa? Justifique su respuesta. Cualquier lenguaje L sobre el alfabeto E es un sublenguaje de E*. Por lo tanto, existen infinitos Lenguajes Formales sobre un alfabeto dado. 1.4.2LENGUAJES FORMALES INFINITOS MS COMPLEJOS Todos los ejemplos vistos hasta ahora se refieren al tipode Lenguaje Formal llamado LENGUAJE REGULAR.PeroexistenotrostiposdeLenguajesFormalesinfinitosqueejemplificamosa continuacin. Ejemplo 39 Los que siguen son ejemplos de tres diferentes tipos de Lenguajes Formales infinitos, ninguno de los cuales es un Lenguaje Regular:L1 = {anbn / n 1}. Las tres palabras de menor longitud de este lenguaje son: ab, aabb y aaabbb. L2={anbncn/n1}.Lastrespalabrasdemenorlongituddeestelenguajeson:abc,aabbccy aaabbbccc. L3 = {an / n es una potencia positiva de 2}. Las tres palabras de menor longitud de este lenguaje son: aa, aaaa y aaaaaaaa. EnelprximocaptuloveremosporquhaydiferentestiposdeLenguajesFormalesyporqulos lenguajes del Ejemplo 39 no son LENGUAJES REGULARES. Ciertos Lenguajes Formales estn relacionados con la sintaxis de los Lenguajes de Programacin. Un Lenguaje de Programacin (LP) tiene palabras reservadas,nombres creados por el programador,constantes enteras y reales, caracteres de puntuacin, operadores aritmticos, operadores lgicos,declaraciones, expresiones, sentencias, etc. Todos estos elementos constituyen diferentes Lenguajes Formales, algunos infinitos y otros finitos. SSL 1 18 Muchnik * Ejercicio 19 * ParaunLPqueconozca,escribadosejemplosdecadaunadelasentidades(palabrasreservadas, expresiones, etc.) mencionadas en el recuadro anterior. Indique si corresponden, segn su criterio, a un Lenguaje Formal finito o a un Lenguaje Formal infinito. Explique su decisin. 1.5IMPLEMENTACIN EN CInvestigue y construya, en LENGUAJE C, la funcin que realiza cada operacin solicitada: * Ejercicio 20 * (a) Calcula la longitud de una cadena;(b) Determina si una cadena dada es vaca. (c) Concatena dos cadenas. * Ejercicio 21 * Construya un programa de testeo para cada funcin del ejercicio anterior. SSL 1 19 Muchnik 2GRAMTICASFORMALESYJERARQUADECHOMSKY UnLENGUAJEFORMAL,seafinitooinfinito,esunconjuntodepalabrasconunaconnotacin sintctica, sin semntica. Existen ciertas estructuras que tienen la habilidad de GENERAR todas las palabrasqueformanunLenguajeFormal.EstasestructurassedenominanGRAMTICAS FORMALES. 2.1GRAMTICA FORMAL UnaGramticaFormales,bsicamente,unconjuntodePRODUCCIONES,esdecir:reglasde reescrituraqueseaplicanparaobtenerlaspalabrasdelLenguajeFormalquelaGramticaFormal en cuestin genera. Una Gramtica Formal genera un determinado Lenguaje Formal, nico. Ejemplo 1 Con una simbologa simple, que ser aclarada posteriormente, podemos representar las producciones deunaGramticaFormalquegeneraellenguajeL={ab,ac}.Estasproduccionessepueden escribir as: S -> abyS -> ac. Para construir las PRODUCCIONES de una Gramtica Formal se requieren tres tipos de smbolos:los smbolos productores, como es S en el Ejemplo 1; los smbolos que forman las palabras del lenguaje generado, como son los caracteres a, b y c en el Ejemplo 1; y ciertos smbolos especiales que llamaremos metasmbolos, como -> en el Ejemplo 1. Ejemplo 2 Sea el lenguaje L = {a}, formado por una sola palabra. Este lenguaje es generado por una Gramtica Formal con una nica produccin: S -> a(se lee S produce a o S es reemplazada por a). La flecha ser llamada OPERADOR DE PRODUCCIN. Sibienenestosdosprimerosejemplosseobservaquecadaproduccingeneraunapalabradel lenguaje, esto no siempre es as. Ejemplo 3 ElLenguajeFormalL={aa,ab}puedesergeneradoporunaGramticaFormalcondos producciones:S -> aayS -> ab.Pero este Lenguaje Formal tambin puede ser generado por la Gramtica Formal con producciones: S -> aT,T -> ayT -> b. Si utilizamos el segundo conjunto de producciones, cmo obtenemos las dos palabras del lenguaje?Comenzamos con la produccin S -> aT (S produce a seguido de T o S produce a concatenado con T) para obtenerelcarcter a con el quecomienzan ambas palabras deesteLenguajeFormal. Luego,siaplicamoslaproduccinT->aobtenemoslapalabraaaysiaplicamosT->b obtenemos la palabra ab. Toda produccin est formada por tres partes: el lado izquierdo, el lado derecho, y el operador de produccin, que significa que el lado izquierdo de la produccin produce o es reemplazado por o equivale ael lado derecho de la misma. SSL 1 20 Muchnik Ejemplo 4 En la produccin S -> aT, el lado izquierdo est constituido por el smbolo S, mientras que su lado derechoestformadoporlaconcatenacindelcarcteraconelsmboloT.Eloperadorde produccin indica que el smbolo S es reemplazado por la secuencia aT. Una Gramtica Formal puede tener, entre sus producciones, una muy particular que se denomina PRODUCCIN-PSILON y que se escribe, por ejemplo:S -> . Esta notacin significa que S es reemplazada por nada o que genera la palabra vaca. Veamos los dos casos. Ejemplo 5 ElLenguajeFormalL={aa,},quecontienealapalabravaca,puedesergeneradoporuna Gramtica Formal con dos producciones:S -> aayS -> . En este caso, la produccin-psilon genera la palabra vaca. Ejemplo 6 Veamos,ahora,elsegundocaso.ElLenguajeFormalL={aa,aab}puedesergeneradoporuna Gramtica Formal con las siguientesproducciones:S -> aaT, T -> y T -> b. * Ejercicio 1 * a) Describa el orden en que se aplican estas producciones para generar las palabras del lenguaje del Ejemplo 6. b) La produccinT -> genera la palabra vaca del lenguaje? 2.1.1DEFINICIN FORMAL DE UNA GRAMTICA FORMAL Toda Gramtica Formal es una 4-upla (VN, VT, P, S), donde: VN es el vocabulario de noterminales; es un conjunto finito de productores. VT es el vocabulario de terminales, caracteres del alfabeto sobre el cual se construyen las palabras del Lenguaje Formal que es generado por la gramtica descripta; tambin es un conjunto finito. P es el conjunto finito de producciones, ySeVNesunnoterminalespecialllamadoaxioma.Eselnoterminalapartirdelcualsiempre deben comenzar a aplicarse las producciones que generan las palabras de un determinado Lenguaje Formal. CuandodecimosunaGramticaFormalgeneraunLenguajeFormalsignificaqueesa gramtica es capaz de generar todas las palabras del Lenguaje Formal, pero que, a su vez, no genera cadenas que estn fuera del lenguaje. Ejemplo 7 RetomamoselEjemplo3,quedescribelasproduccionesdeunagramticaquegeneraellenguaje {aa, ab}.La definicin formal de esta gramtica es la 4-upla:G = ( {S, T}, {a, b}, {S -> aT, T -> a, T -> b}, S ). Dado que el noterminal S es el axioma, la generacin de cualquier palabra del lenguaje mencionado comienza con una produccin que tenga al noterminal S en su lado izquierdo; en este caso, hay una nicaproduccinconestacaracterstica:S->aT.Estanicaproduccinindicaqueelsmbolo inicialSesreemplazado,obligatoriamente,porlasecuenciaaT,porloquetodapalabragenerada SSL 1 21 Muchnik porestagramticadebecomenzarconelcarctera.Todavanosehaobtenidounapalabradel lenguaje,porqueTesunnoterminalysabemosqueunapalabradebeestarformadasolopor caracteresodebeserlapalabravaca.Enconsecuencia,debehaberunaomsproduccionesque tengan al noterminal T en su lado izquierdo, y se debe reemplazar a T por su lado derecho. En este caso,elnoterminalTtienedosproduccionesquerepresentandosopciones:laproduccinT->a significa que el noterminal T es reemplazado por el carcter a, mientras que la produccin T -> b representaqueelnoterminalTesreemplazadoporelcarcterb.Estasdosproduccionesparael noterminal T generan dos procesos diferentes:(1) la aplicacin de las producciones S -> aT y T -> a genera la palabra aa;(2) la aplicacin de las producciones S -> aT y T -> b genera la palabra ab. Ejemplo 8 RealizamosunapequeavariantesobreelEjemplo7.SupongamosunaGramticaFormalconla siguiente definicin: G = ( {S, T}, {a, b}, {S -> aT, T -> a, T -> }, S ). * Ejercicio 2 * Qu Lenguaje Formal genera la gramtica del Ejemplo 8?Justifique. Nota 1AldescribirGramticasFormalesparaaplicacionestericas,comolasqueestamosviendoeneste captulo, es muy comn utilizar las siguientes convenciones: se denomina S al axioma,todo noterminal es representado mediante una letra mayscula, el vocabulario de terminales est formado por letras minsculas y dgitos. Nota 2 Agregamosotroconjuntoque,sibiennofiguraenladefinicinformaldeunaGramticaFormal, serdegranutilidadenaplicacionesqueveremosmsadelante.Nosreferimosalconjuntode METASMBOLOS, que no son terminales ni son noterminales, pero que son smbolos que ayudan a representarlasproduccionesdeunaGramticaFormal.Unodeellosyalohemosvisto:->,el operador de produccin. Ejemplo 9 Sea la definicin formal del Ejemplo 7: G = ( {S, T}, {a, b}, {S -> aT, T -> a, T -> b}, S ). Es habitual describir esta Gramtica Formal mediante la escritura de sus producciones nicamente. De ser as, por convencin se entiende que el noterminal que aparece en el lado izquierdo de la primera produccineselaxiomay,normalmente,selollamaS.Porotrolado,siparaunnoterminaldado existemsdeunaproduccin,seutilizaelmetasmbolobarraverticalparaindicar,esdecir, describirdosomsproduccionesconelmismonoterminalensuladoizquierdo.Entonces,las producciones de esta gramtica se escriben, generalmente, de la siguiente manera: S -> aT T -> a | bEsta GramticaFormal est formada por tres producciones.Los metasmbolos->y | colaboran en la escritura de estas producciones en forma ms compacta. SSL 1 22 Muchnik * Ejercicio 3 * Sea la Gramtica Formal con producciones: S -> aT | bQ T -> a | b Q -> a | a) La gramtica con estas seis producciones genera la cadena bab?Justifique. b) Cul es el Lenguaje Formal generado por esta gramtica?Justifique. 2.2LA JERARQUA DE CHOMSKY En1956y1959,ellingistanorteamericanoNoamChomskypublicdostrabajossobrelos Lenguajes Naturales que, aplicados al rea de los Lenguajes Formales, produjeron lo que se conoce como "Jerarqua de Chomsky". Esta Jerarqua de Chomsky establece una clasificacin de cuatro tipos de Gramtica Formales que, a su vez, generan cuatro tipos diferentes de Lenguajes Formales. Las Gramticas Formales se clasifican segn las restricciones que se imponen a sus producciones, y la Jerarqua de Chomsky establece estos cuatro niveles: Gramticas Regulares o Gramticas Tipo 3 Gramticas Independientes del Contexto o Gramticas Tipo 2 Gramticas Sensibles al Contexto o Gramticas Tipo 1 Gramticas Irrestrictas o Gramticas Tipo 0 Por otro lado, estos cuatro tipos de gramticas generan los siguientes tipos de Lenguajes Formales: Gramtica FormalLenguaje FormalGramtica RegularLenguaje Regular Gramtica Independiente del ContextoLenguaje Independiente del Contexto Gramtica Sensible al ContextoLenguaje Sensible al Contexto Gramtica IrrestrictaLenguaje Irrestricto Acontinuacin,analizamoslasdiferenciasqueexistenentreloscuatrotiposdeGramticas Formales. 2.2.1 GRAMTICA REGULAR (GR) Sus producciones tienen las siguientes restricciones: el lado izquierdo debe tener un solo noterminal,el lado derecho debe estar formado por: a)un solo terminal, ob)un terminal seguido por un noterminal,c)o psilon.SSL 1 23 Muchnik Ejemplo 10 Sea la gramtica G = ( {S, X}, {a, b}, {S -> aX, X -> b}, S ).Lasproduccionesdeestagramticacumplenconlasrestriccionesmencionadasarriba.Analcelas. Por lo tanto, esta Gramtica Formal es una GR. Tambin es vlida una GR en la que se invierte el orden en el lado derecho de aquellas producciones que tienen dos smbolos. Por lo tanto, una segunda definicin para las GRs sera: Una Gramtica Formal es una GR si sus producciones tienen las siguientes restricciones: el lado izquierdo debe tener un solo noterminal,el lado derecho debe estar formado por:a)un solo terminal, o b)b)un noterminal seguido de un terminal, oc)psilon. Ejemplo 11 La Gramtica Formal( {S, X}, {a, b}, {S -> Xa, X -> b}, S ) es una GR porque cumple con las restricciones de esta segunda definicin. Engeneral:seanvyvnoterminalesyseatunterminal.Entonces,lasproduccionesdeunaGR pueden tener estos formatos: 1) v -> t,2) v -> tvy3) v -> o 1) v -> t,2) v -> vty3) v -> Sinembargo,debemostenercuidadoconlamezcladeambasdefinicionesporquelaGramtica Formalresultante no ser una GR. Ejemplo 12 Sea G = ( {S, X}, {a, b}, {S -> Xa, S -> bX, X -> b}, S ). Esta Gramtica Formal no es una GR porque el noterminal S produce noterminal terminal y tambin produce terminal noterminal. * Ejercicio 4 * a) Escriba las producciones de una GR que genere el Lenguaje RegularL = {anb / 1 n 3}. b) Escriba la definicin formal de la GR desarrollada en el punto anterior. * Ejercicio 5 * a) Escriba las producciones de una GR que genere el Lenguaje RegularL = {anbn / 0 n 2}. b) Escriba la definicin formal de la GR desarrollada en el punto anterior. 2.2.1.1 GRAMTICA REGULAR QUE GENERA UN LENGUAJE REGULAR INFINITO Las GRs que hemos visto anteriormentegeneranLenguajes Regulares (LRs) finitos. Pero las GRs, aun teniendo un nmero finito de producciones, pueden generar LRs infinitos. Para ello existen las llamadas PRODUCCIONES RECURSIVAS: producciones en las que el noterminal que figura en el lado izquierdo tambin figura en el lado derecho. Ejemplo 13 La produccinT -> aTes una produccin recursiva. SSL 1 24 Muchnik Ejemplo 14 Sea el Lenguaje Formal infinito L = {anb / n 1}. Construyamos las producciones de una GR que genere este lenguaje: 1 S -> aS 2 S -> aT 3 T -> b Habitualmente, estas producciones se escriben en forma ms compacta de la siguiente manera: S -> aS | aT T -> b Anlisis:Laproduccin(1)generatantasaescomosenecesitenporserunaproduccinrecursiva, aunquenoesobligatorioqueestaproduccinsiempreseaelegidayaqueelaxiomaStienedos producciones. La produccin (2) termina la recursividad y produce una ltimaa, o bien produce la nica a si la produccin (1) no es utilizada. La produccin (3) finaliza la generacin de una palabra, reemplazando el noterminal T que est en el lado derecho de la produccin (2) por el carcter b con el que debe terminar toda palabra del LR que genera esta gramtica. * Ejercicio 6 * Indique cul es la mnima palabra del LR del Ejemplo 14 y muestre cmo la genera. * Ejercicio 7 * Escriba la sucesin de producciones que aplicara para generar la palabraaaab del LR definido en el Ejemplo 14. 2.2.1.2 GRAMTICA QUASIREGULAR (GQR) EstasgramticasestnmuyvinculadasalasintaxisdelosLenguajesdeProgramacin,como veremosenelprximocaptulo.SongramticassimilaresaunaGR,perodondeunconjuntode terminalesesreemplazadoporunnoterminalenunaovariasproducciones.UnaGQRabreviala escritura de una GR y siempre puede ser re-escrita como una GR. Ejemplo 15 Sea la gramtica con las siguientes producciones: S -> N | NS N -> a | b | c EstagramticaesunaGQR,porquelasdosproduccionesdelnoterminalSnocorrespondenala definicin de una GR pero s responden a la definicin dada en el prrafo anterior. El noterminal N genera los terminales a, b y c; por lo tanto, N representa al conjunto {a, b, c}. Ejemplo 16 Re-escribamoslasproduccionesdelaGQRdelejemploanteriorcomoproduccionesdeunaGR. Paraello,debemosreemplazaralnoterminalNporcadaunodelosterminalesquerepresenta. Resultan, entonces, las siguientes producciones: S -> a | b | c | aS | bS | cSComoseobserva,laGQRtienecincoproducciones,mientrasquelaGRequivalentetieneseis producciones.SSL 1 25 Muchnik Dos Gramticas Formales son EQUIVALENTES si generan el MISMO Lenguaje Formal. Ejemplo 17 Las gramticas de los ejemplos 15 y 16 son equivalentes. * Ejercicio 8 * a) Escriba una GR que genere cualquier secuencia de uno o ms dgitos decimales. b) Escriba una GQR que genere cualquier secuencia de uno o ms dgitos decimales. c) Compare la cantidad de producciones de ambas gramticas. * Ejercicio 9 * EscribalasproduccionesdeunaGQRquegenereunLRinfinitocuyaspalabrassonsecuenciasde tres o ms dgitos octales (en base 8). * Ejercicio 10 * TransformelasproduccionesdelaGQRobtenidaenelEjercicio9enproduccionesdeunaGR equivalente. 2.2.2 GRAMTICA INDEPENDIENTE DEL CONTEXTO (GIC) A diferencia de las GRs,las GICsno tienen restricciones con respecto a la forma del lado derecho de sus producciones, aunque s se requiere que el lado izquierdo de cada produccin siga siendo un nico noterminal. El origen de la formalizacin de las GICs se encuentra en Chomsky [1956]: "Threemodelsforthedescriptionoflanguage".[HopcroftyUllman, IntroductiontoAutomataTheory,LanguagesandComputation,1979, Addison-Wesley] Ejemplo 18 Supongamos que a una GR le agregamos la produccin S -> ba.Esta nueva produccin posee dos terminales en su lado derecho y, como ya hemos visto, este no es un formato vlido para una GR. La nueva Gramtica Formal es una GIC. Engeneral:seanvyvnoterminalesyseatunterminal.EntonceslasproduccionesdeunaGIC corresponden a este formato general: v -> (v + t)*, donde v y v pueden representar el mismo noterminal La expresin (v + t)* (recuerden el operador estrella del captulo anterior) representa y cualquier secuencia de noterminales y/o terminales. SSL 1 26 Muchnik Ejemplo 19 Teniendoencuentalaconvencinmencionadaantes(letramaysculaparanoterminales,yletras minsculas o dgitos para terminales), he aqu una serie de producciones correctas para las GICs: A -> produccin-psilonB -> alado derecho con un terminal C -> ab2c5lado derecho con cinco terminales D -> ZXZlado derecho con tres noterminales E -> aEZbRghlado derecho con cuatro terminales y tres noterminales * Ejercicio 11 * a) Una GR es siempre una GIC? Justifique. b) Una GIC es siempre una GR? Justifique. 2.2.2.1 GIC QUE GENERA UN LENGUAJE INFINITO LasGICspuedengenerarLenguajesIndependientesdelContexto(LICs)infinitosutilizando PRODUCCIONES RECURSIVAS. Ejemplo 20 La GIC con producciones: S -> aSb | a genera unLIC infinito; la primera produccin esrecursivay la segunda produccin debe utilizarse para terminar la recursividad. * Ejercicio 12 * a) Cul es la mnima palabra generada por la GIC del ejemplo anterior?Justifique. b) Cul es la palabra que le sigue en longitud?Justifique. * Ejercicio 13 * Describa, por comprensin, el LIC generado por la GIC del Ejemplo 20. * Ejercicio 14 * Sea el lenguaje L9 = {anbn+1 / n 0}. Escriba las producciones de una GIC que genere L9. * Ejercicio 15 * Sea el lenguaje L10 = {a2nbn+1ar / n 1, r 0}. Escriba la definicin formal de una GIC que genere el lenguaje L10. Por las restricciones establecidas sobre los dos tipos de Gramticas Formales vistas hasta ahora, la GR y la GIC, es fcil notar que toda GR tambin es una GIC; la inversa no es cierta. * Ejercicio 16 * Demuestre que una GQR es un caso particular de una GIC. Lafraseindependientedelcontextoreflejaque,comoelladoizquierdodecadaproduccinsolo puedecontenerunniconoterminal,todaproduccindeunaGICpuedeaplicarsesinimportarel contexto donde se encuentre dicho noterminal. SSL 1 27 Muchnik Estas GICs son de gran utilidad en la representacin de la sintaxis de los Lenguajes de Programacin; ampliaremos ms adelante. 2.2.3 GRAMTICA IRRESTRICTA Estas son las Gramticas Formales ms amplias. Sus producciones tienen la forma general: -> , donde tanto como pueden ser secuencias de noterminales y/o terminales, con . Ejemplo 21[de Hopcroft & Ullman, 1979] La que sigue es una Gramtica Irrestricta que genera el lenguaje{ai / i es una potencia positiva de 2}: G = ( {S, A, B, C, D, E}, {a}, {S -> ACaB, Ca -> aaC, CB -> DB, CB -> E,aD -> Da, AD -> AC, aE -> Ea, AE -> }, S ) * Ejercicio 17 * Compruebe que la gramtica escrita en el Ejemplo 21 puede generar la palabra aaaa. Indique, paso a paso, cada produccin que aplica y explique porqu utiliza la produccin elegida. 2.2.4 GRAMTICA SENSIBLE AL CONTEXTO (GSC) Una GSC es una Gramtica Irrestricta, con la siguiente restriccin en las longitudes: || ||. Ejemplo 22 LaGramticaFormaldelEjemplo21noesunaGSCporquetienedosproduccionesqueviolanla restriccin impuesta sobre las longitudes: CB -> E y AE -> . Cada tipo de Gramtica Formal genera un tipo de Lenguaje Formal cuyo nombre deriva del nombre de la correspondiente gramtica, comoya hemos visto anteriormente. En este libro nos interesarn, fundamentalmente:lasGICs,lasGQRs,losLenguajesRegulares(LRs)ylosLenguajes Independientes del Contexto (LICs). 2.3EL PROCESO DE DERIVACIN La derivacin es el proceso que permite obtener cada una de las palabras de un Lenguaje Formal a partirdelaxiomadeunaGramticaFormalquelogenera,yaplicando,sucesivamente,las produccionesconvenientesdeesagramtica.Elmismoprocesotambinpermitedescubrirsiuna cadena dada no es una palabra del lenguaje. SSL 1 28 Muchnik Existen diferentes formas de representar una derivacin:1) en forma horizontal, utilizando el smbolo => para relacionar un paso de la derivacin con el paso siguiente;2) en forma vertical, reemplazando, en cada paso, un noterminal por su lado derecho para producir una nueva lnea de esta derivacin;3) en forma de rbol, donde el axioma de la gramtica es la raz del rbol.En esta seccin solo utilizaremos la derivacin vertical, aplicndola a GQRs y a GICs. Ampliamos,entonces,loindicadoparalaDERIVACINVERTICAL.Estaderivacinproducir unatablaconunasolacolumnay,eventualmente,unasegundacolumnaconcomentarios.Enla primera lneaestar siempre el axioma de lagramtica utilizada.Las lneas sucesivas se obtendrn reemplazandounsolonoterminal,delologradohastaelmomento,porelladoderechodela produccin ms conveniente. Ejemplo 23 Sea la GIC con producciones S -> aSbyS -> ab. Esta GIC genera el lenguaje {anbn / n 1}. UnadelaspalabrasdeesteLICesaaabbb.Verifiquemosestasituacinmedianteunaderivacin vertical: Derivacin VerticalComentario Saplicamos la primera produccin y obtenemos: aSbaplicamos, nuevamente, la primera produccin y obtenemos: aaSbbaplicamos la segunda produccin y obtenemos: aaabbb Ejemplo 24 En cambio, la cadena aaabb no es una palabra del LIC generado en el Ejemplo23 y, por lo tanto, no la podremos derivar. Comprobemos esta situacin: Derivacin VerticalComentario Saplicamos la primera produccin y obtenemos: aSbaplicamos, nuevamente, la primera produccin y obtenemos: aaSbbno tenemos forma de obtener la tercera a sola, por qu? ?? Porlotanto,nopodemosderivaraaabby,enconsecuencia,stanoesunapalabradelLIC generado por la GIC dada. * Ejercicio 18 * (a)DadalaGICdelEjemplo23,determine,aplicandounaderivacinvertical,silacadena aaabbbb es una palabra del LIC generado por esta GIC. (b) Investigue y dibuje la misma derivacin, pero en forma de rbol. Antes de proseguir con este tema, introducimos una definicin que facilitar la descripcin de lo que sigue. Denominaremos CADENA DE DERIVACIN a la cadena de terminales y noterminales que se forma en cada paso de la derivacin vertical, antes de obtener la palabra (si existe). SSL 1 29 Muchnik Ejemplo 25 En la derivaciones de los ejemplo 23 y 24, las dos cadenas de derivacin son: aSb y aaSbb. EnelEjemplo23,laGICtieneunsolonoterminalenelladoderechodeunaproduccin.Enel prximo captulo veremos gramticas que tienen ms de un noterminal en el lado derecho de una o ms producciones. Por ello, definiremos dos tipos de derivaciones verticales: DERIVACINVERTICALAIZQUIERDA:encadapasodeladerivacinsereemplazael noterminal que se encuentra primero (de izquierda a derecha) en la cadena de derivacin. DERIVACINVERTICALADERECHA:encadapasodeladerivacinsereemplazael noterminal que se encuentra primero (de derecha a izquierda) en la cadena de derivacin. Ejemplo 26 Sea la GIC con producciones: 1 S -> ST2 S -> ab 3 T -> aaT4 T -> b Una derivacin vertical a izquierda producira la siguiente tabla para obtener la palabra abaabaab: Derivacin Vertical a Izquierda Comentario SSe aplica la produccin (1) STSe aplica la produccin (1) STTSe aplica la produccin (2) abTTSe aplica la produccin (3) abaaTTSe aplica la produccin (4) abaabTSe aplica la produccin (3) abaabaaTSe aplica la produccin (4) abaabaab Una derivacin vertical a derecha producira la siguiente tabla para obtener la misma palabra: Derivacin Vertical a Derecha Comentario SSe aplica la produccin (1) STSe aplica la produccin (3) SaaTSe aplica la produccin (4) SaabSe aplica la produccin (1) STaabSe aplica la produccin (3) SaaTaabSe aplica la produccin (4) SaabaabSe aplica la produccin (2) abaabaab Si una palabra se puede obtener mediante una derivacin vertical a izquierda, entonces tambin se puede obtener mediante una derivacin vertical a derecha. SSL 1 30 Muchnik Siunacadenadederivacintienemsdeunnoterminal,laprximacadenadederivacinse obtienereemplazandounNICOnoterminalenlacadenadederivacinanterior,talcomose observa en ambas tablas del Ejemplo 26. Nunca se pueden reemplazar dos o ms noterminales en un solo paso. * Ejercicio 19 * Sea el LIC infinito L = {anbcnb / n 1}. Escriba la Definicin Formal de una GIC que genere este Lenguaje Formal. * Ejercicio 20 * DadalaGICconstruidaenelejercicioanterior,utilicederivacinverticalaizquierdapara determinar si las siguientes cadenas son o no palabras del LIC generado:a)aaabcccb b)aabbccb c)aaabcccbb d)aaccb 2.4INTRODUCCIN A LAS GQRs, LAS GICs Y LOS LENGUAJES DE PROGRAMACIN TantolasGQRscomolasGICssondegranutilidadenlarepresentacindelasintaxisdelos Lenguajes de Programacin. Si bien este es un tema que desarrollaremos en el prximo captulo, he aqu unos ejemplos para introducirlo: Ejemplo 27 Supongamos que un Lenguaje de Programacin tiene nombres de variables que deben comenzar con unaletraminsculaentreayd,quepuedeestarseguidaporletrasenestemismointervaloypor dgitos entre 2 y 6. El lenguaje de estos nombres es un LR infinito que puede ser generado por una GQR con estas producciones: S -> L | SL | SD L -> a | b | c | d D -> 2 | 3 | 4 | 5 | 6 * Ejercicio 21 * EscribaunaGRequivalentealaGQRdelejemploanterior.Culesmssencillaparaserleda? Justifique su respuesta. * Ejercicio 22 * Dada la GQR del Ejemplo 27, determine si las siguientes cadenas son nombres vlidos: ab23 2a3b Verifquelo aplicando: a) derivacin a izquierda y b) derivacin a derecha. SSL 1 31 Muchnik Ejemplo 28 Supongamos un Lenguaje de Programacin en el que sus expresiones aritmticas estn formadas por los nmeros enteros 2 y 6, el operador de suma y siempre terminan con un punto y coma. Algunas expresiones aritmticas de este Lenguaje de Programacin son: 6; 2+2+6; VamosaconstruirunaGICquegenerelatotalidaddeestasexpresionesaritmticas.Paraello, debemosdefinirelvocabulariodenoterminales,elvocabulariodeterminales,elaxiomayel conjunto de producciones. Supongamos que el vocabulario de noterminales est formado por: S (el axioma),E(deexpresin)yT(detrmino).Losterminalesson2,6,+y;(puntoycoma).Las producciones de la GIC que genera el lenguaje de estas expresiones aritmticas son:S -> E; E -> T | E+T T -> 2 | 6 * Ejercicio 23 * a) Determine, aplicando derivacin a izquierda, si 6; es una expresin correcta. b) Determine, aplicando derivacin a izquierda, si 6+6+6+; es una expresin correcta. c) Determine, aplicando derivacin a derecha, si 6+6+6+; es una expresin correcta. d) Determine, aplicando derivacin a izquierda, si 6+6+6+2; es una expresin correcta. SSL 1 32 Muchnik SSL 1 33 Muchnik 3SINTAXIS Y BNF Un Lenguaje de Programacin (LP) es una notacin utilizada para describir algoritmos y estructuras de datos que resuelven problemas computacionales. EnestecaptulonosocuparemosdelaSINTAXISdelosLenguajesdeProgramacinycmose describe la misma. Desde el punto de vista sintctico, hay una relacin muy importante entre los LPs ylosLenguajesFormalesyaqueunLPestformado,bsicamente,porunconjuntodeLRsyun conjunto de LICs, como veremos en este captulo. Ladescripcinprecisadeestasintaxisserealiza,normalmente,enbaseanotacionesquetienen ciertaspropiedadessimilaresalasdelasGramticasFormalesqueestamosutilizando.Aestas notaciones las llamaremos, genricamente, BNF. 3.1INTRODUCCIN A LA SINTAXIS Como ya se ha dicho, sintcticamente un LP est compuesto por un conjunto de LRs y otro conjunto deLICs.LasCATEGORASLXICASoTOKENS(palabraeninglsmuyutilizada)-comoson losidentificadores,losnmerosenteros,losnmerosreales,loscaracteres,lascadenasconstantes, losoperadoresyloscaracteresdepuntuacin-constituyendiferentesLRs.Algunosdeestos lenguajessonfinitos,comolosoperadores,yotrossoninfinitos,comosucedeconlos identificadores y los nmeros (tanto enteros como reales). Porotrolado,lasexpresionesylassentenciasdeunLPson,engeneral,LICs.Losllamaremos CATEGORASSINTCTICAS.Comotales,estoslenguajesnopuedensergeneradosporGRsni por GQRs como s ocurre con los LRs sino que requieren ser generados por GICs. Es importante recordar que todos estos tipos de gramticas se caracterizan porque sus producciones tienen un nico noterminal en el lado izquierdo. Enestareadeestudionotenemosencuentalasrestriccionesfsicasqueimponenlas computadoras (cantidad de bytes para almacenar un nmero real, cantidad mxima de caracteres en unalneadelmonitor,etc.).Poresopodemoshablardelenguajesinfinitoscuyoselementostienen longitudes indeterminadas aunque finitas, como ocurre con los Lenguajes Formales. UnaGramticaFormalnosoloGENERAunLenguajeFormal,sinoquetambinselapuede utilizarparaDESCRIBIRlasintaxisdellenguajequegenera.Esteconceptoestmuyrelacionado con el desarrollo de este captulo. La sintaxis de unLP debe describirse con precisin, utilizandouna notacin sin ambigedades.La gramticacumpleconesterequisito,perotienemuypocosmetasmbolos;estodificulta,muchas veces, la escritura y posterior comprensin de la sintaxis definida. Porello,lanotacinqueseutilizaparadescribirlasintaxisdeunLPeslaBNF,queensus comienzoseramuysimilaraproduccionesdeunaGICodeunaGQRyqueluegosefue extendiendo con nuevos metasmbolos. SSL 1 34 Muchnik HopcroftyUllman[1979]dicen:ElorigendelaformalizacindelasGICsse encuentra enChomsky [1956, "Threemodels for the description of language"]. La notacin relacionada llamada BNF fue usada para describir el lenguaje ALGOL en Backus[1959,"Thesyntaxandsemanticsoftheproposedinternationalalgebraic languageoftheZurichACM-GAMMconference"]yNaur[1960,"Reportonthe algorithmic language ALGOL 60"]. La relacinentre GIC y BNF fuepercibida en Ginsburg y Rice [1962, "Two families of languages related to ALGOL"]. Comenzaremos con dos secciones introductorias en las que trabajaremos con Gramticas Formales y luegopasaremosaverlautilizacindeBNFenladescripcindelasintaxisdeunLenguajede Programacin. De esta manera, percibiremos claramente la evolucin de la notacin BNF. 3.2IDENTIFICADORES Y SU SINTAXIS ElelementomsutilizadoentodoLPeselIDENTIFICADOR:unasecuenciadeunoomscaracteresquenombradiferentesentidadesdeunLP(variables,funciones,procedimientos, constantes,tipos,etc.).LosidentificadoresconstituyenunLRinfinito.Habitualmente,las PALABRASRESERVADAS,quetambinestncompuestasporunasecuenciadecaracteres, forman un LR finito, independiente de los identificadores. Ejemplo 1 ComoescribeDavidWattensulibroProgrammingLanguageSyntaxandSemantics[1991]:"La siguienteeslaespecificacininformaldelasintaxisdeidentificadores,parafraseadadeunmanual deunviejolenguajedeprogramacin:Unidentificadoresunasecuenciadeletrasmaysculas, posiblementeconlainclusindeguionesbajosenmedio."Apartirdeestaespecificacinen lenguajenatural,esevidentequePI,CANTIDADyC_TOTALsonidentificadorescorrectos. Tambin es muy claro que PI34, 78AA y CANTIDAD___ no son identificadores vlidos. * Ejercicio 1 * Verifique que la afirmacin escrita en el ltimo prrafo del Ejemplo 1 es correcta para cada una de las cadenas descriptas. Pero,sinosatenemosaladefinicindadaenelEjemplo1,puedensurgirpreguntascomolas siguientes:(1) Es una nica letra,comoX, un identificador vlido? (la especificacin dice"una secuencia de letras");(2) La frase "guiones bajos en medio" significa que puede haber varios consecutivos (la frase est en plural) o que deben estar separados? * Ejercicio 2 * EnbasealaespecificacindadaenelEjemplo1,puederesponderconseguridadalaspreguntas formuladas en el prrafo anterior? * Ejercicio 3 * Se le ocurre alguna otra ambigedad en la especificacin informal que estamos analizando? Estasimprecisionesoambigedadessoncasiinevitablesenunaespecificacininformaldeuna sintaxis, como la que se realiza, habitualmente, utilizando un lenguaje natural.SSL 1 35 Muchnik Ahorabien;supongamosque,paraqueresultemsclaro,usamosunaGICparadescribirestos identificadores,peroconunapequeamodificacinrespectodelovistoenelCaptulo2:los noterminalessernrepresentadospornombressignificativos(porejemplo,Nombre),enlugarde unasolaletramayscula.Comosiempre,yporconvencin,elaxioma,queesloqueestamos definiendo, aparece en la primera produccin. Entonces, una definicin precisa de los identificadores del LP mencionado en el Ejemplo 1 podra ser la siguiente: Ejemplo 2 Identificador -> Letra | Identificador Letra | Identificador GuinBajo Letra GuinBajo -> _ Letra -> A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z Anlisis:Recordemosquetodaproduccintieneunladoizquierdo,elmetasmbolooperadorde producciny un lado derecho. Recordemos, tambin, que en la escritura de las producciones solo existennoterminales,terminalesymetasmbolos.Enestecaso,losnoterminalessonpalabraso frasessignificativas(sinespacios),losnicosmetasmbolossonloscaracteres->y|,ylos terminales son los restantes caracteres.Es muy importante recordar que todo noterminal debe aparecer en el lado izquierdo de, al menos, una produccin; por otro lado, un terminal jams puede aparecer en el lado izquierdo deunaproduccin.Estaubicacinenelcontextodelasproduccionestambinfacilitasaber cul es un noterminal y cul es un terminal, aunque ambos tengan el mismo nombre. SenotafcilmentequeIdentificadordebeserelaxiomaporqueesloqueestamosdefiniendo. Observequelaprimeraproduccinnosdicequeunidentificadorpuedesersolounaletra(por ejemplo,X),mientrasquelasotrasdosproduccionessonrecursivas(porqueIdentificadoraparece enambosladosdelaproduccin)y,porlotanto,permitengeneraridentificadoresdecualquier longitud. Por supuesto, la primera produccin debe ser utilizada para terminar el proceso recursivo. Adems, se observa que la ltima produccin no permite que haya dos guiones bajos consecutivos. En otras palabras: el lenguaje de los identificadores descripto en el Ejemplo 1 est perfectamente definidomedianteestaGIC.Estoes:siunacadenaesunidentificadordeesteLP,lapodremos derivar a partir del axioma Identificador; caso contrario, no la podremos derivar. Nota 1OBSERVACIN IMPORTANTE. Esta GIC produce un Identificador de derecha a izquierda por el formatoquetienenlasproduccionesrecursivas.Esteformatosedenominarecursivaaizquierda porque el noterminal del lado izquierdo aparece, tambin, como primer smbolo del lado derecho. * Ejercicio 4 * Construya una tabla de derivacin para generar el identificador R_X_A. * Ejercicio 5 * Verifique,mediantederivacin,queA__B(haydosguionesbajosconsecutivos)noesun identificador vlido para el LP que estamos analizando.SSL 1 36 Muchnik * Ejercicio 6 * Convierta la GIC del Ejemplo 2 en una GQR y compare sta con la GIC utilizada.. ElIdentificadorquehemosdefinidoenelEjemplo2medianteunaGICrecursivaaizquierda tambinpuedeserdefinidomedianteunaGICrecursivaaderecha,aunquesusproducciones resultarn ms complejas: Ejemplo 3 Identificador -> Letra | Letra Resto Resto -> Letra Resto | GuinBajo Letra Resto | GuinBajo -> _ Letra -> A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z * Ejercicio 7 * Construya una tabla de derivacin para generar el identificador R_X_A a partir de la gramtica del Ejemplo 3. * Ejercicio 8 * Verifique mediante derivacin, utilizando la GIC del Ejemplo 3, que A__B (hay dos guiones bajos consecutivos) no es un identificador vlido para el LP que estamos analizando. 3.3LAS EXPRESIONES Y LA SINTAXIS UnodelospuntosmsimportantesenlasintaxisdeunLPestrepresentadoporlas EXPRESIONES que se pueden escribir en ese LP. Una GIC para expresiones no solo debe producir todas las expresiones vlidas, sino que tambin debe preocuparse por la precedencia (o prioridad) y laasociatividad(evaluacindeizquierdaaderechaodederechaaizquierdaparaoperadorescon igual precedencia) de cada uno de los operadores existentes en ese LP. Para comenzar, desarrollaremos una GIC que genera las expresiones aritmticas con multiplicacin ysumacomonicosoperadores.EstaGICtambinreconoceelusodeparntesis,empleado especialmente para modificar las prioridades, como, por ejemplo, (2+34)*5. Losoperandos,parasimplificarlasituacin,sonsolonmerosenterossinsigno;adems, asumiremos que ya estn definidas las producciones para el noterminal Nmero. Entonces, en esta GIC los terminales son los caracteres + (suma), * (multiplicacin) y los parntesis; elnoterminalNmerorepresentarcualquiernmeroenterononegativoqueactuarcomo operando. Porlotanto,unaGICparalasexpresionesaritmticasconestasrestriccionessedescribeenel siguiente ejemplo: SSL 1 37 Muchnik Ejemplo 4 Expresin -> Trmino | Expresin + Trmino Trmino -> Factor | Trmino * Factor Factor -> Nmero |( Expresin ) * Ejercicio 9 * Complete la GIC del Ejemplo 4, desarrollando las producciones para el noterminal Nmero. Representacin de las Prioridades de los Operadores en una GIC: Cunto ms cerca del axioma,menoreslaprioridaddeunoperador.Vealoquesucedeconlasuma,lamultiplicaciny los parntesis (si stos fueran un operador) en la GIC diseada en el Ejemplo 4. Esta GIC respeta la prioridad y la asociatividad de los operadores que intervienen. Veamos un ejemplo de derivacin con esta GIC para analizar esta situacin: Ejemplo 5 Sealaexpresin1+2*(3+4)+5.Leyndoladeizquierdaaderecha,observamosqueprimero debemosresolverlasubexpresinqueestentreparntesis;luegopodremosrealizarla multiplicaciny,acontinuacin,seguiradelanteconlaevaluacin.Apliquemoselprocesode derivacin a izquierda. Recordemos las producciones de la GIC: 1 Expresin -> Trmino |2Expresin + Trmino 3 Trmino -> Factor |4Trmino * Factor 5 Factor -> Nmero |6 ( Expresin ) 7 Nmero -> 1 | 2 | 3 | 4 | 5 (agregado para completar el proceso de derivacin) Entonces, el proceso de derivacin ser: Expresin Expresin + Trmino Expresin + Trmino + Trmino Trmino + Trmino + Trmino Factor + Trmino + Trmino Nmero + Trmino + Trmino 1 + Trmino + Trmino 1 + Trmino * Factor + Trmino 1 + Factor * Factor + Trmino 1 + Nmero * Factor + Trmino 1 + 2 * Factor + Trmino 1 + 2 * ( Expresin ) + Trmino 1 + 2 * ( Expresin + Trmino ) + Trmino 1 + 2 * ( Trmino + Trmino ) + Trmino 1 + 2 * ( Factor + Trmino ) + Trmino 1 + 2 * ( Nmero + Trmino ) + Trmino 1 + 2 * ( 3 + Trmino ) + Trmino 1 + 2 * ( 3 + Factor ) + Trmino 1 + 2 * ( 3 + Nmero ) + Trmino SSL 1 38 Muchnik 1 + 2 * ( 3 + 4 ) + Trmino 1 + 2 * ( 3 + 4 ) + Factor 1 + 2 * ( 3 + 4 ) + Nmero 1 + 2 * ( 3 + 4 ) + 5 Recordatorio:lasecuenciadeterminalesynoterminalesqueseobtieneencadapasodeuna derivacin se denomina CADENA DE DERIVACIN. Ejemplo 6 En el proceso de derivacin anterior,1+2*(Nmero+Trmino)+Trminoes una de las cadenas de derivacin. * Ejercicio 10 * Cul es la menor expresin que se puede derivar desde la GIC definida en el Ejemplo 4 y re-escrita en el Ejemplo 5?Escrbala y justifique su respuesta. * Ejercicio 11 * Es((2))unaexpresinvlida?Demuestrequesoquenoporderivacin.Paracadacadenade derivacin obtenida, indique la produccin que fue aplicada. * Ejercicio 12 * Intente derivar 1+2++3. 3.3.1LA EVALUACIN DE UNA EXPRESIN, PRECEDENCIA Y ASOCIATIVIDAD La EVALUACIN de una expresin se realiza comoun proceso inversoal de la derivacin, hasta llegaralaxioma.Enotraspalabras:debemoshacerunaREDUCCINdelatablageneradaporla derivacin.Esaqudondesevesilaprecedenciaoprioridaddelosoperadoresestcorrectamente determinada por la gramtica diseada. Estareduccindebehacerseenelordeninversoaladerivacin;esdecir:elltimopasodela derivacin ser el primero de la reduccin, y as sucesivamente. Para ello, debe tenerse en cuenta la produccinaplicadaencadapasodeladerivacin.Enelprximoejemplore-escribiremosla derivacinrealizadaenelEjemplo5,peroindicandolaproduccinaplicadaencadapaso.Luego, haremos la evaluacin de la expresin mediante el proceso de reduccin. Ejemplo 7 Repetimos la derivacin para la expresin 1+2*(3+4)+5. Aplicamos el proceso visto en el Ejemplo 5 a partir de la GIC con producciones 1 Expresin -> Trmino |2Expresin + Trmino 3 Trmino -> Factor |4Trmino * Factor 5 Factor -> Nmero |6 ( Expresin ) 7 Nmero -> 1 | 2 | 3 | 4 | 5 y construimos la siguiente TABLA DE DERIVACIN: SSL 1 39 Muchnik PRODUCCIN APLICADA CADENA DE DERIVACIN OBTENIDA (axioma)Expresin 2Expresin + Trmino 2Expresin + Trmino + Trmino 1Trmino + Trmino + Trmino 3Factor + Trmino + Trmino 5 Nmero + Trmino + Trmino 71 + Trmino + Trmino 41 + Trmino * Factor + Trmino 31 + Factor * Factor + Trmino 51 + Nmero * Factor + Trmino 71 + 2 * Factor + Trmino 61 + 2 * ( Expresin ) + Trmino 21 + 2 * ( Expresin + Trmino ) + Trmino 11 + 2 * ( Trmino + Trmino ) + Trmino 31 + 2 * ( Factor + Trmino ) + Trmino 51 + 2 * ( Nmero + Trmino ) + Trmino 71 + 2 * ( 3 + Trmino ) + Trmino 31 + 2 * ( 3 + Factor ) + Trmino 51 + 2 * ( 3 + Nmero ) + Trmino 71 + 2 * ( 3 + 4 ) + Trmino 31 + 2 * ( 3 + 4 ) + Factor 51 + 2 * ( 3 + 4 ) + Nmero 71 + 2 * ( 3 + 4 ) + 5 Ahora,evaluaremosestaexpresin.Paraello,comoyaadelantamos,aplicaremoselprocesode reduccin,queeselprocesoinversoaldederivacin:partimosdelasecuenciadeterminalesque forman la expresin y finalizamos cuando llegamos al axioma de la GIC. ConstruiremosunatablaquellamaremosTABLADEEVALUACIN.Comovernenlatabla, juntoacadanoterminalseagregaelnmero(terminal)delcualproviene,paratenerlopresenteal realizar la correspondiente evaluacin. La Tabla de Evaluacin es la siguiente: CADENA DE DERIVACIN A REDUCIRPRODUCCIN A APLICAR OPERACIN 1 + 2 * ( 3 + 4 ) + 57 1 + 2 * ( 3 + 4 ) + Nmero55 1 + 2 * ( 3 + 4 ) + Factor53 1 + 2 * ( 3 + 4 ) + Trmino57 1 + 2 * ( 3 + Nmero4 ) + Trmino55 1 + 2 * ( 3 + Factor4 ) + Trmino53 1 + 2 * ( 3 + Trmino4 ) + Trmino57 1 + 2 * ( Nmero3 + Trmino4 ) + Trmino55 1 + 2 * ( Factor3 + Trmino4 ) + Trmino53 1 + 2 * ( Trmino3 + Trmino4 ) + Trmino51 1 + 2 * ( Expresin3 + Trmino4 ) + Trmino523 + 4 = 7 1 + 2 * ( Expresin7 ) + Trmino56 1 + 2 * Factor7 + Trmino57 1 + Nmero2 * Factor7 + Trmino55 1 + Factor2 * Factor7 + Trmino53 1 + Trmino2 * Factor7 + Trmino542 * 7 = 14 1 + Trmino14 + Trmino57 Nmero1 + Trmino14 + Trmino55SSL 1 40 Muchnik Factor1 + Trmino14 + Trmino53 Trmino1 + Trmino14 + Trmino51 Expresin1 + Trmino14 + Trmino521 + 14 = 15 (*) Expresin15 + Trmino5215 + 5 = 20 Expresin20(axioma)Resultado Final (*)Aquseveunejemplomuyclarode"queslaASOCIATIVIDAD".Eloperando14sepuede sumar al operando 1 (a su izquierda) o al operando 5 (a su derecha). Como la suma es asociativa a izquierda, el 14 se suma al 1 y no al 5. Engeneral:cuandohaytresoperandosvinculadosconoperadoresdeigualprecedencia(comoen estecaso),eloperandocentraloperarprimeroconeloperandodelaizquierdasilaoperacines asociativa a izquierda (como sucede aqu); pero si la operacin es asociativa a derecha, el operando centraloperarprimeroconeloperandodeladerecha.Unejemplodeestaltimasituacinlo veremos ms adelante, cuando analicemos el BNF del lenguaje ANSI C. Adems, en la Tabla de Evaluacin se ve claramente cmo la GIC determina la PRECEDENCIA de los operadores: la expresin entre parntesis es evaluada primero, luego evala la multiplicaciny, finalmente, las sumas. Nota 2 ParaconstruirunaTabladeEvaluacinesindispensablepartirdelacorrespondienteTablade Derivacin y proceder en orden inverso (reduccin). * Ejercicio 13 * Siguiendo el modelo presentado en el Ejemplo 7, construya una Tabla de Evaluacin que muestre la evaluacin de la expresin:(1 + 2) * (3 + 4) Ejemplo 8 ParaterminardecomprendertotalmentelaGICparaexpresionesutilizadaenlosejemplosy ejerciciosanteriores,analicemoselsiguientecaso.Supongamosqueconsideramosquenoes necesario que haya tantos niveles de noterminales (expresin, trmino, factor, nmero) para una GIC que"solo"generaexpresionesaritmticasconlosoperadoresdesumaydemultiplicacin. Diseamos, entonces, una GICms simple que solo tiene dos noterminales:E (por expresin)yN (por nmero). Esta GIC tiene las siguientes producciones: 1 E -> E + E |2E * E |3(E) | 4N 5 N -> 1 | 2 | 3 | 4 | 5 * Ejercicio 14 * Describa formalmente la GIC del Ejemplo 8. Ejemplo 9 ReplicaremoselEjemplo7,peroahorautilizandolanuevaGICcuyasproduccionesfiguranenel Ejemplo 8.Sea,nuevamente,laexpresin1+2*(3+4)+5.Aplicamoselprocesodederivacinaizquierday construimos la siguiente Tabla de Derivacin: SSL 1 41 Muchnik PRODUCCIN APLICADA CADENA DE DERIVACIN OBTENIDA (axioma)E 2E * E 1E + E * E 1E + E * E + E 3E + E * (E) + E 1E + E * (E + E) + E 4N + E * (E + E) + E 51 + E * (E + E) + E 41 + N * (E + E) + E 51 + 2 * (E + E) + E 41 + 2 * (N + E) + E 51 + 2 * (3 + E) + E 41 + 2 * (3 + N) + E 51 + 2 * (3 + 4) + E 41 + 2 * (3 + 4) + N 51 + 2 * (3 + 4) + 5 Como se ve, no solo hemos podido derivar la expresin dada sino que, adems, lo hemos realizado en menor cantidad de pasos que utilizando la GIC del Ejemplo 7. Parecera que esta GIC es mejor que la anterior! Siguiendoelejemploanterior,evaluaremosestaexpresinaplicandoelprocesodereduccin. Nuevamente,juntoalnoterminalcolocaremoselnmero(terminal)quelecorresponde,conesta notacin: noterminal.terminal. Ejemplo 10 Obtenemos, entonces, la siguiente Tabla de Evaluacin: CADENA DE DERIVACIN A REDUCIRPRODUCCIN A APLICAR OPERACIN 1 + 2 * (3 + 4) + 551 + 2 * (3 + 4) + N.54 1 + 2 * (3 + 4) + E.55 1 + 2 * (3 + N.4) + E.54 1 + 2 * (3 + E.4) + E.55 1 + 2 * (N.3 + E.4) + E.54 1 + 2 * (E.3 + E.4) + E.55 1 + N.2 * (E.3 + E.4) + E.54 1 + E.2 * (E.3 + E.4) + E.55 N.1 + E.2 * (E.3 + E.4) + E.54 E.1 + E.2 * (E.3 + E.4) + E.513 + 4 = 7 E.1 + E.2 * (E.7) + E.53 E.1 + E.2 * E.7 + E.517 + 5 = 12 E.1 + E.2 * E.1211 + 2 = 3 E.3 * E.1223 * 12 = 36 E.36(axioma)Resultado Final Como se observa, el resultado final es incorrecto, y esto se debe a que la segunda gramtica est mal diseada porque no resuelve correctamente el problema de precedencia de los operadores. SSL 1 42 Muchnik * Ejercicio 15 * Utilizando la GIC cuyas producciones estn en el Ejemplo 8, obtenga otra Tabla de Derivacin para la expresin del Ejemplo 9. Luego, construya la Tabla de Evaluacin correspondiente. Cules son sus conclusiones? * Ejercicio 16 * Puede hacer lo mismo que hizo en el ejercicio anterior, pero con la GIC del Ejemplo 7?Justifique su respuesta. 3.4BNFYALGOL La sigla BNF corresponde a la frase Backus Normal Form (Forma Normal de Backus) o tambin a la frase Backus-Naur Form (Forma de Backus y Naur). Con el breve Manual de Referencia del lenguajeALGOL(ALGOrithmicLanguage)sepublic,porprimeravezen1960,unadescripcin formal de la sintaxis de un LP. Esta descripcin, similar a las producciones de las GICs, se llamara luego BNF. La notacin BNF consiste en un conjunto de REGLAS que definen, con precisin, la sintaxis de los componentesydelasestructurasdeunLPdado,comohemoshechoenseccionesanteriores,pero utilizandoGICs.Pero,comoveremosenelrestodeestecaptulo,BNFhaevolucionado incorporandonuevosmetasmbolos;enestoradicaunadiferenciafundamentalentreBNFyuna Gramtica Formal. Volviendo al origen de BNF, la diferencia entre la notacin utilizada para describir las producciones deunaGICylausadapararepresentarlasreglasBNFeramnima:elmetasmbolooperadorde produccincomenzarepresentarsecomo::=(alquepodramosllamaroperadorES)ylos nombres de los noterminales fueron encerrados entre corchetes angulares. Ejemplo 11 Algunos elementos bsicos del lenguaje ALGOL pueden ser enumerados de esta forma: ::= | | | Estas cuatro reglas BNF se pueden leer de esta forma: un smbolo bsico es una letra o un dgito o un valor lgico o un delimitador. Cada regla BNF se forma con elementos provenientes de tres conjuntos disjuntos: metavariablesonoterminales,quesonpalabrasofrasesencerradasentrecorchetesangulares (ejemplo: , ). terminales,quesonloscaracteresdelalfabetoopalabrasdellenguajesobreloscualesse construye el LP descripto. Se los llama terminales porque no existen reglas de produccin para ellos(ejemplo: una palabra reservada es un terminal). metasmbolos,quesoncaracteresogruposdecaracteresqueayudanarepresentarestasreglas (ejemplo: , ::=, |). SSL 1 43 Muchnik En toda regla BNF, encontramos, al igual que en toda produccin de una GIC, tres componentes: (1) el lado izquierdo, formado por un solo noterminal (2) el lado derecho, formado por terminales y noterminales o, eventualmente, vaco (3) un metasmbolo, el operador es, que vincula el lado izquierdo con el lado derecho. Ejemplo 12 ::= que se lee: un Smbolo Bsico es una Letra. * Ejercicio 17 * Si el lado derecho de una regla BNF es vaco, qu significa?Justifique su respuesta. Los tres metasmbolos que aparecen en las reglas del Ejemplo 11 y en la BNF general del lenguaje ALGOL son:(1) < y > (para encerrar una palabra o frase que es el nombre de un noterminal);(2)::= (que se lee es o corresponde a),y(3) | (que se lee ).Estos son los nicos metasmbolos que formaban parte de la definicin original de BNF. 3.4.1DOS EJEMPLOS DE BNF EN ALGOL EnALGOL60,unidentificadordebacomenzarconunaletray,sitenamscaracteres,stos podanserletrasydgitosdecimales.LacategoralxicaIdentificadorenALGOL60constituye un LR infinito. Ejemplo 13 Esta es la definicin BNF de un identificador en ALGOL 60: ::= | | ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |p | q | r | s | t | u | v | w | x | y | z | A | B | C | D |E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S |T | U | V | W | X | Y | Z ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Anlisis: El conjunto de tres reglas para , con dos reglas recursivas a izquierda, equivale a una GQR. Elconjuntodereglasparaselee:letraescualquierletraminsculaomaysculadel alfabeto ingls.El conjunto de reglas para se lee: dgito es cualquier dgito decimal (base 10). Nota 3 y definen dos LRs finitos, mientras que define un LR infinito. En cuanto al LR infinito de los nmeros enteros, veamos cmo se define en ALGOL. SSL 1 44 Muchnik Ejemplo 14 ::= |+ |- ::= | ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Anlisis: Las tres reglas de definen al nmero entero sin signo y con signo. Elnoterminal,pormediodeunareglarecursivaaizquierdayotrade terminacindelarecursividad,defineunasucesindeunoomsdgitosdecimales.En consecuencia,unnmeroenteroes:(a)unasucesindedgitos,o(b)unasucesindedgitos precedida por el signo positivo, o (c) una sucesin de dgitos precedida por el signo negativo. * Ejercicio 18 * Deriveelnmeroentero-123456.Sidesea,puedeabreviarelnombredelosnoterminales explicando qu significa cada abreviatura utilizada. AcontinuacinveremoscmofuedescriptoellenguajePascalporsucreador,NiklausWirth,yla primera ampliacin del conjunto de metasmbolos en BNF. 3.5BNF Y EL LENGUAJE PASCAL Independientemente de la notacin que utilicemos y del LP descripto, las BNFs estn formadas por: Seguidamente,veremosunaextensinquerealizNiklausWirthalanotacinBNFutilizadapara describirlasintaxisdelALGOL.Porello,apartirdeestaextensinydeotrasqueanalizaremos luego,lasiglaBNFfuecambiadaporladeEBNF(BNFextendida).Noobstante,muchosautores siguen utilizando la sigla BNF tambin para las BNFs extendidas; nosotros haremos lo mismo. 3.5.1LA SINTAXIS DEL LENGUAJE PASCAL, SEGN WIRTH EnellibroPascalUserManualandReport(1974),escritoporNiklausWirthcreadordeeste lenguajeyKathleenJensen,sedescribenconprecisinlasintaxisylasemnticadellenguaje Pascal. En esta seccin nos ocuparemos de su descripcin sintctica. EnlaIntroduccindellibromencionado,Wirthdice:Unaformulacindelasintaxisesla tradicionalBNF,enlaquelosconstructossintcticos[categoraslxicasycategorassintcticas] 1) un conjunto de NOTERMINALES 2) un conjunto de TERMINALES 3) un conjunto de METASMBOLOS 4) un conjunto de PRODUCCIONES SSL 1 45 Muchnik son denotados por palabras en ingls [en castellano, en nuestro caso] encerradas entre los corchetes angulares < y >. Por otro lado, al conjunto de metasmbolosyaexistente en ALGOL, Wirth agrega un metasmbolo muy importante y lo describe as: Las llaves { y } denotan la posible repeticin de los smbolos que encierra,cero o ms veces. Es unaforma mscompacta de describir una secuencia de elementos, como veremos en prximos ejemplos. EstemetasmboloeslaprimeraextensinqueserealizsobrelaBNFutilizadaenALGOL:alos tresmetasmbolosyaexistentesenALGOL,Wirthagregelmetasmboloindicadoporunparde llaves para representar lo que conocemos como el operador clausura de Kleene, es decir: cero o ms veces lo que est encerrado entre las llaves. A partir de sta y de otras extensiones posteriores es que algunos autores utilizan la sigla EBNF para referirse a una BNF extendida. Pero, como ya se mencion, nosotros seguiremos utilizando la sigla BNF,independientementedelasextensionesqueseagreguenydeloscaracteresutilizadospara representar a los metasmbolos. Veamos, a continuacin, algunos ejemplos de la BNF que utiliza Wirth para describir la sintaxis del lenguaje Pascal en su Manual de Referencia original. Ejemplo 15 La definicin de identificador en el Pascal original y con esta BNF extendida es: ::= { } ::= | ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |p | q | r | s | t | u | v | w | x | y | z | A | B | C | D |E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S |T | U | V | W | X | Y | Z ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 * Ejercicio 19 * (a) Interprete, mediante una frase, la regla . (b) Convierta la regla a la notacin utilizada en ALGOL. (c) Cul notacin le parece ms conveniente? Ejemplo 16 LadefinicindelaconstanterealsinsignoenelPascaloriginalyconestaBNFextendidaesla siguiente: ::= . | . E | E ::= { } ::= | ::= + | - ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 SSL 1 46 Muchnik Anlisis:Comosepuedeapreciar,estasproduccionesdefinenconprecisintantoalasconstantesrealesen punto fijo como a las constantes reales en punto flotante; para stas ltimas utiliza la letra E. Como se puede apreciar tambin, el Pascal original tiene una nica forma de escribir las constantes reales en punto fijo y tiene dos formas de escribir las constantes reales en punto flotante. * Ejercicio 20 * (a) Escriba el conjunto de terminales utilizados en la BNF del Ejemplo 16. (b) Escriba el conjunto de metasmbolos utilizados en la BNF del Ejemplo 16. (c) Escriba ejemplos de todos los casos de descriptos por la BNF del Ejemplo 16. Ejemplo 17 El constructo es definido por Wirth de esta manera: ::= . ::= program ( {, } ) ; ::= ::= ::= | const { ; } ::= = ::= ::= | var { ; } ::= { , } : ::= ::= begin { ; } end ::= | ::= | | ::= := ::= | . . . ::= ::= . . . * Ejercicio 21 * Preguntas referidas a la BNF descripta en el Ejemplo 17: (a)Cmo se representan las palabras reservadas en esta BNF? (b)Cuntos elementos forman el conjunto de terminales y cules son? (c)Qu significa? (d)Cuntas reglas tiene el noterminal ? (contina en la pgina siguiente) SSL 1 47 Muchnik (e)DeacuerdoaestaBNF,existeenPascallasentenciacompuestavaca?Justifiquesu respuesta. (f) Cuntas variables se pueden declarar para un determinado? * Ejercicio 22 * Escriba dos ejemplos de . 3.5.2 EXPRESIONES EN PASCAL AcontinuacindefiniremosunsubconjuntodelasexpresionesenPascal.Analizaremoslas prioridades de los operadores en este LP y tambin veremos cmo la BNF no se ocupa de los tipos de los datos. ::= | ::= = | | < | | >= ::= | | ::= + | - | or ::= | ::= * | / | and ::= | | ( ) | not . . . Precedencia de los operadores EnellibrodeWirthselee:Eloperadornot(aplicadoaunoperandoBooleano)tienelamxima prioridad.Lesiguenlosoperadoresmultiplicativos,luegolosoperadoresaditivosylosde mnima prioridad son los operadores relacionales. Como ya hemos dicho, observe que, en la BNF, los operadores van apareciendo en orden inverso a sus prioridades: los operadores relacionales son los que estn ms cerca del axioma (expresin, enestecaso);acontinuacinaparecenlosoperadoresaditivos,luegolosoperadores multiplicativos y, finalmente, el operador not (el de mxima prioridad). Unacuriosidadadestacaresqueoperadoresaritmticosyciertooperadorlgicoaparecenenel mismo nivel de prioridades, como se observa en dos de las reglas BNF. * Ejercicio 23 * Escriba los operadores aritmticos y el operador lgico que aparecen en el mismo nivel. OtracuriosidaddelLenguajedeProgramacinPascalsurgeensucomparacinconellenguaje matemtico.Sienmatemticasescribimoslaexpresinlgicaa>24yb ) (A > ) (A > ) (A > ) (A > 24) (A > 24) and (A > 24) and () (A > 24) and ( ) (A > 24) and ( ) (A > 24) and ( ) (A > 24) and ( ) (A > 24) and (B ) (A > 24) and (B < ) (A > 24) and (B < ) (A > 24) and (B < ) (A > 24) and (B < ) (A > 24) and (B < 5) * Ejercicio 24 * Encuentre otro proceso de derivacin a izquierda para la misma expresin lgica. Ejemplo 19 Analicemos otra derivacin que utiliza solo el operador or: A A or A or A or A or B La expresin obtenida es sintcticamente correcta porque la pudimos derivar de la BNF oficial del lenguaje Pascal. Sin embargo, esta expresin solo tiene sentido si ambas variables son Booleanas. SSL 1 49 Muchnik Ejemplo 20 Dos situaciones peores que la anterior: . . . A or A or A or 12 y not not 436 * Ejercicio 25 * Las dos derivaciones del Ejemplo 20, producen expresiones sintcticamente correctas en Pascal?Justifique su respuesta. Qu podra hacer para mejorar esta situacin? 3.5.3SENTENCIAS CON CONDICIONES BOOLEANAS LasdescripcionesenBNFnosiempresonexactasdesdeelpuntodevistadelprogramador.Yalo hemosvistoenlosejemplos19y20.EstasfallasdelBNFrequierenelagregadodeuna RESTRICCIN en Lenguaje Natural que brinde mxima precisin a la situacin descripta. Veamosqusucedeconladescripcindesentenciascomowhileeif.EnelManualdeReferencia original de Pascal, Wirth las describe de esta manera: ::= if then | if then else ::= while do Comoobservamos,tantoparalasentenciaifcomoparalasentenciawhilelacondicinest representada mediante , aunque sabemos que no puede ser una expresin cualquiera.. Ejemplo 21 De acuerdo a las definiciones escritas en BNF, una sentencia como while 2+3 do a := 5sera una sentenciasintcticamentecorrectayaque2+3esunavlida.Sinembargo,sabemos que la condicin de un while en Pascal debe ser una expresin BOOLEANA. Conclusinimportante:Enalgunoscasos,nosolosedebeconocerladefinicinenBNFdel constructo, sino tambin las RESTRICCIONES que aparecen escritas en lenguaje natural. En el caso dellibrodeWirth,algunasdeestasdefinicionesenBNFtienenaclaracionesenlasseccionesdel libro donde se trata el correspondiente constructo. En el caso de la , por ejemplo, luegodesudefinicinenBNFseaclaraquedebeserdetipoBoolean;esta restriccinestanimportantecomolamismadefinicinBNFy,porello,nopuedenserutilizadas separadamente.SSL 1 50 Muchnik * Ejercicio 26 * Modifique la escritura de la BNF para if y para while de tal forma que no requieran una aclaracin en lenguaje natural. 3.6BNF Y EL ANSI C ElLenguajedeProgramacinCfuedesarrolladoentre1969y1972porDennisRitchie,conel objetivo principal de implementar el sistema operativo UNIX en un lenguaje de alto nivel. Amediadosdeladcadadelos80,elANSI(AmericanNationalStandardsInstitute)comenza desarrollar una estandarizacin de este LP. En diciembre de 1989, esta estandarizacin fue aprobada ysepublicen1990como"AmericanNationalStandardforInformationSystemsProgramming Language C"; lo llamaremos Manual de Referencia Oficial del ANSI C [MROC]. A partir de ese momento, este LP es conocido como ANSI C, aunque en la actualidad ya se utilizan C y ANSI C como sinnimos. En esta seccin se describe y se analiza la sintaxis de unsubconjunto del ANSI C, de acuerdo a su definicin oficial. Tengamos en cuenta, entonces, cmo es el BNF que utiliza el MROC: 1Losnoterminales(categoraslxicasysintcticas)estnescritosenitlica,eliminndoselos metasmbolos < y >.2 El operador es est representado por : (dos puntos). Como dice elMROC, un : despus de un noterminal introduce su definicin. 3Noexisteelmetasmbolo|(),sinoquecadaladoderechodeundeterminadonoterminalse escribe en una lnea separada. 4Enalgunoscasosseusaelmetasmbolounodepararepresentarvariosladosderechosqueson caracteres para un noterminal; es cuando un noterminal representa un conjunto de caracteres.5 Los terminales se escriben en negritas. 6 Un smbolo opcional est indicado con un subndice op. 7ElladoderechodeunareglarecursivaserepresentacomoenelBNForiginal;noutilizael metasmbolo incorporado por Wirth para indicar una secuencia de 0 o ms veces. Ejemplo 22 Un token o categora lxica se define se esta manera, con cada lado derecho en una lnea separada: token: palabraReservada identificador constante literalCadena operador carcterPuntuacin Con el solo fin de escribir estas definiciones en forma ms compacta, en algunos casos ampliaremos el uso del metasmbolo uno de, emplendolo as:SSL 1 51 Muchnik Ejemplo 23 La definicin del Ejemplo 22 la podemos escribir en forma ms compacta de esta manera: token: uno de palabraReservadaidentificadorconstanteliteralCadenaoperadorcarcterPuntuacin * Ejercicio 27 * El Ejemplo 23 define LRs o LICs?Si son LRs, indique cules son finitos y cules son infinitos. Si son LICs, justifique su afirmacin. Ejemplo 24 Con respecto al uso de un smbolo opcional, el MROC, presenta el siguiente ejemplo:{ expresinop } que indica una expresin opcional encerrada entre llaves; esto es: { expresinop }equivale a:{ expresin }{ } A continuacin veremos un ejemplo de un programa simple pero completo en ANSI C, que ser utilizado luego como referencia. Las lneas del programa sern numeradas al solo efecto de facilitar su identificacin cuando nos referimos a ellas en las diversas explicaciones; esta numeracin nunca forma parte de un programa en ANSI C. 3.6.1UN PROGRAMA EN ANSI C Ejemplo 25 1/* Programa en ANSI C J.Muchnik feb'2010 */ 2#include 3int Mayor (int, int); 4int main (void) { /* comienza main */ 5 int n1, n2, max; 6 printf ("Ingrese dos nmeros enteros: "); 7 scanf ("%d %d", &n1, &n2); 8 max = Mayor (n1, n2); 9 printf ("El mayor entre %d y %d es %d\n", n1, n2, max); 10 return 0; 11} /* fin main */ 12int Mayor (int a, int b) { /* comienza Mayor */ 13 if (a > b) 14return a; 15 else 16return b; 17} /* fin Mayor */ Anlisis: Este programa en ANSI C est compuesto por: Linea 1: un comentario (no forma parte del lenguaje ANSI C; es analizado por el preprocesador) Linea 2: una directiva al preprocesador (no forma parte del lenguaje ANSI C) Linea 3: el prototipo de la funcin Mayor (es la declaracin de esta funcin) Lineas 4 a 11: la definicin de la funcin main, funcin principal de todo programa ANSI C Lineas 12 a 17: la definicin de la funcin Mayor, que es utilizada por la