teoría de lenguajes y compiladores nociones de gramática. gramáticas de contexto libre. semana 2...

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

Upload: epifanio-calleja

Post on 23-Jan-2016

231 views

Category:

Documents


0 download

TRANSCRIPT

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

Teoría de lenguajes y compiladores

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

Semana 2

Unidad I

Analizadores lexicográficos

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

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.

2

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

Objetivos Específicos

3

Desarrollar un analizador lexicográfico

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

Objetivos Instruccionales

Comprender el contexto teórico para analizar y determinar si un

lenguaje esta formulado de forma correcta.

4

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

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;

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

• 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

Tiras y lenguajes (2)

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

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.

Lenguaje

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

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

Descripción de un lenguajeLa enumeración

“Esta forma de descripción es muy pobre, ya que solo sirve para lenguajes formados por un número limitado de tiras”

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

• 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, …

Descripción de un lenguaje La algebraica

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

Arboles de análisis sintácticoTambié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 λ.

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

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

Arboles de análisis sintácticoTomando como referencia la gramática expresada en el ejemplo 1.

<expresion> * <expresion>

( <expresion> ) id

<expresion> + <expresion>

id id

<expresion>( id + id ) * id

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

Tipos de GramáticasNoam 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

Tipo 0 Tipo 1 Tipo 2 Tipo 3

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

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.

Definición

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

Componentes de una gramática

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

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

Derivaciones

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

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

“Estas gramaticas no tienen reestricciones con respecto al lado derecho de sus reglas, aunque se quiere que el lado izquierdo sea un no terminal”.

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

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

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

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ática independiente del contexto (Tipo 2)

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.

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

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

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

FORMA NORMAL DE GREIBACHSi 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*

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

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

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

Gramáticas no Ambiguas(1)

Sea G = ( T , N , P , S ) que acepta expresiones aritméticas como: 

X + Y – X * YDonde:

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} 

“G no es ambigua, porque tiene un solo árbol de derivación”

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

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

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

Gramáticas no Ambiguas (3)

Árbol Sintáctico

EXPR

TERMEXPR

EXPR TERM TERM

TERM

FACTOR

FACTORFACTOR

FACTOR

X XY Y+ *-

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

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}

“G es ambigua, porque tiene más de un árbol de derivación”

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

Gramáticas Ambiguas (2)

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 ) ) )

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

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

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”

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

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ón A’ 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 

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

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

Ejemplo:  A Aa | Ab | cd  Eliminar la recursividad por la izquierda Solución:

A cd A cdA’A’ a | b A’ aA’ | bA’

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

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

A

A b

A a

A a

c d

A

c d

a

b

a A´

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

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

Vacuidad del lenguaje (1)

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

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 }

“Como S no pertenece a NUEVO, podemos concluir que la gramática es vacía.”

Vacuidad del lenguaje (2)

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

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

Supresión de símbolos inútiles (1)

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

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.

Supresión de símbolos inútiles (2)

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

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 ∩ Tend 

Supresión de símbolos inútiles (3)

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

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

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’

La metanoción D no es terminable y las nuevas reglas son: P’ : S aAA A aAb B Ac A aC C b

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

viene…EjemploPaso ii: VIEJO NUEVO1. { 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 )

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

Teoría de lenguajes y compiladores

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

Semana 2

Unidad I

Analizadores lexicográficos