1 / 39

Teoría de lenguajes y compiladores

Teoría de lenguajes y compiladores. Unidad I. Analizadores lexicográficos. Semana 2. Nociones de gramática. Gramáticas de contexto libre. Objetivo General.

min
Download Presentation

Teoría de lenguajes y compiladores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Semana 2 Nociones de gramática. Gramáticas de contexto libre.

  2. Objetivo General El alumno al finalizar el curso podrá desarrollar aplicaciones que le permitan determinar si una estructura gramatical corresponde a una sentencia valida en la definición de un lenguaje en particular, teniendo en cuenta el contexto sintáctico y semántico. Así mismo estará capacitado para proponer nuevas formas estructurales en la definición de lenguajes de programación.

  3. Objetivos Específicos Desarrollar un analizador lexicográfico

  4. Objetivos Instruccionales Comprender el contexto teórico para analizar y determinar si un lenguaje esta formulado de forma correcta.

  5. Tiras y lenguajes (1) • La noción más básica en la teoría de lenguajes es la tira de caracteres, que esta formada por la concatenación de caracteres. • La tira mínima o nula se denomina . • Si tenemos un alfabeto o vocabulario { a , b}, algunas tiras son:  , a , b , ab , aaa , aab , … es importante el orden, así las tiras ab y ba son distintas. • La concatenación de dos caracteres o tiras elementales a y b se escribe ab: lo mismo pasa con las tiras, que se denominan con las letras minúsculas del final del alfabeto, es decir t , u ,w , x , y , z; así con las dos tiras:  x = abc z = deac la concatenación xz valdrá abcdeac; Nociones

  6. Tiras y lenguajes (2) • La concatenación de dos tiras, si una de ellas es nula, deja inalterada a la concatenación: • Si x = abc • x = x = x = abc • La longitud de una tira x , se indica con |x| y es el número de caracteres que lo forma. • Por ejemplo: •   |  | = 0 |a| = 1 |abab| = 4 Nociones

  7. Lenguaje • Un lenguaje esta formado por los dos elementos siguientes: • Un diccionario, que indica los significados de las palabras del lenguaje • Un conjunto de reglas, para describir las sentencias validas del lenguaje. Este conjunto de reglas forma la gramática del lenguaje. • La noción del lenguaje es muy sencilla: “Un lenguaje es un conjunto de tiras de caracteres”. • Añadamos que:  • Una “tira” (o sentencia) del lenguaje es una secuencia ordenada de símbolos. • Un “símbolo” es un ítem elemental del vocabulario del lenguaje que se emplea para formar las tiras del lenguaje, que se llaman sus sentencias. • Un “alfabeto” o “vocabulario”, es el conjunto de todos los símbolos que forman las sentencias del lenguaje. Nociones

  8. Descripción de un lenguajeLa enumeración • Muestra todas las tiras de símbolos que constituyen el lenguaje. • Se escribe el nombre del lenguaje, un signo igual, y luego entre llaves que delimitan el conjunto de las tiras o sentencias, se ponen las tiras constitutivas del lenguaje: • L1 = { ab, ac, bc, ca }   Nociones “Esta forma de descripción es muy pobre, ya que solo sirve para lenguajes formados por un número limitado de tiras”

  9. Descripción de un lenguaje La algebraica • Aquí el lenguaje se describe con una formula algebraica, empleando la notación abreviada de que an es la concatenación formada por n letras “a”. • Llamamos N al conjunto de los enteros positivos incluyendo el cero y N+ es el conjunto N pero sin el cero. • Un ejemplo con esta descripción es: •  L1 = { an | n  N } •  Por lo tanto las tiras de L1 serán , a , aa , aaa , aaaa , … • Otro ejemplo: L2 = {anbn | n  N+ } •   Ahora las tiras de L2 son: ab , aabb , aaabbb, … Nociones

  10. Arboles de análisis sintáctico También conocidos como árboles de derivación o de análisis gramaticales, superponen una estructura sobre las palabras de un lenguaje, que es de utilidad en las aplicaciones tales como la compilación de los lenguajes de programación. Los vértices de un árbol están etiquetados con símbolos terminales o variables de la gramática, o posiblemente con λ. Nociones • Propiedades de un árbol sintáctico: • La raíz esta marcada con el símbolo inicial • Cada hoja esta marcada con un símbolo terminal o con λ • Cada nodo esta marcado con un símbolo no terminal

  11. Arboles de análisis sintáctico Tomando como referencia la gramática expresada en el ejemplo 1. <expresion> ( id + id ) * id <expresion> * <expresion> Nociones ( <expresion> )id <expresion> + <expresion> idid

  12. Tipos de Gramáticas Noam Chomsky clasifica las gramáticas en cuatro tipos: • Gramáticas sin restricciones o gramáticas de estructura de frases (Tipo 0). α β estando α en (N U T)+ y β en (N U T)* • Gramáticas sensibles al contexto (Tipo 1). α A β  α ϒβ estando A en N , α y β en (N U T)* , ϒ en (N U T)+ • Gramáticas independientes de contexto (Tipo 2). A  α estando A en N , α en (N U T)* • Gramáticas regulares (Tipo 3). A  aBó A  a , estando A y B en N , a en T Gramáticas Tipo 0 Tipo 1 Tipo 2 Tipo 3

  13. Definición • La noción de gramática es debida a Chomsky quien la conceptualizó el año 1959 y es la piedra angular de toda la lingüística matemática. Una gramática esta formada por el cuarteto:  • ( N , T , P , S )  • Siendo cada uno de sus elementos lo siguiente:  • N es el vocabulario no terminal (también se representa por Vn), de símbolos introducidos por nosotros como elementos auxiliares para la definición de la gramática y que no figuran en las sentencias del lenguaje. En oposición al vocabulario terminal T, se denomina a N vocabulario no terminal o de metanociones. Los elementos de N se denominan indistintamente así: metanociones, variables o no terminales.  • T es el vocabulario terminal (también se representa por Vt). Todas las sentencias del lenguaje definido por esta gramática están formadas con los símbolos o caracteres de T.  • P es un conjunto de reglas de derivación de las tiras que tiene la forma:  • tira1  tira2  • También se puede escribir la regla como un par ordenado, escritos sus dos elementos entre paréntesis y separados por una coma.  • ( tira1 , tira2 ) • S es la metanoción más importante del conjunto N, se le llama “símbolo distinguido”, símbolo inicial o axioma. Gramáticas

  14. Componentes de una gramática • Para una descripción abreviada de una gramática, lo mas importante es el conjunto P de reglas. En la historia de los lenguajes de programación, uno de los avances más importante fue la descripción formal del lenguaje ALGOL 60, en el que se empleaba por primera vez la llamada “notación BNF (Backus Normal Form)”; teniendo una parte izquierda y una parte derecha separadas por una flecha ( o también un símbolo ::= en vez de la flecha. Dicho símbolo se puede leer “se define como”). • Un ejemplo de gramática es la G1 que define todas las tiras formadas por varias aes seguidas de igual numero de bes (que en la notación algebraica anterior se daba como anbn). La gramática viene dada por el siguiente cuarteto. • G1 = ( N , T , P , S ) • Donde : N:  S  • T :  a , b  • P :  S aSbregla 1 • S  ab regla 2 •  • S : Símbolo distinguido • El lenguaje definido por la gramática G que se indica L(G) es el conjunto de tiras de símbolos terminales generadas partiendo del axioma S empleando las reglas del conjunto P Gramáticas

  15. Derivaciones La forma de derivar una sentencia para una gramática dada es ir sustituyendo las sucesivas metanociones de las formas senténciales por alguna de sus partes derechas correspondientes. En el ejemplo anterior de la gramática G1, se tiene que la tira aaabbb se deriva así: S aSbaaSbbaaabbb Gramáticas

  16. Gramática independiente del contexto (Tipo 2) • Definen la sintaxis de las expresiones, declaraciones, proposiciones, etc. Es decir la estructura de un programa. • Tienen la forma: A α • donde: A ε N , α ε V* , V = N U T Gramáticas “Estas gramaticas no tienen reestricciones con respecto al lado derecho de sus reglas, aunque se quiere que el lado izquierdo sea un no terminal”.

  17. Gramática independiente del contexto (Tipo 2) Ejemplo 1: Supóngase que utilizamos E en lugar de <expresion> para la variable de la gramática. Podemos expresar esta gramática de la manera formal como: G = (N,T,P,S) Donde: T = { + , * , ( , ) , id } N = { E } P = { E  E + E E  E * E E  ( E ) E  id } S = E Gramáticas

  18. Gramática independiente del contexto (Tipo 2) Ejemplo 2: Considere G = (N,T,P,S) en lo que: T = { a , b } N = { S, A, B } P = { S aB |bA A bAA | a | aS B bS | b | aBB } S = S ¿Qué forma tienen las tiras generadas por este lenguaje? Gramáticas El lenguaje L(G) es el conjunto de todas las palabras que pertenecen a T+ y que consisten en un número igual de aes y bes.

  19. FORMA NORMAL DE CHOMSKY Si L es un lenguaje independiente del contexto que no tiene la cadena vacía, entonces existe una gramática G independiente del contexto tal que G(L)=L y el lado derecho de cada regla en G consiste en un solo terminal o exactamente dos no terminales. A  BC A  a Donde A, B y C están en N y a en T Gramáticas

  20. FORMA NORMAL DE GREIBACH Si L es un lenguaje independiente del contexto que no tiene la cadena vacía, esta puede ser generada por una gramática en la que todas las reglas tienen la forma: A  a α Donde: A está en N , a en T y α una tira que está en N* Gramáticas

  21. Gramática regular (Tipo 3) Definen la sintaxis de los identificadores, números, cadenas y otros símbolos básicos del lenguaje. Tienen la forma: A  a | aB (lineal por la derecha) ó bien A  a | Ba (lineal por la izquierda) Donde: A , B ε N , a ε T* “Las gramáticas regulares guardan estrecha relación con los autómatas finitos”. Gramáticas

  22. Gramáticas no Ambiguas(1) Sea G = ( T , N , P , S ) que acepta expresiones aritméticas como: X + Y – X * Y Donde: T = { X , Y , + , - , * , / , ( , ) } N = { EXPR , TERM , FACTOR } P = { EXPR  TERM | EXPR + TERM | EXPR – TERM TERM  FACTOR | TERM * FACTOR | TERM / FACTOR FACTOR  X | Y | ( EXPR ) S = {EXPR}  Gramáticas “G no es ambigua, porque tiene un solo árbol de derivación”

  23. Gramáticas no Ambiguas (2) Derivación por la izquierda Se realiza el reemplazo de cada N que esta más a la izquierda EXPR  EXPR – TERM  EXPR + TERM – TERM  TERM + TERM – TERM  FACTOR + TERM – TERM  X + TERM – TERM  X + FACTOR – TERM  X + Y – TERM  X + Y – TERM * FACTOR  X + Y – FACTOR * FACTOR  X + Y – X * FACTOR  X + Y – X * Y Derivación por la derecha Se realiza el reemplazo de cada N que esta más a la derecha EXPR  EXPR – TERM  EXPR - TERM * FACTOR  EXPR - TERM * Y  EXPR - FACTOR * Y  EXPR - X * Y  EXPR + TERM - X * Y  EXPR + FACTOR - X * Y  EXPR + Y - X * Y  TERM + Y - X * Y  FACTOR + Y - X * Y  X + Y – X * Y Gramáticas

  24. Gramáticas no Ambiguas (3) Árbol Sintáctico EXPR EXPR TERM Gramáticas EXPR TERM TERM FACTOR TERM FACTOR FACTOR FACTOR - X + Y X * Y

  25. Gramáticas Ambiguas (1) Sea G = ( T , N , P , S ) que acepta expresiones aritméticas como: X + Y – X * Y  Donde: T = { X , Y , + , - , * , / , ( , ) } N = { EXPR , OP } P = { EXPR EXPR OP EXPR | ( EXPR ) | X | Y OP  + | - | * | / S = {EXPR} Gramáticas “G es ambigua, porque tiene más de un árbol de derivación”

  26. Gramáticas Ambiguas (2) Derivación por la derecha Se realiza el reemplazo de cada N que esta más a la derecha EXPR  EXPR OP EXPR  EXPR OP Y  EXPR * Y  ( EXPR ) * Y  ( ( EXPR ) ) * Y  ( ( EXPR OP EXPR ) ) * Y  ( ( EXPR OP ( EXPR ) ) ) * Y  ( ( EXPR OP ( EXPR OP EXPR ) ) ) * Y  ( ( EXPR OP ( EXPR OP X ) ) ) * Y  ( ( EXPR OP ( EXPR - X ) ) ) * Y  ( ( EXPR OP ( Y - X ) ) ) * Y  ( ( EXPR + ( Y - X ) ) ) * Y  ( ( X + ( Y - X ) ) ) * Y Derivación por la izquierda Se realiza el reemplazo de cada N que esta más a la izquierda EXPR  ( EXPR )  ( EXPR OP EXPR )  ( X OP EXPR )  ( X + EXPR )  ( X + ( EXPR ) )  ( X + ( EXPR OP EXPR ) )  ( X + ( Y OP EXPR ) )  ( X + ( Y - EXPR ) )  ( X + ( Y – ( EXPR OP EXPR ) ) )  ( X + ( Y – ( X OP EXPR ) ) )  ( X + ( Y – ( X * EXPR ) ) )  ( X + ( Y – ( X * Y ) ) ) Gramáticas

  27. Definición Si una metanoción A cumple que: Aα A β , se dice que es recursiva. Si α fuera nula, entonces se escribiría la derivación A Aβ Decimos entonces que A es “recursiva por la izquierda” Recursividad

  28. Supresión de la recursividad por la izquierda (1) • Sea A  Aα1 |Aα2 |Aα3 | … |Aαp | β1 | β2 | β3 | … | βq • Para suprimir la recursividad: • Añadimos una nueva metanociónA’ y todas las reglas A se sustituyen por las siguientes: • A  βi A  βi A’ siendo 1 <= i <= q • A’  αj A’  αj A’ siendo 1 <= i <= p  Recursividad

  29. Supresión de la recursividad por la izquierda (2) Ejemplo: A  Aa | Ab | cd Eliminar la recursividad por la izquierda Solución: Recursividad A cd A  cdA’ A’  a | b A’  aA’ | bA’

  30. Supresión de la recursividad por la izquierda (3) A A b A A´ d c Recursividad a A A´ a a A A´ a c d b

  31. Vacuidad del lenguaje (1) Permite determinar si una gramática es vacía, es decir no tiene ninguna sentencia (ni siquiera la sentencia nula). Es decir L(G) = λ Algorítmo: begin VIEJO := λ; NUEVO := { A / ( A  t ) de P y se cumple (t ε T*) } while NUEVO < > VIEJO do begin VIEJO := NUEVO; NUEVO := VIEJO U { B / ( B α ) de P y α ε ( T U VIEJO )* } end if S ε NUEVO then VACIO:=”no” else VACIO:= “si” end Propiedades GCL

  32. Vacuidad del lenguaje (2) Ejemplo: Sean G = ( N , T , P , S )   Donde: N = { S, A , B , C } T = { a } S = { S } P = { S  AB B  Ca C  a } Verificar si es vacía: VIEJO NUEVO 1. { } { C } 2. { C } { C , B } 3. { C , B } { C , B } Propiedades GCL “Como S no pertenece a NUEVO, podemos concluir que la gramática es vacía.”

  33. Supresión de símbolos inútiles (1) • Diremos que un símbolo X es útil, si tenemos las dos cadenas de derivación: • S  * α Xβ* t , • sino X es “inútil”. • Se tienen dos aspectos para la utilidad de un símbolo. • i)El símbolo debe ser terminable ( X * t) • ii)El símbolo debe ser accesible Propiedades GCL

  34. Supresión de símbolos inútiles (2) Algoritmo i : (Obtiene una gramática equivalente G’ = (N’ , T , P’, S )) begin VIEJO := λ; NUEVO := A / ( A  t ) de P y se cumple (t ε T*) while VIEJO < > NUEVO do begin VIEJO := NUEVO; NUEVO := VIEJO U { B / B  α para α ε ( T U VIEJO )* } end N’ := NUEVO end Para obtener G’, incluimos en N’ todas las variables A que tengan una regla A  t. Si se tiene A  X1X2…Xn y cada Xi que es un terminal o una variable que esta en N’, entonces A pertenece a N’. Al final el nuevo conjunto de reglas P’ es el conjunto de todas las reglas cuyos símbolos están en el conjunto N’ U T. Propiedades GCL

  35. Supresión de símbolos inútiles (3) Algoritmo ii : (Obtiene una gramática equivalente G’’ = (N’’ , T’’ , P’’, S )) begin VIEJO := { S }; NUEVO := { X / ( S  α X β ) de P } while VIEJO < > NUEVO do begin VIEJO := NUEVO; NUEVO := VIEJO U { Y / ( A  α Y β ) de P, y A esta en VIEJO } end N’’ := NUEVO ∩ N’ T’’ := NUEVO ∩ T end Propiedades GCL Al final el nuevo conjunto de reglas P’’ es el conjunto de todas las reglas cuyos símbolos están todos en el conjunto N’’ U T’’.

  36. Ejemplo...(Continua) Sea G = ( N, T, P, S ) Siendo: N = { S, A, B, C, D } T = { a, b, c } P = { S  aAA B  BD A  aAb B  Ac A  aC C  b } Hallar una gramática equivalente que no tenga símbolos inútiles: Paso i:VIEJO NUEVO 1. { } { C } 2. { C } { C , A } 3. { C , A } { C , A , S , B } 4. { C , A , S , B } { C , A , S , B }  N’ Propiedades GCL La metanoción D no es terminable y las nuevas reglas son: P’ : S  aAA A  aAb B  Ac A  aC C  b

  37. viene…Ejemplo Paso ii:VIEJO NUEVO 1. { S } { S , A , a } 2. { S, A , a } { S , A , a , b, C } 3. { S, A , a , b , C } { S , A , a , b, C } La metanoción B no es accesible y las nuevas reglas son: Entonces N’’ := NUEVO ∩ N’ = { S, A, C } T’’ := NUEVO ∩ T = { a , b } Al final el nuevo conjunto de reglas P’’ es el conjunto de todas las reglas cuyos símbolos están en el conjunto N’’ U T’’. P’’ : S  aAA A  aAb A  aC C  b Por lo tanto se tiene la nueva gramática: G’’ = ( N’’ , T’’ , P’’ , S ) Propiedades GCL

  38. Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Semana 2 Nociones de gramática. Gramáticas de contexto libre.

More Related