VOLUMEN_1 sintaxis

download VOLUMEN_1 sintaxis

of 104

Transcript of VOLUMEN_1 sintaxis

  • 5/26/2018 VOLUMEN_1 sintaxis

    1/104

    SSL 1

    Desde sus Usuarios

    Jorge D. Muchnik, 2010

  • 5/26/2018 VOLUMEN_1 sintaxis

    2/104

    SSL 1 2 Muchnik

    El libro Sintaxis y Semntica de los Lenguajes est

    formado por tres volmenes:

    Vol. 1Desde sus Usuarios (programadores y otros)

    Vol.2Desde el Compilador

    Vol.3Algoritmos

    Este libro cubre todos los objetivos y los contenidos de laasignatura con el mismo nombre.

    Agradezco a los profesores que integran la ctedra Sintaxisy Semntica de los Lenguajes, que siempre han apoyadomi gestin y han colaborado de distintas maneras para queeste libro sea una realidad.

    Por orden alfabtico, los profesores de esta ctedra son:Adamoli, AdrianaBarca, RicardoBruno, OscarDazBott, Ana MaraFerrari, MartaOrtega, SilvinaSola,Jos Maria.

    Jorge D. Muchnik, Titular

    febrero 2010

  • 5/26/2018 VOLUMEN_1 sintaxis

    3/104

    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 . . . . . . . . . . . . . 161.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 . . . . . . . . . . . . . . . . . . . . . 22

    2.2.1 GRAMTICA REGULAR (GR) . . . . . . . . . . . . . . . . . . . . 22

    2.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 . . . . . . . . . . . . . 26

    2.2.3 GRAMTICA IRRESTRICTA . . . . . . . . . . . . . . . . . . . . . 27

    2.2.4 GRAMTICA SENSIBLE AL CONTEXTO (GSC) . . . . . . . . . . . . . 27

    2.3 EL PROCESO DE DERIVACIN . . . . . . . . . . . . . . . . . . . . 27

    2.4 INTRODUCCIN A LAS GQRs, LAS GICs Y LOS LENGUAJES DE PROGRAMACIN 30

    3 SINTAXIS Y BNF . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    3.1 INTRODUCCIN A LA SINTAXIS . . . . . . . . . . . . . . . . . . . 33

    3.2 IDENTIFICADORES Y SU SINTAXIS . . . . . . . . . . . . . . . . . . 34

    3.3 LAS EXPRESIONES Y LA SINTAXIS . . . . . . . . . . . . . . . . . . 36

    3.3.1 LA EVALUACIN DE UNA EXPRESIN, PRECEDENCIA Y ASOCIATIVIDAD . . 38

    3.4 BNF Y ALGOL . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    3.4.1 DOS EJEMPLOS DE BNF EN ALGOL . . . . . . . . . . . . . . . . . 43

    3.5 BNF Y EL LENGUAJE PASCAL . . . . . . . . . . . . . . . . . . . . 44

    3.5.1 LA SINTAXIS DEL LENGUAJE PASCAL, SEGN WIRTH . . . . . . . . . 44

    3.5.2 EXPRESIONES EN PASCAL . . . . . . . . . . . . . . . . . . . . . 47

    3.5.3 SENTENCIAS CON CONDICIONES BOOLEANAS . . . . . . . . . . . . . 49

  • 5/26/2018 VOLUMEN_1 sintaxis

    4/104

    SSL 1 4 Muchnik

    3.6 BNF Y EL ANSI C . . . . . . . . . . . . . . . . . . . . . . . . . 50

    3.6.1 UN PROGRAMA EN ANSI C . . . . . . . . . . . . . . . . . . . . . 51

    3.6.2 SINTAXIS DE UN SUBCONJUNTO DE ANSI C . . . . . . . . . . . . . 53

    3.6.2.1 LAS CATEGORAS LXICAS . . . . . . . . . . . . . . . . . . . 53

    3.6.2.1.1 LAS PALABRAS RESERVADAS . . . . . . . . . . . . . . . . . . 55

    3.6.2.1.2 LOS IDENTIFICADORES . . . . . . . . . . . . . . . . . . . . 55

    3.6.2.1.3 LAS CONSTANTES . . . . . . . . . . . . . . . . . . . . . . 553.6.2.1.4 LOS OPERADORES Y LOS CARACTERES DE PUNTUACIN . . . . . . . 58

    3.6.2.2 LAS CATEGORAS GRAMATICALES . . . . . . . . . . . . . . . . . 58

    3.6.2.2.1 LAS EXPRESIONES . . . . . . . . . . . . . . . . . . . . . . 58

    3.6.2.2.2 DECLARACIONES Y DEFINICIONES . . . . . . . . . . . . . . . 63

    3.6.2.2.3 SENTENCIAS . . . . . . . . . . . . . . . . . . . . . . . . 64

    3.7 OTROS USOS DE BNF . . . . . . . . . . . . . . . . . . . . . . . . 66

    4 SEMNTICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    4.1 DEFINICIN DE UN LENGUAJE DE PROGRAMACIN . . . . . . . . . . . . 67

    4.2 EL ANSI C Y SU SEMNTICA . . . . . . . . . . . . . . . . . . . . 674.2.1 IDENTIFICADOR . . . . . . . . . . . . . . . . . . . . . . . . . 68

    4.2.2 SEMNTICA DE LAS CONSTANTES . . . . . . . . . . . . . . . . . . 68

    4.2.2.1 CONSTANTES ENTERAS . . . . . . . . . . . . . . . . . . . . . 68

    4.2.2.2 CONSTANTES REALES . . . . . . . . . . . . . . . . . . . . . . 69

    4.2.2.3 CONSTANTES CARCTER . . . . . . . . . . . . . . . . . . . . . 70

    4.2.2.4 LITERAL CADENA . . . . . . . . . . . . . . . . . . . . . . . 70

    4.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 . . . . . . . . . 734.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 . . . . . . . . . . . . . . . . . . . . . . . . . 86

    5.4.2 LA UNIN DE LENGUAJES REGULARES . . . . . . . . . . . . . . . . 86

    5.4.3 LA CONCATENACIN DE LENGUAJES REGULARES . . . . . . . . . . . . 87

    5.4.4 LA CLAUSURA DE KLEENE DE UN LENGUAJE REGULAR . . . . . . . . . 87

    5.4.5 LA CLAUSURA POSITIVA DE UN LENGUAJE REGULAR . . . . . . . . . . 88

  • 5/26/2018 VOLUMEN_1 sintaxis

    5/104

    SSL 1 5 Muchnik

    5.4.6 EL COMPLEMENTO DE UN LENGUAJE REGULAR . . . . . . . . . . . . . 88

    5.4.7 LA INTERSECCIN DE DOS LENGUAJES REGULARES . . . . . . . . . . 89

    5.5 EXPRESIONES REGULARES Y LENGUAJES DE PROGRAMACIN . . . . . . . . 89

    5.6 EXPRESIONES REGULARES EXTENDIDAS . . . . . . . . . . . . . . . . 92

    5.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 . . . . . 955.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

  • 5/26/2018 VOLUMEN_1 sintaxis

    6/104

    SSL 1 6 Muchnik

  • 5/26/2018 VOLUMEN_1 sintaxis

    7/104

    SSL 1 7 Muchnik

    1 DEFINICIONES BSICAS E INTRODUCCIN ALENGUAJES FORMALES

    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 laanalizar 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 smbolosque forman un programa sintcticamente correcto. Como esta SINTAXIS est basada en losLENGUAJES FORMALES, debemos comenzar con este concepto.

    Los LENGUAJES FORMALES estn formados por PALABRAS, las palabras son CADENAS y lascadenas estn constituidas por CARACTERES de un ALFABETO. Esta frase involucra cincotrminos (lenguaje formal, palabra, cadena, carcter y alfabeto) que son fundamentales en estecampo. A continuacin los analizamos detenidamente.

    1.1 CARACTERES y ALFABETOS

    Un CARCTER (tambin llamado SMBOLO) es el elemento constructivo bsico. Es la entidadfundamental, indivisible, a partir de la cual se forman los alfabetos.

    Un ALFABETO es un conjunto finito de caracteres. Se lo identifica, habitualmente, con la letragriega (sigma), y con sus caracteres se construyen las cadenas de caracteres de un LenguajeFormal.

    Ejemplo 1

    La letra aes un carcter o smbolo que forma parte del alfabeto espaol, del alfabeto ingls, etc.

    Ejemplo 2Los caracteres >, = y + son elementos del alfabeto de los operadores de muchos Lenguajes deProgramacin.

    Ejemplo 3

    El alfabeto = {0, 1} proporciona los caracteres utilizados en la construccin de los nmerosbinarios.

    Un carcter de un alfabeto tambinpuede ser mltiple.

  • 5/26/2018 VOLUMEN_1 sintaxis

    8/104

    SSL 1 8 Muchnik

    Ejemplo 4El alfabeto = {ab, cde} est integrado por dos caracteres: el carcter ab y el carcter cde.

    * Ejercicio 1 *Escriba el alfabeto que se requiere para construir el conjunto de los nmeros enteros con signo en

    base 10.

    1.2 CADENAS

    Una CADENA, forma abreviada de la frase cadena de caracteres, es una secuencia finita decaracteres tomados de cierto alfabeto y colocados uno a continuacin de otro. Es decir: una cadenase construye CONCATENANDO caracteres de un alfabeto dado.

    Como sinnimo de cadenase usa, a veces, el trmino inglsstring.

    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

    aes una cadena formada por un solo smbolo de cualquier alfabeto que contenga el carcter a.

    Para los conocedores del Lenguaje de Programacin C: recuerden la diferencia que existe entreay a. Es la misma diferencia que existe entre un carcter de un alfabeto y una cadena compuestapor ese nico carcter.

    * Ejercicio 2 *Dado el alfabeto {0, 1, 2},construya dos cadenas en la que cada uno de estos caracteres aparezcauna sola vez.

    * Ejercicio 3 *Dado el alfabeto {ab, cde}, construya una cadena que tenga cuatro caracteres

    1.2.1 LONGITUD 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 abaces: |abac| = 4.

    Ejemplo 9

    La longitud de la cadena bes: |b| = 1.

  • 5/26/2018 VOLUMEN_1 sintaxis

    9/104

    SSL 1 9 Muchnik

    1.2.2 CADENA VACA

    La CADENA VACA, que se simboliza habitualmente con la letra griega (psilon), es la cadenaque no tiene caracteres. En otras palabras: la cadena vacaes la cadena de longitud 0 (|| = 0).Nota 1

    Este smbolo no forma parte de ningn alfabeto.

    Nota 2

    Algunos autores utilizan la letra griega (lambda) para representar a la cadena vaca.

    1.2.3 UNA SIMPLIFICACIN: LA POTENCIACIN DE UN SMBOLO

    En muchas ocasiones, una cadena puede contener un carcter que se repite un nmero determinadode veces.

    Ejemplo 10La cadena aaaabbbbbbb, construida sobre el alfabeto {a, b}, est formada por cuatro aesconcatenadas con siete bes.

    La POTENCIACIN de un carcter simplifica la escritura de cadenas como la del ejemplo anterior,de la siguiente manera:

    Sea c un carcter cualquiera; entonces, cn representa la concatenacin del carcter c, consigomismo, n-1veces. En otras palabras, cnrepresenta la repeticin del carcter c, nveces. Por lo tanto:c1= c, c2= cc,c3= ccc, etc.

    Nota 3Para 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 lecturay, porlo 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.4 CONCATENACIN DE DOS CADENAS

    La operacin de CONCATENACIN aplicada a cadenas (se escribe S1S2o, simplemente, S1S2)produce una nueva cadena formada por los caracteres de la primera cadena seguidos inmediatamentepor los caracteres de la segunda cadena.

  • 5/26/2018 VOLUMEN_1 sintaxis

    10/104

    SSL 1 10 Muchnik

    Ejemplo 12

    Sean las cadenas S1= aaby S2= ba; entonces, S1S2 =aabba.

    Nota 4La concatenacin se escribe, normalmente, sin utilizar el operador correspondiente (), como en elejemplo anterior. Simplemente, se coloca una cadena a continuacin de la otra .

    Nota 5La concatenacin se extiende, fcilmente, a ms de dos cadenas.

    Ejemplo 13

    S1S2S3= S1S2S3.

    * Ejercicio 5 *Sean las cadenas S1= aaby S2= ba. Obtenga la cadena S1S2S1S2.

    La concatenacin NO ES CONMUTATIVA (excepto en casos muy especiales).

    Ejemplo 14

    La cadena aa concatenada con la cadena bbproduce la cadena aabb, mientras que la cadena bbconcatenada con la cadena aa produce la cadena bbaa. Estas dos cadenas son diferentes; enconsecuencia, 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

    Si la primera cadena es ab y la segunda cadena tambin es ab, entonces: ab

    ab (en cualquierorden)esabab.

    CASO 2: Cuando ambas cadenas estn compuestas por una repeticin del mismo carcter, entoncesla concatenacin es conmutativa.

    Ejemplo 16

    Sea S1= aay sea S2= aaa. Entonces: S1S2= a2a3= a2+3= a5y S2S1= a

    3a2= a3+2= a5. Enconsecuencia, S1S2= S2S1= a

    5.

    CASO 3:

    La cadena vaca() es la IDENTIDAD para la concatenacin. Esto es: para cualquier cadena S,S = S=S.

    1.2.5 POTENCIACIN DE UNA CADENA

    El suprandice utilizado en la seccin 1.2.3 para representar la repeticin de un carcter se extiendefcilmente a una cadena, de esta manera: si S es una cadena, entonces Sn (con n 1 y entero)

  • 5/26/2018 VOLUMEN_1 sintaxis

    11/104

    SSL 1 11 Muchnik

    representa la cadena que resulta de CONCATENAR la cadena S, consigo misma, n-1 veces; esdecir: la cadena final resulta de repetir la cadena original nveces. Por lo tanto:

    S1= S, S2= SS, S3= SSS, etc.

    Esta definicin se completa con la siguiente afirmacin: S0es (la cadena vaca), para cualquiercadena S.

    Ejemplo 17

    Sea S = ab; entonces: S3= SSS = (ab)3 = ababab.

    Ejemplo 18

    Ntese la diferencia que existe entre la cadena (ab)3y la cadena ab3: (ab)3 representa la cadenaababab, mientras que ab3es la cadena abbb.

    * Ejercicio 6 *Por qu el suprandice 0no es aplicable a caracteres pero s a cadenas?

    * Ejercicio 7 *Demuestre que(abc)0= (1234)0.

    Un caso particular: n= para cualquier valor entero de n 0.

    * Ejercicio 8 *Demuestre que las cadenas (ab3)3y ((ab)3)3son diferentes.

    1.3 LENGUAJES NATURALES Y LENGUAJES FORMALES

    Se denomina LENGUAJE NATURAL a todo lenguaje hablado y/o escrito que es utilizado por losseres humanos para comunicarse.

    Ejemplo 19El espaol, el ingls y el chino son los tres lenguajes naturales empleados por ms personas en elmundo.

    Los Lenguajes Naturales tienen cuatro caractersticas fundamentales:

    1 EVOLUCIONAN con el paso del tiempo, incorporando nuevos trminos y nuevas reglasgramaticales para mejorar y actualizar la comunicacin;

    Ejemplo 20Las palabras pnfilo y zopenco no son utilizadas actualmente, aunque figuran en losdiccionarios.

    * Ejercicio 9 *Escriban sinnimos de las palabras del Ejemplo 20, que se utilicen actualmente.

    2 Sus REGLAS GRAMATICALES surgen despus del desarrollo del lenguaje, para poder explicarsu estructura, es decir: su sintaxis;

  • 5/26/2018 VOLUMEN_1 sintaxis

    12/104

    SSL 1 12 Muchnik

    3 El SIGNIFICADO(o sea, la semntica) de cada palabra, de cada oracin y de cada frase de unLenguaje Natural es, en general, ms importante que su composicin sintctica.

    Ejemplo 21Donya Innes ah vaniado a su perro con javom pra labar la roppa. Esta oracin tiene muchoserrores, pero seguro que todos nosotros comprendemos su significado. En consecuencia,comprobamos que, en los Lenguajes Naturales, la semntica es ms importante que la

    sintaxis.Ejemplo 22

    En general, los mensajes de texto tienen muchos errores sintcticos. A pesar de ello, laspersonas que se comunican a travs de ellos comprenden su semntica, es decir: susignificado.

    4 Los Lenguajes Naturales son intrnsecamente AMBIGUOS, por lo siguiente: en todo proceso decomunicacin existen un EMISOR y un RECEPTOR. El emisor piensa lo que quiere transmitir,pero no siempre lo pensado es lo que realmente comunica. El receptor percibe lo comunicado por elemisor y, de lo percibido, hay una comprensin que no necesariamente coincide con lo comunicadopor 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 llamase puede referir a un animal o ala existencia de fuego. Su interpretacin depender, fundamentalmente, de la forma en la quela persona lo diga (tono de la voz) y de sus gestos.

    Por otro lado, un LENGUAJE FORMALes un conjunto de cadenas formadas con caracteres de unalfabeto dado, y tiene dos caractersticas fundamentales:

    1) las cadenas que constituyen un Lenguaje Formal no tienen una semntica asociada, solotienen 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). Solo consiste de tres cadenas, cada una de las cuales tiene los caracteres que estnescritos 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.

    Contrariamente a lo que ocurre con los Lenguajes Naturales, los LENGUAJES FORMALESestn

    definidos por reglas gramaticales PREESTABLECIDAS y se deben ajustar rigurosamente a ellas.En consecuencia, un Lenguaje Formal nunca puede evolucionar.

    Ejemplo 25

    Sea = {a}, un alfabeto con un solo carcter. Los que siguen son algunos Lenguajes Formales quese pueden construir sobre este alfabeto: L1= {a}; L2= {aa, aaa}; L3= {, a, a

    18}.

  • 5/26/2018 VOLUMEN_1 sintaxis

    13/104

    SSL 1 13 Muchnik

    Ninguno de estos lenguajes puede evolucionar, es decir: no se puede modificar mediante elagregado de nuevas cadenas o quitando cadenas ya existentes en el lenguaje. Si as se hiciera,obtendramos otros lenguajes.

    Observe cmo, en el Ejemplo 25, la letra a es utilizada en dos contextos diferentes,representando dos entidades distintas. Por un lado, aes un carcter de un alfabeto, mientras que, por

    otro lado, a es una cadena de un Lenguaje Formal. En consecuencia, el contexto en el que seencuentra un carcter, debe determinar, sin ambigedades, el significado nico de ese smbolo, yasea 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.1 PALABRA

    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, una cadenapuede ser un miembro de un Lenguaje Formal, pero tambin puede no serlo.Por ello, incorporamos una nueva definicin: si una cadenapertenece a un determinado LenguajeFormal, decimos que la cadena es una PALABRA de ese lenguaje. La pertenencia de una cadena aun Lenguaje Formal le da la propiedad de ser PALABRA de ese lenguaje en particular.

    Ejemplo 26

    Refirindonos al Ejemplo 25, observamos que el lenguaje L1tiene una sola palabra, a, mientras queel lenguaje L3tiene tres palabras: , a, a

    18. La cadena aano es una palabra de ninguno de estos doslenguajes, pero s lo es del lenguaje L2.

    Ejemplo 27

    Sea el siguiente Lenguaje Formal descripto por EXTENSIN: L = {101, 1001, 10001, 100001}.Utilizando el operador "suprandice", este lenguaje puede ser descripto por COMPRENSIN, enforma ms compacta, as: L= {10n1/ 1 n 4}. Entonces, la cadena 1001(uno-cero-cero-uno)es una palabra del lenguaje L, mientras que 1100(uno-uno-cero-cero) es una cadena construidacon 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 unLenguaje Natural (castellano, en nuestro caso) o mediante otras formas especiales que veremos ms

    adelante.Ejemplo 28

    Sea el lenguaje L del Ejemplo anterior. Este Lenguaje Formal puede ser descripto mediante unafrase en castellano (Lenguaje Natural), de la siguiente manera: Les un lenguaje de cuatro palabras,cada una de las cuales comienza con el carcter 1,termina con otro carcter 1, y en medio tiene unasecuencia de uno a cuatro 0s.

  • 5/26/2018 VOLUMEN_1 sintaxis

    14/104

    SSL 1 14 Muchnik

    Nota 7Si al describir un Lenguaje Formal no se indica explcitamente sobre qu alfabeto est construido, seconsidera que el alfabeto est formado por los caracteres que forman las palabras del lenguaje. Porcaso: en el Ejemplo 27, el lenguaje Lest 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 dosque figuran en el Ejemplo 27. Sin embargo, hay muchos casos en los que la dificultad para describirun Lenguaje Formal con simbologa matemtica es evidente. En estos casos, debemos utilizar unafrase en Lenguaje Natural, evitando ambigedades, u otras herramientas que veremos ms adelante.

    Ejemplo 29

    El lenguaje L = {a2ibi/ 0 i 2}est formado por tres palabras: si i = 0, a2*0b0= a0b0(ausencia deaes y ausencia de bes) representa la palabra vaca (); si i = 1, la palabra es a2*1b1= aab; y si i = 2,la palabra es a2*2b2 = aaaabb. En este caso, obviamente es ms sencilla la descripcin porextensin que por comprensin.

    * Ejercicio 12 *Describa por comprensin al siguiente lenguaje:L = {, 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 quecomienzan con a, terminan con b y, en medio, tienen exactamente tres ces. Una palabra de estelenguaje es: a20cbbcacb4.

    * Ejercicio 14 *Intente describir por comprensin o por extensin el Lenguaje Formal del Ejemplo 30.

    1.3.2 PROPIEDADES DE LAS PALABRAS

    Dado que una PALABRA es una cadena que pertenece a un determinado Lenguaje Formal, todoslos conceptos sobre cadenaexplicados anteriormente se aplican tambin a las palabras. Por lo tanto,hablaremos de: longitud de una palabra, palabra vaca, concatenacin de dos o ms palabras,potenciacin de una palabra, con el mismo significado ya visto.

    Ejemplo 31

    Sea el lenguaje L = {(abc)n/ 0 n 3} = {, abc, abcabc, abcabcabc}. Entonces: La longitud de la palabra abces |abc| = 3. La palabra vaca es un miembro de este lenguaje. La concatenacin de las palabras abc y abcabc produce otra palabra de este lenguaje:abcabcabc. En cambio, la concatenacin de la palabra abcabcconsigo misma produce la cadenaabcabcabcabc, que no es una palabra de este lenguaje.La potencia (abc)2es una palabra del lenguaje.

  • 5/26/2018 VOLUMEN_1 sintaxis

    15/104

    SSL 1 15 Muchnik

    La concatenacin de dos palabras produce una cadena que no siempre es una palabra dellenguaje, como se observa en el ejemplo anterior y en el ejemplo que sigue.

    Ejemplo 32

    Sea el lenguaje L = {a2n+1 / 0 n 200}. Este Lenguaje Formal est formado por 201 palabras,

    cada una de las cuales tiene un nmero impar de letras a. Si n = 0, la palabra es a; sta es la palabrade 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 de L, el resultado ser una cadena con una cantidad parde letras a, ya que la suma de dos nmeros impares produce un nmero par. En consecuencia, laconcatenacin de dos palabras cualesquiera de este lenguaje produce una cadena que nunca es unapalabra de L.

    * Ejercicio 15 *Describa mediante una frase al lenguaje del Ejemplo 32.

    * Ejercicio 16 *

    Sea el lenguaje L = {a2n / 0 n 200}. Escriba, por comprensin, el Lenguaje Formal que seobtiene realizando todas las concatenaciones de dos palabras cualesquiera del lenguaje dado.

    1.3.3 CARDINALIDAD DE UN LENGUAJE FORMAL

    La cardinalidad de un Lenguaje Formal es la cantidad de palabras que lo componen.

    Ejemplo 33L = {a, ab, aab}es un lenguaje de cardinalidad 3 sobre el alfabeto {a, b}.

    Ejemplo 34El lenguaje L = {} es un lenguaje muy especial, pues est formado solo por la palabra vaca. Sucardinalidad es 1, ya que contiene una palabra.

    1.3.4 SUBLENGUAJES

    Dado que un Lenguaje Formal es un conjunto, un SUBLENGUAJE es un subconjunto de unLenguaje Formal dado.

    Ejemplo 35

    Sea L1= {a, ab, aab}. Entonces, L2= {ab, aab} es un sublenguaje de L1, mientras que L3= { } esel sublenguaje vaco de L1.

    El sublenguaje vaco, habitualmente representado con el smbolo , es un sublenguaje decualquier Lenguaje Formal.

    No se debe confundir el sublenguaje vaco, que tiene cardinalidad 0, con el lenguaje que solocontiene la palabra vaca, que tiene cardinalidad 1.

  • 5/26/2018 VOLUMEN_1 sintaxis

    16/104

    SSL 1 16 Muchnik

    1.4 LENGUAJES FORMALES INFINITOS

    Todos los lenguajes ejemplificados hasta el momento han sido LENGUAJES FORMALESFINITOS, es decir: lenguajes con un nmero finito de palabras. Sin embargo, los LenguajesFormales tambin pueden ser INFINITOS, lo que significa que estos lenguajes pueden tener una

    cantidad infinita de palabras, aunque cada una de ellas debe ser de longitud finita; no existen laspalabras de longitud infinita.

    Nota 8Las propiedades de las palabras que han sido ejemplificadas anteriormente se aplican tambin a loslenguajes infinitos.

    Ejemplo 36

    L = {an / n 1} es un Lenguaje Formal infinito ya que no existe un lmite superior para elsuprandice n. Cada palabra de este lenguaje est formada por una secuencia de una o ms aes. Porello, la concatenacin de dos palabras cualesquiera de este lenguaje producir siempre otra palabra

    del lenguaje L. Por esta propiedad, se dice que este lenguaje Ltiene una particularidad especial: escerrado bajo la concatenacin.

    Ejemplo 37

    El lenguaje L = {abn / n 0} es otro Lenguaje Formal infinito. Este lenguaje est formado por lapalabra ay todas aquellas palabras que comienzan con una a, seguida de una secuencia de una oms bes. Este lenguaje no es cerrado bajo la concatenacin ya que, por caso: si consideramos susdos palabras de menor longituday aby las concatenamos, obtenemos la cadena aab, que no esuna palabra de este lenguaje.

    * Ejercicio 17 *

    Sea el lenguaje L = {abn

    a / n

    1}.a) Escriba las tres palabras de menor longitud.b) Describa este lenguaje mediante una frase en castellano.

    1.4.1 LENGUAJE UNIVERSAL SOBRE UN ALFABETO

    Dado un alfabeto , el LENGUAJE UNIVERSAL sobre este alfabeto es un Lenguaje Formalinfinito que contiene todas las palabras que se pueden formar con los caracteres del alfabeto , msla palabra vaca. Se lo representa con la notacin *, que se lee sigma clausura o sigma estrella.

    Importante: acabamos de introducir un nuevo operador que representamos con el suprandice *.Este es un operador unario (opera sobre un solo operando), como lo es la potenciacin enmatemticas. Se lo denomina clausura de Kleene (se pronuncia klaini) o estrella de Kleene, yser muy utilizado en los prximos captulos.

    Una propiedad fundamental del Lenguaje Universal es que es cerrado bajo concatenacin.

  • 5/26/2018 VOLUMEN_1 sintaxis

    17/104

    SSL 1 17 Muchnik

    Ejemplo 38

    Si = {a, b}, entonces el Lenguaje Universal para este alfabeto est formado por la palabra vaca,todas las palabras que solo tienen aes, todas las palabras que solo tienen bes, y todas las palabrasformadas por aes y bes concatenadas en cualquier orden:

    * = {, a, b, aa, ab, ba, bb, aaa, aab, aba, abb, ..., aabaabbbab , },

    Afirmacin: La concatenacin de palabras de

    * siempre produce una palabra de este LenguajeUniversal 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 es un sublenguaje de *. Por lo tanto, existen infinitosLenguajes Formales sobre un alfabeto dado.

    1.4.2 LENGUAJES FORMALES INFINITOS MS COMPLEJOS

    Todos los ejemplos vistos hasta ahora se refieren al tipo de Lenguaje Formal llamado LENGUAJEREGULAR. Pero existen otros tipos de Lenguajes Formales infinitos que ejemplificamos acontinuacin.

    Ejemplo 39

    Los que siguen son ejemplos de tres diferentes tipos de Lenguajes Formales infinitos, ninguno de loscuales es un Lenguaje Regular:

    L1= {anbn/ n 1}. Las tres palabras de menor longitud de este lenguaje son: ab, aabby aaabbb.

    L2= {anbncn / n 1}. Las tres palabras de menor longitud de este lenguaje son: abc, aabbcc y

    aaabbbccc.

    L3= {an/ n es una potencia positiva de 2} . Las tres palabras de menor longitud de este lenguaje

    son: aa, aaaay aaaaaaaa.

    En el prximo captulo veremos porqu hay diferentes tipos de Lenguajes Formales y porqu loslenguajes 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.

  • 5/26/2018 VOLUMEN_1 sintaxis

    18/104

    SSL 1 18 Muchnik

    * Ejercicio 19 *Para un LP que conozca, escriba dos ejemplos de cada una de las entidades (palabras reservadas,expresiones, etc.) mencionadas en el recuadro anterior. Indique si corresponden, segn su criterio, aun Lenguaje Formal finito o a un Lenguaje Formal infinito. Explique su decisin.

    1.5 IMPLEMENTACIN 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.

  • 5/26/2018 VOLUMEN_1 sintaxis

    19/104

    SSL 1 19 Muchnik

    2 GRAMTICAS FORMALES Y JERARQUA DE CHOMSKY

    Un LENGUAJE FORMAL, sea finito o infinito, es un conjunto de palabras con una connotacinsintctica, sin semntica. Existen ciertas estructuras que tienen la habilidad de GENERAR todas laspalabras que forman un Lenguaje Formal. Estas estructuras se denominan GRAMTICASFORMALES.

    2.1 GRAMTICA FORMAL

    Una Gramtica Formal es, bsicamente, un conjunto de PRODUCCIONES, es decir: reglas dereescrituraque se aplican para obtener las palabras del Lenguaje Formal que la Gramtica Formalen cuestin genera. Una Gramtica Formal genera un determinado Lenguaje Formal, nico.

    Ejemplo 1

    Con una simbologa simple, que ser aclarada posteriormente, podemos representar las produccionesde una Gramtica Formal que genera el lenguaje L = {ab, ac}. Estas producciones se pueden

    escribir as: S ->ab y S ->ac.

    Para construir las PRODUCCIONES de una Gramtica Formal se requieren tres tipos de smbolos: los smbolos productores, como es Sen el Ejemplo 1; los smbolos que forman las palabras del lenguaje generado, como son los caracteres a, by 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 GramticaFormal con una nica produccin: S ->a (se lee Sproduce ao Ses reemplazada por a).La

    flecha ser llamada OPERADOR DE PRODUCCIN.

    Si bien en estos dos primeros ejemplos se observa que cada produccin genera una palabra dellenguaje, esto no siempre es as.

    Ejemplo 3

    El Lenguaje Formal L = {aa, ab} puede ser generado por una Gramtica Formal con dosproducciones: S ->aa y S ->ab. Pero este Lenguaje Formal tambin puede ser generado por laGramtica Formal con producciones: S ->aT, T ->a y T ->b.

    Si utilizamos el segundo conjunto de producciones, cmo obtenemos las dos palabras del lenguaje?Comenzamos con la produccin S

    ->aT(Sproduce a seguido de To Sproduce a concatenado

    con T) para obtener el carcter acon el que comienzan ambas palabras de este Lenguaje Formal.Luego, si aplicamos la produccin T -> a obtenemos la palabra aa y si aplicamos T -> bobtenemos la palabra ab.

    Toda produccin est formada por tres partes: el lado izquierdo, el lado derecho, y el operador deproduccin, que significa que el lado izquierdo de la produccin produceo es reemplazado poro equivale a el lado derecho de la misma.

  • 5/26/2018 VOLUMEN_1 sintaxis

    20/104

    SSL 1 20 Muchnik

    Ejemplo 4

    En la produccin S ->aT, el lado izquierdoest constituido por el smbolo S, mientras que su ladoderecho est formado por la concatenacin del carcter a con el smbolo T. El operador deproduccin 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 Sesreemplazada por nada o que genera la palabra vaca. Veamos los dos casos.

    Ejemplo 5El Lenguaje Formal L = {aa, }, que contiene a la palabra vaca, puede ser generado por unaGramtica Formal con dos producciones: S ->aa y S ->. En este caso, la produccin-psilongenera la palabra vaca.

    Ejemplo 6

    Veamos, ahora, el segundo caso. El Lenguaje Formal L = {aa, aab} puede ser generado por unaGramtica Formal con las siguientes producciones: S ->aaT, T ->y T ->b.

    * Ejercicio 1 *a) Describa el orden en que se aplican estas producciones para generar las palabras del lenguaje delEjemplo 6.b) La produccin T -> genera la palabra vaca del lenguaje?

    2.1.1 DEFINICIN FORMAL DE UNA GRAMTICA FORMAL

    Toda Gramtica Formal es una 4-upla (VN, VT, P, S), donde:

    VNes el vocabulario de noterminales; es un conjunto finito de productores.

    VTes el vocabulario de terminales, caracteres del alfabeto sobre el cual se construyen las palabrasdel Lenguaje Formal que es generado por la gramtica descripta; tambin es un conjunto finito.

    Pes el conjunto finito de producciones, y

    S VN es un noterminal especial llamado axioma. Es el noterminal a partir del cual siempredeben comenzar a aplicarse las producciones que generan las palabras de un determinado LenguajeFormal.

    Cuando decimos una Gramtica Formal genera un Lenguaje Formal significa que esagramtica es capaz de generar todas las palabras del Lenguaje Formal, pero que, a su vez, no generacadenas que estn fuera del lenguaje.

    Ejemplo 7

    Retomamos el Ejemplo 3, que describe las producciones de una gramtica que genera el lenguaje{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 Ses el axioma, la generacin de cualquier palabra del lenguaje mencionadocomienza con una produccin que tenga al noterminal Sen su lado izquierdo; en este caso, hay unanica produccin con esta caracterstica: S -> aT. Esta nica produccin indica que el smboloinicial Ses reemplazado, obligatoriamente, por la secuencia aT, por lo que toda palabra generada

  • 5/26/2018 VOLUMEN_1 sintaxis

    21/104

    SSL 1 21 Muchnik

    por esta gramtica debe comenzar con el carcter a. Todava no se ha obtenido una palabra dellenguaje, porque T es un noterminal y sabemos que una palabra debe estar formada solo porcaracteres o debe ser la palabra vaca. En consecuencia, debe haber una o ms producciones quetengan al noterminal Ten su lado izquierdo, y se debe reemplazar a Tpor su lado derecho. En estecaso, el noterminal T tiene dos producciones que representan dos opciones: la produccin T ->asignifica que el noterminal Tes reemplazado por el carcter a, mientras que la produccinT ->b

    representa que el noterminal T es reemplazado por el carcter b. Estas dos producciones para elnoterminal Tgeneran dos procesos diferentes:(1) la aplicacin de las producciones S ->aTy T ->agenera la palabra aa;(2) la aplicacin de las producciones S ->aTy T ->bgenera la palabra ab.

    Ejemplo 8

    Realizamos una pequea variante sobre el Ejemplo 7. Supongamos una Gramtica Formal con lasiguiente 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 1Al describir Gramticas Formales para aplicaciones tericas, como las que estamos viendo en estecaptulo, es muy comn utilizar las siguientes convenciones:

    se denomina Sal axioma, todo noterminal es representado mediante una letra mayscula, el vocabulario de terminales est formado por letras minsculas y dgitos.

    Nota 2Agregamos otro conjunto que, si bien no figura en la definicin formal de una Gramtica Formal,

    ser de gran utilidad en aplicaciones que veremos ms adelante. Nos referimos al conjunto deMETASMBOLOS, que no son terminales ni son noterminales, pero que son smbolos que ayudan arepresentar las producciones de una Gramtica Formal. Uno de ellos ya lo hemos visto: ->, eloperador de produccin.

    Ejemplo 9

    Sea la definicin formal del Ejemplo 7: G = ( {S, T}, {a, b}, {S ->aT, T ->a, T ->b}, S ). Eshabitual describir esta Gramtica Formal mediante la escritura de sus producciones nicamente. Deser as, por convencin se entiende que el noterminal que aparece en el lado izquierdo de la primeraproduccin es el axioma y, normalmente, se lo llama S. Por otro lado, si para un noterminal dadoexiste ms de una produccin, se utiliza el metasmbolobarra vertical para indicar , es decir,

    describir dos o ms producciones con el mismo noterminal en su lado izquierdo. Entonces, lasproducciones de esta gramtica se escriben, generalmente, de la siguiente manera:

    S ->aTT ->a | b

    Esta Gramtica Formal est formada por tres producciones. Los metasmbolos ->y |colaboran enla escritura de estas producciones en forma ms compacta.

  • 5/26/2018 VOLUMEN_1 sintaxis

    22/104

    SSL 1 22 Muchnik

    * Ejercicio 3 *Sea la Gramtica Formal con producciones:

    S ->aT | bQT ->a | bQ ->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.2 LA JERARQUA DE CHOMSKY

    En 1956 y 1959, el lingista norteamericano Noam Chomsky public dos trabajos sobre losLenguajes Naturales que, aplicados al rea de los Lenguajes Formales, produjeron lo que se conocecomo "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, yla 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 Formal Lenguaje FormalGramtica Regular Lenguaje RegularGramtica Independiente del Contexto Lenguaje Independiente del ContextoGramtica Sensible al Contexto Lenguaje Sensible al ContextoGramtica Irrestricta Lenguaje Irrestricto

    A continuacin, analizamos las diferencias que existen entre los cuatro tipos de GramticasFormales.

    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.

  • 5/26/2018 VOLUMEN_1 sintaxis

    23/104

    SSL 1 23 Muchnik

    Ejemplo 10

    Sea la gramtica G = ( {S, X}, {a, b}, {S ->aX, X ->b}, S ).Las producciones de esta gramtica cumplen con las restricciones mencionadas arriba. 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.

    En general: sean v y v noterminales y sea t un terminal. Entonces, las producciones de una GRpueden tener estos formatos:

    1)v ->t, 2)v ->tv y 3) v -> o 1)v ->t, 2)v ->vt y 3) v ->

    Sin embargo, debemos tener cuidado con la mezcla de ambas definiciones porque la GramticaFormal resultante 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 Regular L = {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 Regular L = {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 anteriormente generan Lenguajes Regulares (LRs) finitos. Pero las GRs,aun teniendo un nmero finito de producciones, pueden generar LRs infinitos. Para ello existen lasllamadas PRODUCCIONES RECURSIVAS: producciones en las que el noterminal que figura en ellado izquierdo tambin figura en el lado derecho.

    Ejemplo 13

    La produccin T->aT es una produccin recursiva.

  • 5/26/2018 VOLUMEN_1 sintaxis

    24/104

    SSL 1 24 Muchnik

    Ejemplo 14

    Sea el Lenguaje Formal infinito L = {anb / n 1}. Construyamos las producciones de una GR quegenere este lenguaje:

    1 S ->aS2 S ->aT

    3 T ->bHabitualmente, estas producciones se escriben en forma ms compacta de la siguiente manera:

    S ->aS | aTT ->b

    Anlisis: La produccin (1) genera tantas aes como se necesiten por ser una produccin recursiva,aunque no es obligatorio que esta produccin siempre sea elegida ya que el axioma S tiene dosproducciones. La produccin (2) termina la recursividad y produce una ltima a, o bien produce lanica asi la produccin (1) no es utilizada. La produccin (3) finaliza la generacin de una palabra,reemplazando el noterminal Tque est en el lado derecho de la produccin (2) por el carcter bconel 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 palabra aaabdel LR definido enel Ejemplo 14.

    2.2.1.2 GRAMTICA QUASIREGULAR (GQR)

    Estas gramticas estn muy vinculadas a la sintaxis de los Lenguajes de Programacin, comoveremos en el prximo captulo. Son gramticas similares a una GR, pero donde un conjunto determinales es reemplazado por un noterminal en una o varias producciones. Una GQR abrevia laescritura de una GR y siempre puede ser re-escrita como una GR.

    Ejemplo 15

    Sea la gramtica con las siguientes producciones:S ->N | NSN ->a | b | c

    Esta gramtica es una GQR, porque las dos producciones del noterminal S no corresponden a ladefinicin de una GR pero s responden a la definicin dada en el prrafo anterior. El noterminal N

    genera los terminales a, by c; por lo tanto, Nrepresenta al conjunto {a, b, c}.

    Ejemplo 16Re-escribamos las producciones de la GQR del ejemplo anterior como producciones de una GR.Para ello, debemos reemplazar al noterminal N por cada uno de los terminales que representa.Resultan, entonces, las siguientes producciones:

    S ->a | b | c | aS | bS | cSComo se observa, la GQR tiene cinco producciones, mientras que la GR equivalente tiene seisproducciones.

  • 5/26/2018 VOLUMEN_1 sintaxis

    25/104

    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 *Escriba las producciones de una GQR que genere un LR infinito cuyas palabras son secuencias detres o ms dgitos octales (en base 8).

    * Ejercicio 10 *Transforme las producciones de la GQR obtenida en el Ejercicio 9 en producciones de una GR

    equivalente.

    2.2.2 GRAMTICA INDEPENDIENTE DEL CONTEXTO (GIC)

    A diferencia de las GRs, las GICs no tienen restricciones con respecto a la forma del lado derechode sus producciones, aunque s se requiere que el lado izquierdo de cada produccin siga siendo unnico noterminal.

    El origen de la formalizacin de las GICs se encuentra en Chomsky [1956]:"Three models for the description of language". [Hopcroft y Ullman,Introduction to Automata Theory, Languages and Computation, 1979,

    Addison-Wesley]

    Ejemplo 18

    Supongamos que a una GR le agregamos la produccin S ->ba. Esta nueva produccin posee dosterminales en su lado derecho y, como ya hemos visto, este no es un formato vlido para una GR. Lanueva Gramtica Formal es una GIC.

    En general: sean v y v noterminales y sea t un terminal. Entonces las producciones de una GICcorresponden a este formato general:

    v ->(v + t)*, donde vy vpueden representar el mismo noterminal

    La expresin (v + t)*(recuerden el operador estrella del captulo anterior) representa y cualquiersecuencia de noterminales y/o terminales.

  • 5/26/2018 VOLUMEN_1 sintaxis

    26/104

    SSL 1 26 Muchnik

    Ejemplo 19

    Teniendo en cuenta la convencin mencionada antes (letra mayscula para noterminales, y letrasminsculas o dgitos para terminales), he aqu una serie de producciones correctas para las GICs:

    A -> produccin-psilonB ->a lado derecho con un terminalC ->ab2c5 lado derecho con cinco terminales

    D ->ZXZ lado derecho con tres noterminalesE ->aEZbRgh lado 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

    Las GICs pueden generar Lenguajes Independientes del Contexto (LICs) infinitos utilizando

    PRODUCCIONES RECURSIVAS.

    Ejemplo 20La GIC con producciones:

    S ->aSb | agenera un LIC infinito; la primera produccin es recursiva y la segunda produccin debe utilizarsepara 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= {a

    nbn+1 / n 0}. Escriba las producciones de una GIC que genere L9.

    * Ejercicio 15 *Sea el lenguaje L10= {a

    2nbn+1ar / n 1, r 0}. Escriba la definicin formal de una GIC que genereel 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.

    La frase independiente del contexto refleja que, como el lado izquierdo de cada produccin solopuede contener un nico noterminal, toda produccin de una GIC puede aplicarse sin importar elcontexto donde se encuentre dicho noterminal.

  • 5/26/2018 VOLUMEN_1 sintaxis

    27/104

    SSL 1 27 Muchnik

    Estas GICs son de gran utilidad en la representacin de la sintaxisde 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, pasoa 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

    La Gramtica Formal del Ejemplo 21 no es una GSC porque tiene dos producciones que violan larestriccin impuesta sobre las longitudes: CB ->EyAE ->.

    Cada tipo de Gramtica Formal genera un tipo de Lenguaje Formal cuyo nombre deriva del nombrede la correspondiente gramtica, como ya hemos visto anteriormente. En este libro nos interesarn,fundamentalmente: las GICs, las GQRs, los Lenguajes Regulares (LRs) y los LenguajesIndependientes del Contexto (LICs).

    2.3 EL PROCESO DE DERIVACIN

    La derivacin es el proceso que permite obtener cada una de las palabras de un Lenguaje Formal apartir del axioma de una Gramtica Formal que lo genera, y aplicando, sucesivamente, lasproducciones convenientes de esa gramtica. El mismo proceso tambin permite descubrir si unacadena dada no es una palabra del lenguaje.

  • 5/26/2018 VOLUMEN_1 sintaxis

    28/104

    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 pasosiguiente;

    2) en forma vertical, reemplazando, en cada paso, un noterminal por su lado derecho para produciruna 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, lo indicado para la DERIVACIN VERTICAL. Esta derivacin produciruna tabla con una sola columna y, eventualmente, una segunda columna con comentarios. En laprimera lnea estar siempre el axioma de la gramtica utilizada. Las lneas sucesivas se obtendrnreemplazando un solo noterminal, de lo logrado hasta el momento, por el lado derecho de laproduccin ms conveniente.

    Ejemplo 23

    Sea la GIC con producciones S ->aSb y S ->ab. Esta GIC genera el lenguaje {anbn/ n 1}.

    Una de las palabras de este LIC es aaabbb. Verifiquemos esta situacin mediante una derivacinvertical:

    Derivacin Vertical ComentarioS aplicamos la primera produccin y obtenemos:aSb aplicamos, nuevamente, la primera produccin y obtenemos:aaSbb aplicamos la segunda produccin y obtenemos:aaabbb

    Ejemplo 24

    En cambio, la cadena aaabbno es una palabra del LIC generado en el Ejemplo 23 y, por lo tanto,

    no la podremos derivar. Comprobemos esta situacin:

    Derivacin Vertical ComentarioS aplicamos la primera produccin y obtenemos:aSb aplicamos, nuevamente, la primera produccin y obtenemos:aaSbb no tenemos forma de obtener la tercera a sola, por qu???

    Por lo tanto, no podemos derivar aaabb y, en consecuencia, sta no es una palabra del LICgenerado por la GIC dada.

    * Ejercicio 18 *(a) Dada la GIC del Ejemplo 23, determine, aplicando una derivacin vertical, si la cadenaaaabbbbes 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 loque sigue. Denominaremos CADENA DE DERIVACIN a la cadena de terminales y noterminalesque se forma en cada paso de la derivacin vertical, antes de obtener la palabra (si existe).

  • 5/26/2018 VOLUMEN_1 sintaxis

    29/104

    SSL 1 29 Muchnik

    Ejemplo 25

    En la derivaciones de los ejemplo 23 y 24, las dos cadenas de derivacin son: aSby aaSbb.

    En el Ejemplo 23, la GIC tiene un solo noterminal en el lado derecho de una produccin. En elprximo 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:DERIVACIN VERTICAL A IZQUIERDA: en cada paso de la derivacin se reemplaza el

    noterminal que se encuentra primero (de izquierda a derecha) en la cadena de derivacin.

    DERIVACIN VERTICAL A DERECHA: en cada paso de la derivacin se reemplaza elnoterminal que se encuentra primero (de derecha a izquierda) en la cadena de derivacin.

    Ejemplo 26Sea la GIC con producciones:

    1 S ->ST

    2 S ->ab3 T ->aaT4 T ->b

    Una derivacin vertical a izquierda producira la siguiente tabla para obtener la palabra abaabaab:

    Derivacin Verticala Izquierda

    Comentario

    S Se aplica la produccin (1)ST Se aplica la produccin (1)STT Se aplica la produccin (2)abTT Se aplica la produccin (3)

    abaaTT Se aplica la produccin (4)abaabT Se aplica la produccin (3)abaabaaT Se aplica la produccin (4)abaabaab

    Una derivacin vertical a derecha producira la siguiente tabla para obtener la misma palabra:

    Derivacin Verticala Derecha

    Comentario

    S Se aplica la produccin (1)ST Se aplica la produccin (3)

    SaaT Se aplica la produccin (4)Saab Se aplica la produccin (1)STaab Se aplica la produccin (3)SaaTaab Se aplica la produccin (4)Saabaab Se aplica la produccin (2)abaabaab

    Si una palabra se puede obtener mediante una derivacin vertical a izquierda, entonces tambinse puede obtener mediante una derivacin vertical a derecha.

  • 5/26/2018 VOLUMEN_1 sintaxis

    30/104

    SSL 1 30 Muchnik

    Si una cadena de derivacin tiene ms de un noterminal, la prxima cadena de derivacin seobtiene reemplazando un NICO noterminal en la cadena de derivacin anterior, tal como seobserva en ambas tablas del Ejemplo 26. Nunca se pueden reemplazar dos o ms noterminalesen un solo paso.

    * Ejercicio 19 *Sea el LIC infinito L = {anbcnb / n 1}. Escriba la Definicin Formal de una GIC que genere esteLenguaje Formal.

    * Ejercicio 20 *Dada la GIC construida en el ejercicio anterior, utilice derivacin vertical a izquierda paradeterminar si las siguientes cadenas son o no palabras del LIC generado:

    a) aaabcccbb) aabbccbc) aaabcccbbd) aaccb

    2.4 INTRODUCCIN A LAS GQRs, LAS GICs YLOS LENGUAJES DE PROGRAMACIN

    Tanto las GQRs como las GICs son de gran utilidad en la representacin de la sintaxis de losLenguajes de Programacin. Si bien este es un tema que desarrollaremos en el prximo captulo, heaqu unos ejemplos para introducirlo:

    Ejemplo 27

    Supongamos que un Lenguaje de Programacin tiene nombres de variables que deben comenzar conuna letra minscula entre a y d, que puede estar seguida por letras en este mismo intervalo y pordgitos entre 2y 6. El lenguaje de estos nombres es un LR infinito que puede ser generado por unaGQR con estas producciones:

    S ->L | SL | SDL ->a | b | c | dD ->2 | 3 | 4 | 5 | 6

    * Ejercicio 21 *Escriba una GR equivalente a la GQR del ejemplo anterior. Cul es ms sencilla para ser leda?

    Justifique su respuesta.* Ejercicio 22 *Dada la GQR del Ejemplo 27, determine si las siguientes cadenas son nombres vlidos:

    ab232a3b

    Verifquelo aplicando: a) derivacin a izquierda y b) derivacin a derecha.

  • 5/26/2018 VOLUMEN_1 sintaxis

    31/104

    SSL 1 31 Muchnik

    Ejemplo 28

    Supongamos un Lenguaje de Programacin en el que sus expresiones aritmticas estn formadas porlos nmeros enteros 2y 6, el operador de suma y siempre terminan con un punto y coma. Algunasexpresiones aritmticas de este Lenguaje de Programacin son:

    6;2+2+6;

    Vamos a construir una GIC que genere la totalidad de estas expresiones aritmticas. Para ello,debemos definir el vocabulario de noterminales, el vocabulario de terminales, el axioma y elconjunto de producciones. Supongamos que el vocabulario de noterminales est formado por: S(elaxioma), E (de expresin) y T (de trmino). Los terminales son 2, 6, + y ; (punto y coma). Lasproducciones de la GIC que genera el lenguaje de estas expresiones aritmticas son:

    S ->E;E ->T | E+TT ->2 | 6

    * Ejercicio 23 *a) Determine, aplicando derivacin a izquierda, si 6; es una expresin correcta.

    b)Determine, aplicando derivacin a izquierda, si6+6+6+; es una expresin correcta.c)Determine, aplicando derivacin a derecha, si6+6+6+; es una expresin correcta.d)Determine, aplicando derivacin a izquierda, si6+6+6+2; es una expresin correcta.

  • 5/26/2018 VOLUMEN_1 sintaxis

    32/104

    SSL 1 32 Muchnik

  • 5/26/2018 VOLUMEN_1 sintaxis

    33/104

    SSL 1 33 Muchnik

    3 SINTAXIS Y BNF

    Un Lenguaje de Programacin (LP) es una notacin utilizada para describir algoritmos y estructurasde datos que resuelven problemas computacionales.

    En este captulo nos ocuparemos de la SINTAXIS de los Lenguajes de Programacin y cmo se

    describe la misma. Desde el punto de vista sintctico, hay una relacin muy importante entre los LPsy los Lenguajes Formales ya que un LP est formado, bsicamente, por un conjunto de LRs y unconjunto de LICs, como veremos en este captulo.

    La descripcin precisa de esta sintaxis se realiza, normalmente, en base a notaciones que tienenciertas propiedades similares a las de las Gramticas Formales que estamos utilizando. A estasnotaciones las llamaremos, genricamente, BNF.

    3.1 INTRODUCCIN A LA SINTAXIS

    Como ya se ha dicho, sintcticamente un LP est compuesto por un conjunto de LRs y otro conjuntode LICs. Las CATEGORAS LXICAS o TOKENS (palabra en ingls muy utilizada) -como sonlos identificadores, los nmeros enteros, los nmeros reales, los caracteres, las cadenas constantes,los operadores y los caracteres de puntuacin- constituyen diferentes LRs. Algunos de estoslenguajes son finitos, como los operadores, y otros son infinitos, como sucede con losidentificadores y los nmeros (tanto enteros como reales).

    Por otro lado, las expresiones y las sentencias de un LP son, en general, LICs. Los llamaremosCATEGORAS SINTCTICAS. Como tales, estos lenguajes no pueden ser generados por GRs nipor GQRscomo s ocurre con los LRssino que requieren ser generados por GICs.

    Es importante recordar que todos estos tipos de gramticas se caracterizan porque sus produccionestienen un nico noterminal en el lado izquierdo.

    En esta rea de estudio no tenemos en cuenta las restricciones fsicas que imponen lascomputadoras (cantidad de bytes para almacenar un nmero real, cantidad mxima de caracteres enuna lnea del monitor, etc.). Por eso podemos hablar de lenguajes infinitos cuyos elementos tienenlongitudes indeterminadas aunque finitas, como ocurre con los Lenguajes Formales.

    Una Gramtica Formal no solo GENERA un Lenguaje Formal, sino que tambin se la puedeutilizar para DESCRIBIR la sintaxis del lenguaje que genera. Este concepto est muy relacionadocon el desarrollo de este captulo.

    La sintaxis de un LP debe describirse con precisin, utilizando una notacin sin ambigedades. Lagramtica cumple con este requisito, pero tiene muy pocos metasmbolos; esto dificulta, muchasveces, la escritura y posterior comprensin de la sintaxis definida.

    Por ello, la notacin que se utiliza para describir la sintaxis de un LP es la BNF, que en suscomienzos era muy similar a producciones de una GIC o de una GQR y que luego se fueextendiendo con nuevos metasmbolos.

  • 5/26/2018 VOLUMEN_1 sintaxis

    34/104

    SSL 1 34 Muchnik

    Hopcroft y Ullman [1979] dicen: El origen de la formalizacin de las GICs seencuentra en Chomsky [1956, "Three models for the description of language"]. Lanotacin relacionada llamada BNF fue usada para describir el lenguaje ALGOL enBackus [1959, "The syntax and semantics of the proposed international algebraiclanguage of the Zurich ACM-GAMM conference"] y Naur [1960, "Report on thealgorithmic language ALGOL 60"]. La relacin entre GIC y BNF fue percibida enGinsburg y Rice [1962, "Two families of languages related to ALGOL"].

    Comenzaremos con dos secciones introductorias en las que trabajaremos con Gramticas Formales yluego pasaremos a ver la utilizacin de BNF en la descripcin de la sintaxis de un Lenguaje deProgramacin. De esta manera, percibiremos claramente la evolucin de la notacin BNF.

    3.2 IDENTIFICADORES Y SU SINTAXIS

    El elemento ms utilizado en todo LP es el IDENTIFICADOR: una secuencia de uno o mscaracteres que nombra diferentes entidades de un LP (variables, funciones, procedimientos,constantes, tipos, etc.). Los identificadores constituyen un LR infinito. Habitualmente, las

    PALABRAS RESERVADAS, que tambin estn compuestas por una secuencia de caracteres,forman un LR finito, independiente de los identificadores.

    Ejemplo 1Como escribe David Watt en su libro Programming Language Syntax and Semantics [1991]: "Lasiguiente es la especificacin informal de la sintaxis de identificadores, parafraseada de un manualde un viejo lenguaje de programacin: Un identificador es una secuencia de letras maysculas,posiblemente con la inclusin de guiones bajos en medio." A partir de esta especificacin enlenguaje natural, es evidente que PI, CANTIDAD y C_TOTAL son identificadores correctos.Tambin es muy claro que PI34, 78AAy CANTIDAD___no son identificadores vlidos.

    * Ejercicio 1 *Verifique que la afirmacin escrita en el ltimo prrafo del Ejemplo 1 es correcta para cada una delas cadenas descriptas.

    Pero, si nos atenemos a la definicin dada en el Ejemplo 1, pueden surgir preguntas como lassiguientes:

    (1) Es una nica letra, como X, un identificador vlido? (la especificacin dice "una secuencia deletras");

    (2) La frase "guiones bajos en medio" significa que puede haber varios consecutivos (la frase esten plural) o que deben estar separados?

    * Ejercicio 2 *En base a la especificacin dada en el Ejemplo 1, puede responder con seguridad a las preguntasformuladas en el prrafo anterior?

    * Ejercicio 3 *Se le ocurre alguna otra ambigedad en la especificacin informal que estamos analizando?

    Estas imprecisiones o ambigedades son casi inevitables en una especificacin informal de unasintaxis, como la que se realiza, habitualmente, utilizando un lenguaje natural.

  • 5/26/2018 VOLUMEN_1 sintaxis

    35/104

    SSL 1 35 Muchnik

    Ahora bien; supongamos que, para que resulte ms claro, usamos una GIC para describir estosidentificadores, pero con una pequea modificacin respecto de lo visto en el Captulo 2: losnoterminales sern representados por nombres significativos (por ejemplo, Nombre), en lugar deuna sola letra mayscula. Como siempre, y por convencin, el axioma, que es lo que estamosdefiniendo, aparece en la primera produccin.

    Entonces, una definicin precisa de los identificadores del LP mencionado en el Ejemplo 1 podraser la siguiente:

    Ejemplo 2Identificador -> 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: Recordemos que toda produccin tiene un lado izquierdo, el metasmbolo operador deproduccin y un lado derecho. Recordemos, tambin, que en la escriturade las producciones soloexisten noterminales, terminales y metasmbolos. En este caso, los noterminales son palabras ofrases significativas (sin espacios), los nicos metasmbolos son los caracteres -> y |, y losterminales son los restantes caracteres.

    Es muy importante recordar que todo noterminal debe aparecer en el lado izquierdo de, almenos, una produccin; por otro lado, un terminal jams puede aparecer en el lado izquierdode una produccin. Esta ubicacin en el contexto de las producciones tambin facilita sabercul es un noterminal y cul es un terminal, aunque ambos tengan el mismo nombre.

    Se nota fcilmente que Identificador debe ser el axioma porque es lo que estamos definiendo.Observe que la primera produccin nos dice que un identificador puede ser solo una letra (por

    ejemplo, X), mientras que las otras dos producciones son recursivas (porque Identificadorapareceen ambos lados de la produccin) y, por lo tanto, permiten generar identificadores de cualquierlongitud. 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 perfectamentedefinido mediante esta GIC. Esto es: si una cadena es un identificador de este LP, la podremosderivar a partir del axioma Identificador; caso contrario, no la podremos derivar.

    Nota 1OBSERVACIN IMPORTANTE. Esta GIC produce un Identificadorde derecha a izquierda por el

    formato que tienen las producciones recursivas. Este formato se denomina recursiva a izquierdaporque el noterminal del lado izquierdo aparece, tambin, como primer smbolo del lado derecho.

    * Ejercicio 4 *Construya una tabla de derivacin para generar el identificadorR_X_A.

    * Ejercicio 5 *Verifique, mediante derivacin, que A__B (hay dos guiones bajos consecutivos) no es unidentificador vlido para el LP que estamos analizando.

  • 5/26/2018 VOLUMEN_1 sintaxis

    36/104

    SSL 1 36 Muchnik

    * Ejercicio 6 *Convierta la GIC del Ejemplo 2 en una GQR y compare sta con la GIC utilizada..

    El Identificador que hemos definido en el Ejemplo 2 mediante una GIC recursiva a izquierdatambin puede ser definido mediante una GIC recursiva a derecha, aunque sus producciones

    resultarn ms complejas:Ejemplo 3Identificador -> Letra |

    Letra RestoResto -> 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 identificadorR_X_Aa partir de la gramtica delEjemplo 3.

    * Ejercicio 8 *Verifique mediante derivacin, utilizando la GIC del Ejemplo 3, que A__B(hay dos guiones bajosconsecutivos) no es un identificador vlido para el LP que estamos analizando.

    3.3 LAS EXPRESIONES Y LA SINTAXIS

    Uno de los puntos ms importantes en la sintaxis de un LP est representado por lasEXPRESIONES que se pueden escribir en ese LP. Una GIC para expresiones no solo debe producirtodas las expresiones vlidas, sino que tambin debe preocuparse por la precedencia (o prioridad) yla asociatividad (evaluacin de izquierda a derecha o de derecha a izquierda para operadores conigual precedencia) de cada uno de los operadores existentes en ese LP.

    Para comenzar, desarrollaremos una GIC que genera las expresiones aritmticas con multiplicaciny suma como nicos operadores. Esta GIC tambin reconoce el uso de parntesis, empleadoespecialmente para modificar las prioridades, como, por ejemplo, (2+34)*5.

    Los operandos, para simplificar la situacin, son solo nmeros enteros sin signo; 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;el noterminal Nmero representar cualquier nmero entero no negativo que actuar comooperando.

    Por lo tanto, una GIC para las expresiones aritmticas con estas restricciones se describe en elsiguiente ejemplo:

  • 5/26/2018 VOLUMEN_1 sintaxis

    37/104

    SSL 1 37 Muchnik

    Ejemplo 4Expresin -> Trmino |

    Expresin + TrminoTrmino -> Factor |

    Trmino * FactorFactor -> 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 delaxioma, menor es la prioridad de un operador. Vea lo que sucede con la suma, la multiplicacin ylos parntesis (si stos fueran un operador) en la GIC diseada en el Ejemplo 4. Esta GIC respeta laprioridad y la asociatividad de los operadores que intervienen.

    Veamos un ejemplo de derivacin con esta GIC para analizar esta situacin:

    Ejemplo 5Sea la expresin 1+2*(3+4)+5. Leyndola de izquierda a derecha, observamos que primerodebemos resolver la subexpresin que est entre parntesis; luego podremos realizar lamultiplicacin y, a continuacin, seguir adelante con la evaluacin. Apliquemos el proceso dederivacin a izquierda.

    Recordemos las producciones de la GIC:1 Expresin -> Trmino |2 Expresin + Trmino3 Trmino -> Factor |4 Trmino * Factor5 Factor -> Nmero |

    6 ( Expresin )7 Nmero -> 1 | 2 | 3 | 4 | 5 (agregado para completar el proceso de derivacin)

    Entonces, el proceso de derivacin ser:ExpresinExpresin + TrminoExpresin + Trmino + TrminoTrmino + Trmino + TrminoFactor + Trmino + TrminoNmero + Trmino + Trmino1+ Trmino + Trmino1 + Trmino * Factor + Trmino1 + Factor * Factor + Trmino

    1 + Nmero * Factor + Trmino1 + 2 * Factor + Trmino1 + 2 * ( Expresin ) + Trmino1 + 2 * ( Expresin + Trmino ) + Trmino1 + 2 * ( Trmino + Trmino ) + Trmino1 + 2 * ( Factor + Trmino ) + Trmino1 + 2 * ( Nmero + Trmino ) + Trmino1 + 2 * ( 3 + Trmino ) + Trmino1 + 2 * ( 3 + Factor ) + Trmino1 + 2 * ( 3 + Nmero ) + Trmino

  • 5/26/2018 VOLUMEN_1 sintaxis

    38/104

    SSL 1 38 Muchnik

    1 + 2 * ( 3 + 4 ) + Trmino1 + 2 * ( 3 + 4 ) + Factor1 + 2 * ( 3 + 4 ) + Nmero1 + 2 * ( 3 + 4 ) + 5

    Recordatorio: la secuencia de terminales y noterminales que se obtiene en cada paso de unaderivacin se denomina CADENA DE DERIVACIN.

    Ejemplo 6

    En el proceso de derivacin anterior, 1+2*(Nmero+Trmino)+Trmino es una de las cadenasde derivacin.

    * Ejercicio 10 *Cul es la menor expresin que se puede derivar desde la GIC definida en el Ejemplo 4 y re-escritaen el Ejemplo 5? Escrbala y justifique su respuesta.

    * Ejercicio 11 *Es ((2)) una expresin vlida? Demuestre que s o que no por derivacin. Para cada cadena de

    derivacin obtenida, indique la produccin que fue aplicada.

    * Ejercicio 12 *Intente derivar 1+2++3.

    3.3.1 LA EVALUACIN DE UNA EXPRESIN, PRECEDENCIA Y ASOCIATIVIDAD

    La EVALUACIN de una expresin se realiza como un proceso inverso al de la derivacin, hastallegar al axioma. En otras palabras: debemos hacer una REDUCCIN de la tabla generada por laderivacin. Es aqu donde se ve si la precedencia o prioridad de los operadores est correctamente

    determinada por la gramtica diseada.

    Esta reduccin debe hacerse en el orden inverso a la derivacin; es decir: el ltimo paso de laderivacin ser el primero de la reduccin, y as sucesivamente. Para ello, debe tenerse en cuenta laproduccin aplicada en cada paso de la derivacin. En el prximo ejemplo re-escribiremos laderivacin realizada en el Ejemplo 5, pero indicando la produccin aplicada en cada paso. 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 Ejemplo5 a partir de la GIC con producciones

    1 Expresin -> Trmino |2 Expresin + Trmino3 Trmino -> Factor |4 Trmino * Factor5 Factor -> Nmero |6 ( Expresin )7 Nmero -> 1 | 2 | 3 | 4 | 5

    y construimos la siguiente TABLA DE DERIVACIN:

  • 5/26/2018 VOLUMEN_1 sintaxis

    39/104

    SSL 1 39 Muchnik

    PRODUCCINAPLICADA

    CADENA DE DERIVACIN OBTENIDA

    (axioma) Expresin2 Expresin + Trmino2 Expresin + Trmino + Trmino1 Trmino + Trmino + Trmino3 Factor + Trmino + Trmino5 Nmero + Trmino + Trmino7 1 + Trmino + Trmino4 1 + Trmino * Factor + Trmino3 1 + Factor * Factor + Trmino5 1 + Nmero * Factor + Trmino7 1 + 2 * Factor + Trmino6 1 + 2 * ( Expresin ) + Trmino2 1 + 2 * ( Expresin + Trmino ) + Trmino1 1 + 2 * ( Trmino + Trmino ) + Trmino3 1 + 2 * ( Factor + Trmino ) + Trmino5 1 + 2 * ( Nmero + Trmino ) + Trmino7 1 + 2 * ( 3 + Trmino ) + Trmino

    3 1 + 2 * ( 3 + Factor ) + Trmino5 1 + 2 * ( 3 + Nmero ) + Trmino7 1 + 2 * ( 3 + 4 ) + Trmino3 1 + 2 * ( 3 + 4 ) + Factor5 1 + 2 * ( 3 + 4 ) + Nmero7 1 + 2 * ( 3 + 4 ) + 5

    Ahora, evaluaremos esta expresin. Para ello, como ya adelantamos, aplicaremos el proceso dereduccin, que es el proceso inverso al de derivacin: partimos de la secuencia de terminales queforman la expresin y finalizamos cuando llegamos al axioma de la GIC.

    Construiremos una tabla que llamaremos TABLA DE EVALUACIN. Como vern en la tabla,

    junto a cada noterminal se agrega el nmero (terminal) del cual proviene, para tenerlo presente alrealizar la correspondiente evaluacin. La Tabla de Evaluacin es la siguiente:

    CADENA DE DERIVACIN A REDUCIR PRODUCCINA APLICAR

    OPERACIN

    1 + 2 * ( 3 + 4 ) + 5 71 + 2 * ( 3 + 4 ) + Nmero5 51 + 2 * ( 3 + 4 ) + Factor5 31 + 2 * ( 3 + 4 ) + Trmino5 71 + 2 * ( 3 + Nmero4 ) + Trmino5 51 + 2 * ( 3 + Factor4 ) + Trmino5 31 + 2 * ( 3 + Trmino4 ) + Trmino5 71 + 2 * ( Nmero3 + Trmino4 ) + Trmino5 51 + 2 * ( Factor3 + Trmino4 ) + Trmino5 31 + 2 * ( Trmino3 + Trmino4 ) + Trmino5 11 + 2 * ( Expresin3 + Trmino4) + Trmino5 2 3 + 4 = 71 + 2 * ( Expresin7 ) + Trmino5 61 + 2 * Factor7 + Trmino5 71 + Nmero2 * Factor7 + Trmino5 51 + Factor2 * Factor7 + Trmino5 31 + Trmino2 * Factor7+ Trmino5 4 2 * 7 = 141 + Trmino14 + Trmino5 7Nmero1 + Trmino14 + Trmino5 5

  • 5/26/2018 VOLUMEN_1 sintaxis

    40/104

    SSL 1 40 Muchnik

    Factor1 + Trmino14 + Trmino5 3Trmino1 + Trmino14 + Trmino5 1Expresin1 + Trmino14+ Trmino5 2 1 + 14 = 15 (*)Expresin15 + Trmino5 2 15 + 5 = 20Expresin20 (axioma) Resultado Final

    (*) Aqu se ve un ejemplo muy claro de "qu es la ASOCIATIVIDAD". El operando 14se puede

    sumar al operando 1(a su izquierda) o al operando 5(a su derecha). Como la suma es asociativa aizquierda, el 14se suma al 1y no al 5.

    En general: cuando hay tres operandos vinculados con operadores de igual precedencia (como eneste caso), el operando central operar primero con el operando de la izquierda si la operacin esasociativa a izquierda (como sucede aqu); pero si la operacin es asociativa a derecha, el operandocentral operar primero con el operando de la derecha. Un ejemplo de esta ltima situacin loveremos 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 delos operadores: la expresin entre parntesis es evaluada primero, luego evala la multiplicacin y,

    finalmente, las sumas.

    Nota 2Para construir una Tabla de Evaluacin es indispensable partir de la correspondiente Tabla deDerivacin y proceder en orden inverso (reduccin).

    * Ejercicio 13 *Siguiendo el modelo presentado en el Ejemplo 7, construya una Tabla de Evaluacin que muestre laevaluacin de la expresin: (1 + 2) * (3 + 4)

    Ejemplo 8

    Para terminar de comprender totalmente la GIC para expresiones utilizada en los ejemplos yejercicios anteriores, analicemos el siguiente caso. Supongamos que consideramos que no esnecesario que haya tantos niveles de noterminales (expresin, trmino, factor, nmero) para una GICque "solo" genera expresiones aritmticas con los operadores de suma y de multiplicacin.Diseamos, entonces, una GIC ms simple que solo tiene dos noterminales: E(por expresin) y N(por nmero). Esta GIC tiene las siguientes producciones:

    1 E -> E + E |2 E * E |3 (E) |4 N5 N -> 1 | 2 | 3 | 4 | 5

    * Ejercicio 14 *Describa formalmente la GIC del Ejemplo 8.

    Ejemplo 9

    Replicaremos el Ejemplo 7, pero ahora utilizando la nueva GIC cuyas producciones figuran en elEjemplo 8.

    Sea, nuevamente, la expresin 1+2*(3+4)+5. Aplicamos el proceso de derivacin a izquierda yconstruimos la siguiente Tabla de Derivacin:

  • 5/26/2018 VOLUMEN_1 sintaxis

    41/104

    SSL 1 41 Muchnik

    PRODUCCINAPLICADA

    CADENA DE DERIVACIN OBTENIDA

    (axioma) E2 E * E1 E + E * E1 E + E * E + E

    3 E + E * (E) + E1 E + E * (E + E) + E4 N + E * (E + E) + E5 1 + E * (E + E) + E4 1 + N * (E + E) + E5 1 + 2 * (E + E) + E4 1 + 2 * (N + E) + E5 1 + 2 * (3 + E) + E4 1 + 2 * (3 + N) + E5 1 + 2 * (3 + 4) + E4 1 + 2 * (3 + 4) + N5 1 + 2 * (3 + 4) + 5

    Como se ve, no solo hemos podido derivar la expresin dada sino que, adems, lo hemos realizadoen menor cantidad de pasos que utilizando la GIC del Ejemplo 7. Parecera que esta GIC es mejorque la anterior!

    Siguiendo el ejemplo anterior, evaluaremos esta expresin aplicando el proceso de reduccin.Nuevamente, junto al noterminal colocaremos el nmero (terminal) que le corresponde, con estanotacin:noterminal.terminal.

    Ejemplo 10

    Obtenemos, entonces, la siguiente Tabla de Evaluacin:

    CADENA DE DERIVACIN A REDUCIR PRODUCCINA APLICAR OPERACIN

    1 + 2 * (3 + 4) + 5 51 + 2 * (3 + 4) + N.5 41 + 2 * (3 + 4) + E.5 51 + 2 * (3 + N.4) + E.5 41 + 2 * (3 + E.4) + E.5 51 + 2 * (N.3 + E.4) + E.5 41 + 2 * (E.3 + E.4) + E.5 51 + N.2 * (E.3 + E.4) + E.5 41 + E.2 * (E.3 + E.4) + E.5 5N.1 + E.2 * (E.3 + E.4) + E.5 4E.1 + E.2 * (E.3 + E.4) + E.5 1 3 + 4 = 7

    E.1 + E.2 * (E.7) + E.5 3E.1 + E.2 * E.7 + E.5 1 7 + 5 = 12E.1 + E.2* E.12 1 1 + 2 = 3E.3 * E.12 2 3 * 12 = 36E.36 (axioma) Resultado Final

    Como se observa, el resultado final es incorrecto, y esto se debe a que la segunda gramtica est maldiseada porque no resuelve correctamente el problema de precedencia de los operadores.

  • 5/26/2018 VOLUMEN_1 sintaxis

    42/104

    SSL 1 42 Muchnik

    * Ejercicio 15 *Utilizando la GIC cuyas producciones estn en el Ejemplo 8, obtenga otra Tabla de Derivacin parala expresin del Ejemplo 9. Luego, construya la Tabla de Evaluacin correspondiente. Cules sonsus conclusiones?

    * Ejercicio 16 *Puede hacer lo mismo que hizo en el ejercicio anterior, pero con la GIC del Ejemplo 7? Justifiquesu respuesta.

    3.4 BNF Y ALGOL

    La sigla BNFcorresponde a la frase Backus Normal Form (Forma Normal de Backus) o tambina la frase Backus-Naur Form (Forma de Backus y Naur). Con elbreve Manual de Referencia dellenguaje ALGOL (ALGOrithmic Language) se public, por primera vez en 1960, una descripcinformal 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 loscomponentes y de las estructuras de un LP dado, como hemos hecho en secciones anteriores, peroutilizando GICs. Pero, como veremos en el resto de este captulo, BNF ha evolucionadoincorporando nuevos metasmbolos; en esto radica una diferencia fundamental entre BNF y unaGramtica Formal.

    Volviendo al origen de BNF, la diferencia entre la notacin utilizada para describir las produccionesde una GIC y la usada para representar las reglas BNF era mnima: el metasmbolo operador deproduccin comenz a representarse como ::= (al que podramos llamar operador ES) y losnombres 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 oun valor lgico o un delimitador.

    Cada regla BNF se forma con elementos provenientes de tres conjuntos disjuntos:

    metavariables o noterminales, que son palabras o frases encerradas entre corchetes angulares(ejemplo: , ).

    terminales, que son los caracteres del alfabeto o palabras del lenguaje sobre los cuales seconstruye el LP descripto. Se los llama terminales porque no existen reglas de produccin para ellos(ejemplo: una palabra reservadaes un terminal).

    metasmbolos, que son caracteres o grupos de caracteres que ayudan a representar estas reglas(ejemplo: , ::=, |).

  • 5/26/2018 VOLUMEN_1 sintaxis

    43/104

    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 lenguajeALGOL son:

    (1)(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.1 DOS EJEMPLOS DE BNF EN ALGOL

    En ALGOL 60, un identificador deba comenzar con una letra y, si tena ms caracteres, stospodan ser letras y dgitos decimales. La categora lxica Identificador en ALGOL 60 constituyeun 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. El conjunto de reglas para se lee: letra es cualquier letra minscula o mayscula delalfabeto ingls.

    El conjunto de reglas para se lee: dgitoes cualquier dgito decimal (base 10).

    Nota 3y 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.

  • 5/26/2018 VOLUMEN_1 sintaxis

    44/104

    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. El noterminal , por medio de una regla recursiva a izquierda y otra determinacin de la recursividad, define una sucesin de uno o ms dgitos decimales. Enconsecuencia, un nmero entero es: (a) una sucesin de dgitos, o (b) una sucesin de dgitosprecedida por el signo positivo, o (c) una sucesin de dgitos precedida por el signo negativo.

    * Ejercicio 18 *Derive el nmero entero -123456. Si desea, puede abreviar el nombre de los noterminalesexplicando qu significa cada abreviatura utilizada.

    A continuacin veremos cmo fue descripto el lenguaje Pascal por su creador, Niklaus Wirth, y laprimera ampliacin del conjunto de metasmbolos en BNF.

    3.5 BNF Y EL LENGUAJE PASCAL

    Independientemente de la notacin que utilicemos y del LP descripto, las BNFs estn formadas por:

    Seguidamente, veremos una extensin que realiz Niklaus Wirth a la notacin BNF utilizada paradescribir la sintaxis del ALGOL. Por ello, a partir de esta extensin y de otras que analizaremosluego, la sigla BNFfue cambiada por la de EBNF (BNF extendida). No obstante, muchos autoressiguen utilizando la sigla BNF tambin para las BNFs extendidas; nosotros haremos lo mismo.

    3.5.1 LA SINTAXIS DEL LENGUAJE PASCAL, SEGN WIRTHEn el libro Pascal User Manual and Report (1974), escrito por Niklaus Wirth creador de estelenguaje y Kathleen Jensen, se describen con precisin la sintaxis y la semntica del lenguajePascal. En esta seccin nos ocuparemos de su descripcin sintctica.

    En la Introduccin del libro mencionado, Wirth dice: Una formulacin de la sintaxis es latradicional BNF, en la que los constructos sintcticos [categoras lxicas y categoras sintcticas]

    1) un conjunto de NOTERMINALES

    2) un conjunto de TERMINALES3) un conjunto de METASMBOLOS4) un conjunto de PRODUCCIONES

  • 5/26/2018 VOLUMEN_1 sintaxis

    45/104

    SSL 1 45 Muchnik

    son denotados por palabras en ingls [en castellano, en nuestro caso] encerradas entre los corchetesangulares.

    Por otro lado, al conjunto de metasmbolos ya existente en ALGOL, Wirth agrega un metasmbolomuy importante y lo describe as: Las llaves {y }denotan la posible repeticin de los smbolos queencierra, cero o ms veces. Es una forma ms compacta de describir una secuencia de elementos,

    como veremos en prximos ejemplos.Este metasmbolo es la primera extensin que se realiz sobre la BNF utilizada en ALGOL: a lostres metasmbolos ya existentes en ALGOL, Wirth agreg el metasmbolo indicado por un par dellaves para representar lo que conocemos como el operador clausura de Kleene, es decir: cero o msveces lo que est encerrado entre las llaves.

    A partir de sta y de otras extensiones posteriores es que algunos autores utilizan la sigla EBNFparareferirse a una BNF extendida. Pero, como ya se mencion, nosotros seguiremos utilizando la siglaBNF, independientemente de las extensiones que se agreguen y de los caracteres utilizados pararepresentar a los metasmbolos.

    Veamos, a continuacin, algunos ejemplos de la BNF que utiliza Wirth para describir la sintaxis dellenguaje Pascal en su Manual de Referencia original.

    Ejemplo 15

    La definicin de identificadoren 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