Unidad I
This presentation is the property of its rightful owner.
Sponsored Links
1 / 39

Teoría de lenguajes y compiladores PowerPoint PPT Presentation


  • 98 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Teor a de lenguajes y compiladores

Unidad I

Analizador lexicográfico

Teoría de lenguajes y compiladores

Semana 2

Temas

Nociones de gramática. Gramáticas de contexto libre..


Objetivo general

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.


Objetivos espec ficos

Objetivos Específicos

  • Diseñar e implementar un analizador lexicográfico.

  • Diseñar e implementar un analizador sintáctico.

  • Diseñar e implementar un analizador semántico.


Objetivos instruccionales

Objetivos Instruccionales

Comprender el contexto teórico para analizar y determinar si un lenguaje esta formulado en forma correcta.


Tiras y lenguajes 1

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


Tiras y lenguajes 2

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


Lenguaje

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


Descripci n de un lenguaje la enumeraci n

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”


Descripci n de un lenguaje la algebraica

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” concatenadas.

  • 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


Teor a de lenguajes y compiladores

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


Teor a de lenguajes y compiladores

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


Tipos de gram ticas

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


Definici n

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


Componentes de una gram tica

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


    Derivaciones

    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

    Gramaticas


    Teor a de lenguajes y compiladores

    • 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”.


    Teor a de lenguajes y compiladores

    • 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


    Teor a de lenguajes y compiladores

    • 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.


    Forma normal de chomsky

    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


    Forma normal de greibach

    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


    Teor a de lenguajes y compiladores

    • 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


    Teor a de lenguajes y compiladores

    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”


    Teor a de lenguajes y compiladores

    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


    Teor a de lenguajes y compiladores

    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


    Teor a de lenguajes y compiladores

    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”


    Teor a de lenguajes y compiladores

    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


    Teor a de lenguajes y compiladores

    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


    Teor a de lenguajes y compiladores

    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


    Teor a de lenguajes y compiladores

    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’


    Teor a de lenguajes y compiladores

    Supresión de la recursividad por la izquierda (3)

    A

    A

    b

    A

    d

    c

    Recursividad

    a

    A

    a

    a

    A

    a

    c

    d

    b


    Teor a de lenguajes y compiladores

    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


    Teor a de lenguajes y compiladores

    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.”


    Teor a de lenguajes y compiladores

    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


    Teor a de lenguajes y compiladores

    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


    Teor a de lenguajes y compiladores

    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’’.


    Teor a de lenguajes y compiladores

    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


    Teor a de lenguajes y compiladores

    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


    Teor a de lenguajes y compiladores

    Unidad I

    Analizador lexicográfico

    Teoría de lenguajes y compiladores

    Semana 2

    Temas

    Nociones de gramática. Gramáticas de contexto libre..


  • Login