Upload
eduardo-roncal-cotrina
View
58
Download
0
Embed Size (px)
Citation preview
LENGUAJES Y GRAMATICAS
TEORIA DE LENGUAJES-2012-IIng. Sandra C. Rodríguez Avila
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
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
LENGUAJE
Esta formado por:– Un diccionario– Un conjunto de reglas para describir las
sentencias validas del lenguaje
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, …}
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
• 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
• 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.
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
• 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>}
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.
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.
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
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
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
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
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:
α⇒*β
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.
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
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.
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
A
BF
ECF Bc
aCF
abF
abc
ECc
Ebc
abc
DI
I
I
I
I
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
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.
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:
– 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.
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’
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
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.
• 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?
• 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
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)
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
• 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
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
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
• 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 ג
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’
• 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.
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á.
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.
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
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