You are on page 1of 43

LENGUAJES Y GRAMATICAS

TEORIA DE LENGUAJES-2012-I Ing. Sandra C. Rodrguez Avila

TIRAS Y LENGUAJES
Tira de caracteres: yuxtaposicin o concatenacin de caracteres. Tira minima o nula: Si el Vocabulario: V={a,b}, algunas tiras: , a, b, aaa, bb, etc. Concatenacin 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 enumeracin de todas las tiras de smbolos que constituyen el lenguaje. Ejm: L1= {ab, bc, cd} Descripcin algebraica: el lenguaje se describe a travs de una frmula algebraica. Ejm L1={an / nN +} N: conj. de enteros + L1={a, aa, aaa, .} incluyendo el cero N+: idem pero sin el cero 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, }

2.

3.

OTRA FORMA: NOCION DE GRAMATICA


Chomsky, 1959. Una gramtica est formada por el cuarteto: (N, T, P, S) N: Vocabulario No terminal T: Vocabulario Terminal P: conjunto de reglas de derivacin tira1 tira2 tira1 := tira2 tira1 se define como tira2 S: smbolo inicial o axioma

N, Vocabulario no Terminal: smbolos introducidos como elementos auxiliares para la definicin de la gramtica y que no figuran en las sentencias del lenguaje. Se denominan tambin metanociones, variables o no terminales T, Vocabulario Terminal: Todas las sentencias del lenguaje definido por esta gramtica estn formadas con los smbolos o caracteres de T.
La interseccin entre el vocabulario no terminal y el terminal es el conjunto vaco N T = {} La unin entre el vocabulario no terminal y el terminal es el vocabulario: NUT=V

P: reglas que se aplican desde el smbolo inicial para obtener las cadenas del lenguaje. Se definen por medio de la enumeracin 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: smbolo no terminal a partir del cual se aplican las reglas de la gramtica para obtener las distintas cadenas del lenguaje.

Ejemplos: Sea la gramtica: G1=(N, T, P, S) donde: N={S} T={a, b} P: Sab Sea la gramtica: G2=(N, T, P, S) donde: N={S, A, B} T={a, b, c, d} P: SASB Sd

SaSb

Ab AaA

aaAaaBB Bdcd

Sea la gramtica: 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 minsculas 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 programacin en minscula y negrita: if, then, else, begin, etc.

Vocabulario No Terminal: a) Letras maysculas del comienzo del abecedario: A, B, C, b) Nombres en minsculas: expr, operador, factor c) Notacin BNF, nombre entre parntesis angulares. Vocabulario: V = N U T, Se indica con letras maysculas del final del abecedario: U, V, W, Tiras o cadenas terminales: Se escriben con letras minsculas del final del abecedario: t, u, v, ,z Tiras o cadenas: Las tiras o cadenas que contienen smbolos terminales y no terminales indiferenciados se representan por las letras minsculas del alfabeto griego: , , , etc.

JERARQUIA DE LAS GRAMATICAS


Chomsky defini cuatro tipos de gramticas en funcin de la forma de las reglas de derivacin P. La clasificacin comienza con un tipo de gramtica que pretende ser universal, aplicando restricciones a sus reglas de derivacin se van obteniendo los otros tres tipos de gramticas.

Tipo 0 GEF

Tipo 1 Tipo 2 GSC GCL

Tipo 3 Gr. Regul.

A.

B.

Gramtica de tipo 0 o con estructura de frase: Las reglas P tienen la forma: siendo (N U T)+ y (N U T)* Gramtica 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: SaB SbA Aa AaS AbAA Bb BbS BaBB

C.

Gramtica 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 denominacin 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: SaB SbA Aa AaS AbAA Bb BbS BaBB

D. Gramtica de tipo 3 o regulares: Las reglas P tienen la forma: A aB A a siendo A, B N, a T


Esta relacionado con la teora de los autmatas, 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: SaS SaA AbA Ab

GRAMATICA DE CONTEXTO LIBRE


A. Derivacin directa o inmediata En una gramtica 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 adems existe una regla de P, que sea: A Se puede aplicar repetidamente la nocin de derivacin directa: = o 1 2 n = para n>0, entonces es una derivacin de longitud n: + Si se incluye el caso de identidad, se escribe: *

B. Definicin formal del lenguaje Sentencias L(G): Conjunto de tiras de smbolos terminales, que se pueden derivar partiendo del axioma de la gramtica, empleando las reglas P: L(G) = { x| (S * x) and (x T*)} En el ejemplo anterior: (2) (2) (1) S aSb aaSbbaaabbb Las 4 tiras S, aSb, aaSbb y aaabbb, cumplen con la primera condicin, pero con la segunda, slo cumple la tira aaabbb, por lo tanto es una sentencia de G1.

Ejemplo: Sea la gramtica: G1=(N, T, P, S) donde: N={S} T={a, b} P: Sab (1)


(1)

SaSb (2)

S ab
(2) (1)

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

S aSb aaSbbaaabbb

Formas Sentenciales, D(G): Conjunto de tiras de smbolos terminales o no terminales, que se pueden derivar partiendo del axioma de la gramtica, empleando las reglas P: D(G) = {| (S * ) and (N U T)*} En el ejemplo anterior: (2) (2) (1) S aSb aaSbbaaabbb

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

C. Derivacin izquierda Derivacin realizada sustituyendo, en la forma sentencial dada, la meta nocin o smbolo no terminal ms hacia la izquierda por algunas de sus partes derechas que la definen (reglas P). Anlogamente, se define la derivacin derecha: sustituciones, en la forma sentencial de la meta nocin o smbolo no terminal ms hacia la derecha por algunas de sus partes derechas que la definen (reglas P). Sean las reglas P de una gramtica: A BF B EC E a C b F c

A
I
I BF

ECF I

Bc

I abF I

aCF

ECc Ebc

abc

abc

D. rboles sintcticos Representacin grfica del proceso de reconocimiento o parsing de una sentencia o tira terminal. El nudo es la meta nocin que forma la parte izquierda de la regla, luego se colocan tantas ramas como smbolos (terminales o no terminales) haya concatenados en la parte derecha de la regla. Las ramas irn ordenadas de izquierda a derecha en el mismo orden en que aparecen los smbolos en la parte derecha de la regla. Ejemplo: S
(2)

S
a b

(1)

b
(1)

ab

aabb

E. Diagramas de Conway Representacin grfica que se populariz con la descripcin del PASCAL. Grafo dirigido que tiene dos componentes, adems de las lneas o flechas: El rectngulo: indica una meta nocin del vocabulario no terminal N. El crculo: indica un smbolo 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 nocin 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 smbolo no terminal: Una regla (no recursiva), que define el concepto o meta nocin 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 programacin de infinitas tiras o sentencias con un numero limitado de reglas BNF. Ejemplos:

Tren
<tren> <locomotora> <tren> <tren> <vagn>

Entero sin signo:


<entero> <digito> <entero> <entero> <digito>

Identificador:
<identificador> <letra> <identificador> <identificador> <letra o digito>

Si una meta nocin 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 sintctico cuando se tienen reglas recursivas por la izquierda.

Algoritmo de supresin 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 2. Se aade 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. Notacin ampliada de las reglas BNF (EBNF) Para simplificar el ms de un centenar de reglas BNF para la descripcin de la gramtica de los lenguajes de programacin se implement la notacin EBNF: a. Alternativas de una regla: <tren> <locomotora>|<tren> <vagn> <entero> <digito>| <entero> <digito> <digito>:= 0|1|2|3|4|5|6|7|8|9 b. Llaves: {XXX}, lo de dentro se puede repetir cero o un numero arbitrario de veces
<list parmetros> <parmetro>|< list parmetros>, <parmetro>

<list parmetros> <parmetro> {,<parmetro>} <entero> <digito>{<digito>} <id FORTRAN> <letra>|{<letra o digito>}5
0

c. Parntesis 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. Ambigedad Es esencial que cada sentencia de un lenguaje tenga un nico rbol sintctico, de lo contrario el compilador lo podra entender de varias formas. Una gramtica es ambigua si el lenguaje definido tiene alguna sentencia que tenga ms de un rbol sintctico No existe ninguna algoritmo que acepte una gramtica y determine con certeza y en un tiempo finito si la gramtica es ambigua o no.

Ejemplo: Sea la gramtica G5= ({S,A,B}, {a,b}, P, S ) P: SbA SaB Aa AaS AbAA Bb BbS BaBB Haga el rbol sintctico para la sentencia aabbab, la gramtica es ambigua? Ejemplo: Sea la gramtica G6, cuyas reglas son: Sa SS+S SS*S S(S) Haga el rbol sintctico para la sentencia a+a*a, la gramtica es ambigua?

La gramtica anterior tendra que modificarse: P: <expresin> <expresin> + <termino> <expresin> <termino> <termino> <termino>*<factor> <termino> <factor> <factor> a <factor> (<expresin>) Otro ejemplo: el else danzante <sent. IF> if<condicion> then<sent1>[else <sent2>] Si despus del else va otra sentencia IF, entonces es ambiguo? Cada else va asociado con el if ms cercano

H. Propiedades de las Gramticas de contexto Libre Simplificacin de las gramticas: Se debe evitar: reglas que produzcan smbolos que no se usen despus, o que produzcan la tira nula o bien que la regla acabe produciendo o llegando a la misma meta nocin en que se comenz. Todas estas imperfecciones se pueden subsanar realizando la transformacin de la gramtica original sucia, en otra resultante que este limpia Vacuidad del lenguaje: Gramtica que no tiene en su lenguaje ninguna tira terminal. Algoritmo para determinar si una gramtica es vaca, 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

Supresin de smbolos intiles: Sea la gramtica dada por (N,T,P,S), un smbolo X es til si: S * X *t Primero, se debe poder derivar alguna tira terminal del smbolo X (terminable) Segundo, X debe aparecer en alguna tira o forma sentencial derivable del axioma S (accesible) a. En el pimer paso, sea una gramtica G (N,T,P,S), L(G) <> , hallar una gramtica 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 smbolos 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 gramtica 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 gramtica. 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 gramtica es sin , "si se cumple una de las dos condiciones siguientes: No hay ninguna reglas en P Hay solo una regla asociada al axioma S y adems S no aparece en la parte derecha de ninguna regla de P. Algoritmo que convierte una gramtica a otra sin , primero se renen 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 smbolos de son anulables} end; N:=NUEVO end Si el axioma S es anulable, entonces pertenece al lenguaje y para aislarla aadimos a P, la regla: S | S amplindose N con S

Reglas Unitarias o A B Partiendo de una gramtica sin ,se transforma a otra sin reglas unitarias. Los conjuntos NA para cada A de N con las meta nociones B tales que A * B
begin 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 gramtica. Las gramticas 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 continuacin convierten cualquier gramtica a una gramtica equivalente en forma normalizada. Las restricciones impuestas para las reglas de reescritura, aseguran que la gramtica tenga ciertas propiedades importantes: como la garanta de que el algoritmo de reconocimiento sintctico terminar.

Forma Normal de Chomsky


Una gramtica 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 BC b. A a

En donde: A, B y C N y a T Teorema. Toda gramtica libre de contexto puede ser convertida a una gramtica equivalente en la forma normal de Chomsky.

Ejemplo FNC
Las reglas de la gramtica G1 son: S BA A 01AB0 A0 B1 Encontrar la gramtica equivalente que este en su FNC. Procedimiento: a. Las reglas S BA A 0 B 1 ya estan en FNC b. Para la regla restante A 01AB0 aplicar transformaciones

regla transformada se aade 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 A0 B1 A A1A2 A1 0 A2 A3A4 A3 1 A4 AA5 A5 BA6 A6 0

You might also like