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

Teoría de lenguajes y compiladores

Jan 03, 2016

Download

Documents

thaddeus-nicoli

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. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Teoría de lenguajes y compiladores

Teoría de lenguajes y compiladores

Unidad I

Analizador lexicográfico

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

Temas

Semana 2

Page 2: Teoría de lenguajes y compiladores

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

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.

3

Page 4: Teoría de lenguajes y compiladores

Objetivos Instruccionales

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

4

Page 5: Teoría de lenguajes y compiladores
Page 6: Teoría de lenguajes y compiladores

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;

No

cio

ne

s

Page 7: Teoría de lenguajes y compiladores

• 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

No

cio

ne

sTiras y lenguajes (2)

Page 8: Teoría de lenguajes y compiladores

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 N

oci

on

es

Page 9: Teoría de lenguajes y compiladores

• 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

No

cio

ne

s

“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

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

Descripción de un lenguaje La algebraica

No

cio

ne

s

Page 11: Teoría de lenguajes y compiladores

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

No

cio

ne

s

Page 12: Teoría de lenguajes y compiladores

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

No

cio

ne

s

Page 13: Teoría de lenguajes y compiladores

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

Gra

tica

s

Page 14: Teoría de lenguajes y compiladores

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ónG

ram

átic

as

Page 15: Teoría de lenguajes y compiladores

Componentes de una gramáticaG

ram

átic

as

Page 16: Teoría de lenguajes y compiladores

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

Gra

ma

tica

s

Page 17: 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

Gra

tica

s

“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

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

Gra

tica

s

Page 19: Teoría de lenguajes y compiladores

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)

Gra

tica

s

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

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

Gra

tica

s

Page 21: Teoría de lenguajes y compiladores

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*

Gra

tica

s

Page 22: 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”.

Gra

tica

s

Page 23: 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 * 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”

Gra

tica

s

Page 24: 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

Gra

tica

s

Page 25: Teoría de lenguajes y compiladores

Gramáticas no Ambiguas (3)

Árbol Sintáctico

EXPR

TERMEXPR

EXPR TERM TERM

TERM

FACTOR

FACTORFACTOR

FACTOR

X XY Y+ *-

Gra

tica

s

Page 26: 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}

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

Gra

tica

s

Page 27: Teoría de lenguajes y compiladores

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

Gra

tica

s

Page 28: 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”

Re

curs

ivid

ad

Page 29: 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ó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 

Re

curs

ivid

ad

Page 30: 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:

Re

curs

ivid

ad

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

Page 31: Teoría de lenguajes y compiladores

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

Re

curs

ivid

ad A

A b

A a

A a

c d

A

c d

a

b

a A´

Page 32: Teoría de lenguajes y compiladores

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

Pro

pie

da

de

s G

CL

Vacuidad del lenguaje (1)

Page 33: Teoría de lenguajes y compiladores

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

Pro

pie

da

de

s G

CL

Vacuidad del lenguaje (2)

Page 34: Teoría de lenguajes y compiladores

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

rop

ied

ad

es

GC

L

Page 35: Teoría de lenguajes y compiladores

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

rop

ied

ad

es

GC

L

Page 36: Teoría de lenguajes y compiladores

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

rop

ied

ad

es

GC

L

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

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’

Pro

pie

da

de

s G

CL

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

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 } 

Pro

pie

da

de

s G

CL

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

Teoría de lenguajes y compiladores

Unidad I

Analizador lexicográfico

Temas

Semana 2

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