43
LENGUAJES Y GRAMATICAS TEORIA DE LENGUAJES- 2012-I Ing. Sandra C. Rodríguez

LENGUAJES Y GRAMATICAS

Embed Size (px)

Citation preview

Page 1: LENGUAJES Y GRAMATICAS

LENGUAJES Y GRAMATICAS

TEORIA DE LENGUAJES-2012-IIng. Sandra C. Rodríguez Avila

Page 2: LENGUAJES Y GRAMATICAS

TIRAS Y LENGUAJES

• Tira de caracteres: yuxtaposición o concatenación de caracteres.

• Tira minima o nula: λ• Si el Vocabulario: V={a,b}, algunas tiras: λ, a, b,

aaa, bb, etc.• Concatenación de caracteres: ab o x=abc• Longitud de una tira: si x=abc entonces │x│= 3,

│λ│= 0, │abab│=4• Potencia de una tira: si x=abc entonces

x0 = λ x1=abc x2=abcabc

Page 3: LENGUAJES Y GRAMATICAS

TIRAS Y LENGUAJES• Cabeza y cola de una tira: si x=abcd

Cabeza(x) = {λ, a, ab, abc, abcd}Cola(x) = {λ, d, cd, bcd, abcd}

• Producto cartesiano de conjuntos de tiras de caracteres: si A={a,b,cn} y B={d,e} entonces

AB ={ad, ae, bd, be, cnd, cne}A.λ = {λ}A = A

• Potencia de conjuntos: se obtiene realizando el producto del conjunto consigo mismo. Si A={a,b}

A0={λ}, A1=A, A2=AA y en general An=AAn-1 para n>0

• Cierre transitivo de un conjunto: A+

A+= A1 U A2 U A3 U….U An

• Cierre transitivo y reflexivo de un conjunto A*A*= A0 U A1 U A2 U A3 U….U An

Page 4: LENGUAJES Y GRAMATICAS

LENGUAJE

Esta formado por:– Un diccionario– Un conjunto de reglas para describir las

sentencias validas del lenguaje

Page 5: LENGUAJES Y GRAMATICAS

FORMAS PARA DESCRIBIR UN LENGUAJE

1. La enumeración de todas las tiras de símbolos que constituyen el lenguaje. Ejm:

L1= {ab, bc, cd}2. Descripción algebraica: el lenguaje se describe a través de una

fórmula algebraica. EjmL1={an / nɛN +} N: conj. de

enteros +L1={a, aa, aaa, ….} incluyendo el cero

N+: idem pero sin el cero3. Conjunto con una propiedad: la propiedad servirá para decidir si

una tira pertenece o no al lenguaje. Ejm:Si V = {a, b, c, d}

L1 ={x /(|x| = 3 and x ɛ V*)} L1={abc, aaa, aab, …}

Page 6: LENGUAJES Y GRAMATICAS

OTRA FORMA: NOCION DE GRAMATICA

• Chomsky, 1959.• Una gramática está formada por el cuarteto:

(N, T, P, S)– N: Vocabulario No terminal– T: Vocabulario Terminal– P: conjunto de reglas de derivación

tira1 tira2

tira1 := tira2

tira1 se define como tira2– S: símbolo inicial o axioma

Page 7: LENGUAJES Y GRAMATICAS

• N, Vocabulario no Terminal: símbolos introducidos como elementos auxiliares para la definición de la gramática y que no figuran en las sentencias del lenguaje. Se denominan también metanociones, variables o no terminales

• T, Vocabulario Terminal: Todas las sentencias del lenguaje definido por esta gramática están formadas con los símbolos o caracteres de T.

La intersección entre el vocabulario no terminal y el terminal es el conjunto vacío

N ∩ T = {Ø}La unión entre el vocabulario no terminal y el terminal es el vocabulario:

N U T = V

Page 8: LENGUAJES Y GRAMATICAS

• P: reglas que se aplican desde el símbolo inicial para obtener las cadenas del lenguaje. Se definen por medio de la enumeración de reglas o un metalenguaje, como por ejemplo BNF (Backus Naur Form ó Forma Normal de Backus) o EBNF (Extended Backus Naur Form ó Forma Normal de Backus Extendida)

• S: símbolo no terminal a partir del cual se aplican las reglas de la gramática para obtener las distintas cadenas del lenguaje.

Page 9: LENGUAJES Y GRAMATICAS

Ejemplos:• Sea la gramática:

G1=(N, T, P, S)donde: N={S}

T={a, b}P: S→ab S→aSb

• Sea la gramática:G2=(N, T, P, S)

donde: N={S, A, B}T={a, b, c, d}P: S→ASB A→b

aaA→aaBB S→d A→aAB→dcd

Page 10: LENGUAJES Y GRAMATICAS

• Sea la gramática:

G3=(N, T, P, S)

donde: N={<numero>, <digito>}

T={0,1,2,3,4,5,6,7,8,9}

P: <numero>:= <digito><numero>

<numero>:= <digito>

<digito>:= 0|1|2|3|4|5|6|7|8|9

S ={<numero>}

Page 11: LENGUAJES Y GRAMATICAS

NOTACION

Vocabulario Terminal:

a) Letras minúsculas del comienzo del abecedario: a, b, c,…

b) Operadores, tales como: +, -, *, etc.

c) Caracteres especiales: (, ), #, , , etc.

d) Digitos: 0,1,2,3,4,…, 9

e) Las palabras reservadas de los lenguajes de programación en minúscula y negrita: if, then, else, begin, etc.

Page 12: LENGUAJES Y GRAMATICAS

Vocabulario No Terminal:a) Letras mayúsculas del comienzo del abecedario: A,

B, C,…b) Nombres en minúsculas: expr, operador, factorc) Notación BNF, nombre entre paréntesis angulares.

Vocabulario: V = N U T,Se indica con letras mayúsculas del final del abecedario: U, V, W,…

Tiras o cadenas terminales:Se escriben con letras minúsculas del final del abecedario: t, u, v, …,z

Tiras o cadenas:Las tiras o cadenas que contienen símbolos terminales y no terminales indiferenciados se representan por las letras minúsculas del alfabeto griego: α, β, γ, etc.

Page 13: LENGUAJES Y GRAMATICAS

JERARQUIA DE LAS GRAMATICAS• Chomsky definió cuatro tipos de gramáticas en función de la

forma de las reglas de derivación P.

• La clasificación comienza con un tipo de gramática que pretende ser universal, aplicando restricciones a sus reglas de derivación se van obteniendo los otros tres tipos de gramáticas.

Tipo 3Gr. Regul.

Tipo 2

GCL

Tipo 1

GSC

Tipo 0

GEF

Page 14: LENGUAJES Y GRAMATICAS

A. Gramática de tipo 0 o con estructura de frase:

Las reglas P tienen la forma:

α→β

siendo α ε (N U T)+ y β ε (N U T)*

B. Gramática de tipo 1 o sensibles al contexto:

Las reglas P tienen la forma:

αAβ → αγβ

siendo A ε N, α y β ε (N U T)* y γ ε (N U T)+

Ejemplo: G2=(N, T, P, S)

donde: N={S, A, B}

T={a, b}

P: S→aB S→bA A→aA→aS A→bAA B→b

B→bS B→aBB

Page 15: LENGUAJES Y GRAMATICAS

C. Gramática de tipo 2 o con de contexto libre:• Las reglas P tienen la forma:

A→αsiendo A ε N, α ε (N U T)*

• Si cada regla se representa como (A, α), entonces:P C N x (N U T)*

• La denominación de contexto libre es porque se puede cambiar A por α, independientemente del contexto en el que aparezca A.

Ejemplo:Ejemplo: G2=(N, T, P, S)

donde: N={S, A, B}T={a, b}P: S→aB S→bA A→a

A→aS A→bAA B→bB→bS B→aBB

Page 16: LENGUAJES Y GRAMATICAS

D. Gramática de tipo 3 o regulares:• Las reglas P tienen la forma:

A → aB ó A → asiendo A, B ε N, a ε T• Esta relacionado con la teoría de los autómatas,

puesto que estas reconocen o analizan las tiras de un lenguaje regular.

Ejemplo: G3=(N, T, P, S)donde: N={A, S}

T={a, b}P: S→aS S→aA

A→bA A→b

Page 17: LENGUAJES Y GRAMATICAS

GRAMATICA DE CONTEXTO LIBRE

A. Derivación directa o inmediata• En una gramática G, se dice que la tira alfa produce

directamente la tira beta, α⇒β• , si se puede escribir:

α = δAμ β = δγμ para alguna tira δ, μ (que pueden ser nulas) y además existe una regla de P, que sea: A → γ

• Se puede aplicar repetidamente la noción de derivación directa:

α = γo ⇒γ1 ⇒γ2 ⇒… ⇒γn = βpara n>0, entonces es una derivación de longitud n:

α⇒+β• Si se incluye el caso de identidad, se escribe:

α⇒*β

Page 18: LENGUAJES Y GRAMATICAS

B. Definición formal del lenguaje

Sentencias L(G):• Conjunto de tiras de símbolos terminales, que se

pueden derivar partiendo del axioma de la gramática, empleando las reglas P:

L(G) = { x| (S ⇒* x) and (x εT*)}• En el ejemplo anterior:

(2) (2) (1)

S ⇒ aSb ⇒aaSbb⇒aaabbb

Las 4 tiras S, aSb, aaSbb y aaabbb, cumplen con la primera condición, pero con la segunda, sólo cumple la tira aaabbb, por lo tanto es una sentencia de G1.

Page 19: LENGUAJES Y GRAMATICAS

Ejemplo:• Sea la gramática:

G1=(N, T, P, S)donde: N={S}

T={a, b}P: S→ab (1) S→aSb (2)

(1)

S ⇒ ab (2) (1)

S ⇒ aSb ⇒ aabb (2) (2) (1)

S ⇒ aSb ⇒aaSbb⇒aaabbb

Page 20: LENGUAJES Y GRAMATICAS

Formas Sentenciales, D(G):• Conjunto de tiras de símbolos terminales o no

terminales, que se pueden derivar partiendo del axioma de la gramática, empleando las reglas P:

D(G) = {α| (S ⇒* α) and α ε (N U T)*}• En el ejemplo anterior:

(2) (2) (1)

S ⇒ aSb ⇒aaSbb⇒aaabbb

Las 4 tiras S, aSb, aaSbb y aaabbb, cumplen con las dos condiciones, por lo tanto son formas sentenciales de G1.

Page 21: LENGUAJES Y GRAMATICAS

C. Derivación izquierda• Derivación realizada sustituyendo, en la forma

sentencial dada, la meta noción o símbolo no terminal “más hacia la izquierda” por algunas de sus partes derechas que la definen (reglas P).

• Análogamente, se define la derivación derecha: sustituciones, en la forma sentencial de la meta noción o símbolo no terminal “más hacia la derecha” por algunas de sus partes derechas que la definen (reglas P).

• Sean las reglas P de una gramática:A→ BFB→ ECE →aC→ bF →c

Page 22: LENGUAJES Y GRAMATICAS

A

BF

ECF Bc

aCF

abF

abc

ECc

Ebc

abc

DI

I

I

I

I

Page 23: LENGUAJES Y GRAMATICAS

D. Árboles sintácticos• Representación gráfica del proceso de reconocimiento o

“parsing” de una sentencia o tira terminal.• El nudo es la meta noción que forma la parte izquierda

de la regla, luego se colocan tantas ramas como símbolos (terminales o no terminales) haya concatenados en la parte derecha de la regla. Las ramas irán ordenadas de izquierda a derecha en el mismo orden en que aparecen los símbolos en la parte derecha de la regla.Ejemplo:

S

a b

S

a bS

a b

(1)

(1)

(2)

abaabb

Page 24: LENGUAJES Y GRAMATICAS

E. Diagramas de Conway• Representación gráfica que se popularizó con la

descripción del PASCAL.• Grafo dirigido que tiene dos componentes, además de

las líneas o flechas:– El rectángulo: indica una meta noción del vocabulario

no terminal N. – El círculo: indica un símbolo terminal, que por lo tanto

será un elemento del vocabulario terminal T.• El recorrido comienza por la izquierda, por la rama

donde se coloca el nombre de la meta noción a definir.• Se sigue el recorrido en el sentido de las flechas, y cada

elemento que se va encontrando se va concatenando a lo que ya se tiene. Se sale por la parte derecha del diagrama. Ver figuras.

Page 25: LENGUAJES Y GRAMATICAS

F. Recursividad• Mecanismo amplificador que nos permitirá definir formas

complicadas de un lenguaje con reglas sucintas.• Se requieren de dos reglas por lo menos para definir

recursivamente una variable o símbolo no terminal:– Una regla (no recursiva), que define el concepto o

meta noción elemental de partida– Una o mas reglas recursivas para permitir un

crecimiento partiendo del concepto elemental anterior (la primera vez)

• La recursividad es una forma de definir un lenguaje de programación de infinitas tiras o sentencias con un numero limitado de reglas BNF.

• Ejemplos:

Page 26: LENGUAJES Y GRAMATICAS

– Tren<tren> → <locomotora>

<tren> → <tren> <vagón>

– Entero sin signo:<entero> → <digito>

<entero> → <entero> <digito>– Identificador:

<identificador> → <letra>

<identificador> → <identificador> <letra o digito>

• Si una meta noción A, cumple que A ⇒ αAβ (regla autoimbricada) se dice que es recursiva.

• Si α es nula, entonces tenemos que A ⇒ Aβ, por lo tanto es “recursiva por la izquierda”.

• Hay algunas dificultades en el reconocimiento sintáctico cuando se tienen reglas recursivas por la izquierda.

Page 27: LENGUAJES Y GRAMATICAS

Algoritmo de supresión de la recursividad por la izquierda

1. Se toman cada grupo de las reglas de las variables A por separado (las recursivas y no recursivas)

A→ A α1 | A α2 |…| A αp

A→ β 1 | β 2 |… |β q – Se añade una nueva variable A’ y las reglas se

sustituyen por:A→ βi A→ βi A’ A’→ αj A’→ αj A’

Ejemplo:A→ Aa| Ab| cd

Aplicando las transformaciones, se obtiene:A→ cd| cdA’ A’→ a|b A’ → aA’| bA’

Page 28: LENGUAJES Y GRAMATICAS

G. Notación ampliada de las reglas BNF (EBNF)• Para simplificar el más de un centenar de reglas BNF para

la descripción de la gramática de los lenguajes de programación se implementó la notación EBNF:

a. Alternativas de una regla: <tren> → <locomotora>|<tren> <vagón><entero> → <digito>| <entero> <digito>

<digito>:= 0|1|2|3|4|5|6|7|8|9b. Llaves: {XXX}, lo de dentro se puede repetir cero o un

numero arbitrario de veces<list parámetros> → <parámetro>|< list parámetros>, <parámetro>

<list parámetros> → <parámetro> {,<parámetro>}<entero> → <digito>{<digito>}

<id FORTRAN> → <letra>|{<letra o digito>}5

0

Page 29: LENGUAJES Y GRAMATICAS

c. Paréntesis cuadrados: [XXX] lo de dentro se puede repetir cero o una vez

[XXX] ={XXX}1

0<sent. IF> → if<condicion> then<sent1>[else <sent2>]

H. Ambigüedad• Es esencial que cada sentencia de un lenguaje tenga

un único árbol sintáctico, de lo contrario el compilador lo podría entender de varias formas.

• Una gramática es ambigua si el lenguaje definido tiene alguna sentencia que tenga más de un árbol sintáctico

• No existe ninguna algoritmo que acepte una gramática y determine con certeza y en un tiempo finito si la gramática es ambigua o no.

Page 30: LENGUAJES Y GRAMATICAS

• Ejemplo:

Sea la gramática G5= ({S,A,B}, {a,b}, P, S )

P:

S→bA S→aB A→a A→aS

A→bAA B→b B→bS B→aBB

Haga el árbol sintáctico para la sentencia “aabbab”, ¿la gramática es ambigua?

• Ejemplo:

Sea la gramática G6, cuyas reglas son:

S→a S→S+S S→S*S S→(S)

Haga el árbol sintáctico para la sentencia “a+a*a”, ¿la gramática es ambigua?

Page 31: LENGUAJES Y GRAMATICAS

• La gramática anterior tendría que modificarse:

P:

<expresión> → <expresión> + <termino>

<expresión> → <termino>

<termino> → <termino>*<factor>

<termino> → <factor>

<factor> → a

<factor> → (<expresión>)• Otro ejemplo: el else danzante

<sent. IF> → if<condicion> then<sent1>[else <sent2>]

Si después del else va otra sentencia IF, entonces es ambiguo?

Cada else va asociado con el if más cercano

Page 32: LENGUAJES Y GRAMATICAS

H. Propiedades de las Gramáticas de contexto Libre• Simplificación de las gramáticas:

– Se debe evitar: reglas que produzcan símbolos que no se usen después, o que produzcan la tira nula o bien que la regla acabe produciendo o llegando a la misma meta noción en que se comenzó.

– Todas estas imperfecciones se pueden subsanar realizando la transformación de la gramática original “sucia”, en otra resultante que este “limpia”

• Vacuidad del lenguaje:– Gramática que no tiene en su lenguaje ninguna tira

terminal.– Algoritmo para determinar si una gramática es vacía,

L(G) =Ø (sin sentencias inclusive sin tira nula)

Page 33: LENGUAJES Y GRAMATICAS

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

Page 34: LENGUAJES Y GRAMATICAS

• Supresión de símbolos inútiles:– Sea la gramática dada por (N,T,P,S), un símbolo X

es útil si:

S ⇒* αXβ ⇒*t– Primero, se debe poder derivar alguna tira terminal

del símbolo X (terminable)– Segundo, X debe aparecer en alguna tira o forma

sentencial derivable del axioma S (accesible)

a. En el pimer paso, sea una gramática G (N,T,P,S), L(G) <> Ø, hallar una gramática equivalente G’ (N’,T,P’,S) tal que para cualquier A de N’ se tiene alguna t de T* para la que A⇒*t, es decir solo se conservara los símbolos terminables

Page 35: LENGUAJES Y GRAMATICAS

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 →α) de P y

α ε (T U VIEJO)*}

end;

N’:=NUEVO

end

Se incluyen en N’ todas las variables A que tengan una regla A →t

P’. conj. de reglas cuyos simbolos estan en N’ U T

Page 36: LENGUAJES Y GRAMATICAS

b. En el segundo paso, dada la gramática G (N,T,P,S) resultante de la anterior, se halla otra G’ (N’,T’,P’,S) tal que cualquier simbolo X de N’ U T’ existe una α y β de (N’ U T’ )* tal que S ⇒* αXβ. Algoritmo:

begin

VIEJO := {S}

NUEVO := {X |(S → αXβ) de P U VIEJO

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;

(P’:conj. de reglas cuyos simbolos estan en N’ U T’)

end

Page 37: LENGUAJES Y GRAMATICAS

• Reglas Lambda o A → ג– Si ג forma parte de L(G), entonces no se podrá eliminar

todas las reglas ג de la gramática.– Si no es así, debemos hallar para cada variable A, si se

tiene que A ⇒* ג, en cuyo caso se dice que A es “anulable”.

– Una gramática es “sin ג" , si se cumple una de las dos condiciones siguientes:

No hay ninguna reglas en PHay solo una regla ג asociada al axioma S→ ג

y además S no aparece en la parte derecha de ninguna regla de P.

– Algoritmo que convierte una gramática a otra sin ג, primero se reúnen en un conjunto N’ todas las variables A anulables que produzcan ג

Page 38: LENGUAJES Y GRAMATICAS

begin

VIEJO := Ø

NUEVO := {A|(A → ג) de P}

while VIEJO <>NUEVO do begin

VIEJO := NUEVO;

NUEVO := VIEJO U {B|(B →α) y todos los símbolos de α son anulables}

end;

N’:=NUEVO

end– Si el axioma S es anulable, entonces ג pertenece al

lenguaje y para aislarla añadimos a P’, la regla:

S’ → ג |S

ampliándose N con S’

Page 39: LENGUAJES Y GRAMATICAS

• Reglas Unitarias o A →B– Partiendo de una gramática sin ג, se transforma a otra

sin reglas unitarias.– Los conjuntos NA para cada A de N con las meta

nociones B tales que A ⇒* Bbegin

VIEJO := Ø;NUEVO := A; while VIEJO <>NUEVO do begin

VIEJO := NUEVO; NUEVO := VIEJO U {C|(B →C)en P y B esta en

VIEJO}end;NA:=NUEVO

end– P’, si B →α esta en P y no es una regla unitaria, poner A

→α en P’ para todas las A para las que B este en NA.

Page 40: LENGUAJES Y GRAMATICAS

FORMAS NORMALES

• Una forma normal se define imponiendo restricciones a la forma permitida de las reglas de una gramática.

• Las gramáticas en forma normal, generan la totalidad de lenguajes libres de contexto.

• Dos formas normales importantes son:– La forma normal de Chomsky– La forma normal de Greibach

• Las transformaciones mostradas a continuación convierten cualquier gramática a una gramática equivalente en forma normalizada.

• Las restricciones impuestas para las reglas de reescritura, aseguran que la gramática tenga ciertas propiedades importantes: como la garantía de que el algoritmo de reconocimiento sintáctico terminará.

Page 41: LENGUAJES Y GRAMATICAS

Forma Normal de Chomsky

• Una gramática libre de contexto G = (N, T, P, S) está en la Forma Normal de Chomsky si cada regla tiene alguna de las siguientes formas:

a. A BCb. A a

En donde: A, B y C N y a T• Teorema. Toda gramática libre de contexto

puede ser convertida a una gramática equivalente en la forma normal de Chomsky.

Page 42: LENGUAJES Y GRAMATICAS

Ejemplo FNC

• Las reglas de la gramática G1 son:S → BA A → 01AB0 A → 0 B → 1Encontrar la gramática equivalente que

este en su FNC.Procedimiento:• Las reglas S → BA A → 0 B → 1 ya

estan en FNC• Para la regla restante A → 01AB0

aplicar transformaciones

Page 43: LENGUAJES Y GRAMATICAS

regla transformada se añade P’

A → 01AB0 A → A1A2 A1 → 0

A2 → 1AB0 A2 → A3A4 A3 →1

A4 → AB0 A4 → AA5

A5 → B0 A5 → BA6 A6 →0

Luego N’ = {S, A, B, A1, A2, A3, A4, A5, A6} y las reglas P’ son:

S → BA A → 0 B → 1 A → A1A2

A1 → 0 A2 → A3A4 A3 →1

A4 → AA5 A5 → BA6 A6 →0