introduccion a los lenguajes

65
GRAMÁTICAS Y LENGUAJES ÍNDICE: - DEFINICIONES DE TEORÍA DE LENGUAJES FORMALES...............2 - DEFINICIÓN FORMAL DE GRAMÁTICA.............................4 - GRAMÁTICA RECURSIVA........................................ 9 - GRAMÁTICA AMBIGUA..........................................9 - EJERCICIOS................................................13 - RELACIONES................................................21 - PROPIEDADES DE UNA RELACIÓN...............................21 - PRODUCTO DE DOS RELACIONES................................21 - SUMA DE RELACIONES (UNIÓN)................................22 - CIERRE TRANSITIVO.........................................23 - IMPLEMENTACIÓN DE UNA RELACIÓN EN LA MAQUINA..............24 - RELACIONES BINARIAS APLICADAS A LENGUAJES FORMALES.........26 - RESTRICCIONES DE UNA GRAMÁTICA............................28 - CHEQUEO DE LAS RESTRICCIONES DE LA GRAMÁTICA..............29 - NOTACIÓN BNF EXTENDIDA (EBNF).............................31 - DIAGRAMAS SINTÁCTICOS..................................... 33 - JERARQUÍA DE GRAMÁTICAS DE CHOMSKY........................35 - REFERENCIAS...............................................38 1

Upload: sarairoman125

Post on 14-Sep-2015

235 views

Category:

Documents


0 download

DESCRIPTION

lenguajes y mas

TRANSCRIPT

GRAMTICAS Y LENGUAJES

Gramticas y Lenguajes

GRAMTICAS Y LENGUAJES

PRIVATE

NDICE:- DEFINICIONES DE TEORA DE LENGUAJES FORMALES2

- DEFINICIN FORMAL DE GRAMTICA4

- GRAMTICA RECURSIVA9

- GRAMTICA AMBIGUA9

- EJERCICIOS13

- RELACIONES21

- PROPIEDADES DE UNA RELACIN21

- PRODUCTO DE DOS RELACIONES21

- SUMA DE RELACIONES (UNIN)22

- CIERRE TRANSITIVO23

- IMPLEMENTACIN DE UNA RELACIN EN LA MAQUINA24

- RELACIONES BINARIAS APLICADAS A LENGUAJES FORMALES26

- RESTRICCIONES DE UNA GRAMTICA28

- CHEQUEO DE LAS RESTRICCIONES DE LA GRAMTICA29

- NOTACIN BNF EXTENDIDA (EBNF)31

- DIAGRAMAS SINTCTICOS33

- JERARQUA DE GRAMTICAS DE CHOMSKY35

- REFERENCIAS38

GRAMTICAS Y LENGUAJES

Est relacionado con los analizadores lxico y sintctico.

DEFINICIONES DE TEORA DE LENGUAJES FORMALES:

* LENGUAJE: Conjunto finito o infinito de sentencias.

* SENTENCIA: Secuencia de smbolos terminales. Desde el punto de vista de los lenguajes formales, una sentencia podra ser un programa y un lenguaje de programacin sera el conjunto de todos los posibles programas que se pudieran escribir.

* GRAMTICA: Conjunto finito de reglas que definen un lenguaje. Para un lenguaje dado pueden haber diferentes gramticas, pero una gramtica genera un nico lenguaje y adems permite definir la estructura sintctica de las sentencias.

* METALENGUAJE: Es un lenguaje que nos permite definir a otro lenguaje.

Tipos de metalenguajes: Notacin BNF (Backus-Normal-Form).

(Notacin de Backus y Naur)

-Esta notacin est compuesta

por reglas o producciones.

((

-TERMINAL

Unidad mnima sintctica en que

estn compuestos los programas

(lenguajes) (TOKEN).

* SMBOLO:

-NO TERMINAL

"Estructuras" de los

programas.

* ALFABETO: o Vocabulario terminal en relacin con el lenguaje, VT es el conjunto de smbolos terminales que se utiliza para formar sentencias.

{ begin,if,var,... } S VT

S = smbolo terminal.

* SECUENCIA O STRING: Se puede representar en forma de letras:

x = 'ABCD' A,B,C,D VTLa longitud de una secuencia de smbolos terminales se representa: (x( = 4.

* CONCATENACION: Es una operacin sobre strings; dada x e y se concatenan poniendo una detrs de otra:

x ='ABCD' y ='EF' xy = z ='ABCDEF' (xy( = (x( + (y(

* CABEZA DE UNA SECUENCIA: Subsecuencia que arranca a partir del primer smbolo:

cabezas de x = { 'A' , 'AB' , 'ABC' , ... } Head

* COLA DE UNA SECUENCIA: Subsecuencia que arranca a partir del ltimo smbolo:

colas de z = { 'F' , 'EF' , 'DEF' , ... } Tail

* PRODUCTO DE CONJUNTOS DE SECUENCIAS: Dados los conjuntos de secuencias A y B, el producto es:

C = { xy / x A /\ y B } A = { abc,ca,cc }

C = A * B B = { aa,c }

C = { abcaa,abcc,caaa,cac,ccaa,ccc }

* POTENCIA N-ESIMA DE UNA SECUENCIA: Es una concatenacin "n" veces:

n

Xn = XXXXX...X X = ab X3 = ababab

* POTENCIA N-ESIMA DE UN ALFABETO V:

Vn = Conjunto de todas las secuencias de longitud n que se pueden formar a partir de V = { S1...Sn / S1,S2,...,Sn V }

V = { a,b,c } V3 = { aaa,aab,aac,aba,aca,... }

* CIERRE TRANSITIVO (+): (positive closure).

1

V+ (((> Todas las posibles secuencias no nulas que se pueden formar con los smbolos de V de longitud arbitraria.

* SECUENCIA NULA = :

V0 = { }

(( = 0

* CIERRE TRANSITIVO REFLEXIVO (*):

2

V*V = V+ = VV* (xn( = n (x(DEFINICIN FORMAL DE GRAMTICA:

Una gramtica es una cudrupla (R , Z , VT , VN) donde:

VN = Conjunto finito de smbolos no terminales.

VT = Conjunto finito de smbolos terminales.

Z = Smbolo no terminal principal, es el que aparece en la raz del rbol. Z VN.

R = Es un conjunto finito de pares, llamados reglas de sustitucin o tambin, producciones, tal que cada produccin (x,) se escribe x x ::= ; donde x V+ y V*

3

a VT (letras minsculas).

A VN (letras maysculas).

x , y , z VT* (((((((((((

secuencias de smbolos terminales.

, , ... V* R = { Z 1 , N2 2 ,...}

secuencias

Con el smbolo G(Z) se suele denotar a una gramtica cuyo smbolo principal es Z. El lenguaje definido por la gramtica G se denota por L(G).

El proceso de sustitucin se representa por "(((>" y determina la derivacin; en sentido inverso se denomina reduccin.

ASG (((> VAR = EXP ; (((> VAR = TER REX ;

ASG (((>2 VAR = TER REX ;

(((> derivacin simple (((>2 derivacin mltiple.

Z (((>+ x L (aplicamos una o ms reglas de la gramtica).

ASG (((>+ VAR = TER REX ;

Z (((>* (aplicamos ninguna o ms reglas de la gramtica).

Z (((>0 Z =

Z (((>+

Z (((>*

Z =

Si partimos del smbolo principal:

Z (((>* V* = forma sentencial

Z (((>+ x VT*x = sentencia

x L(G)

Se define lenguaje de una gramtica G:

L(G) = { x / Z (((>G+ x /\ x VT* }

Sea el rbol:

Z

((((((((((((((((((((( A = B

( (((((((((((

n x y

( ( 1 ;

expresando su derivacin:

Z ((> A = B ((> n = B ((> n = x y ((> n = 1 y ((> n = 1 ;

Z (((>+ n = 1 ;

Otras posibles derivaciones:

Z ((> A = B ((> n = B ((> n = x y ((> n = x ; ((> n = 1 ;

Z ((> A = B ((> A = x y ((> n = x y ((> n = x ; ((> n = 1 ;

por tanto el rbol refleja las posibles derivaciones de una forma nica.

Se define frase a las secuencias que se pueden generar de un smbolo.

N (((>+ es frase de N

B (((>+ x y frase simple

B (((>+ 1 y

frases de B.

B (((>+ 1 ;

B (((>+ x ;

Las frases simples son aqullas que se generan con la aplicacin de una derivacin simple; son empleadas en el programa de reconocimiento (parsing), que consiste en, dada una sentencia y una gramtica, calcular una derivacin para esa sentencia:

Z ((> ... ((> ... ((> sentencia.

esto lo realiza el anlisis sintctico.

Es importante la localizacin de las frases simples, pues nos permitir obtener las formas sentenciales.

Si tenemos tres secuencias concatenadas de la siguiente forma:

Z ((>+ si Z ((>+ A B y A ((>+ entonces es frase de A.

La derivacin cannica (rightmost derivation) consiste: dada una forma sentencial aplicamos la gramtica al smbolo no terminal ms a la derecha (en la reduccin estar situado ms a la izquierda).

Z

A = B

A = x y

A = x ;

A = 1 ;

n = 1 ;

se representa por ((>C ((>rm

Nos interesa realizar reducciones cannicas, ya que origina, en un conjunto de smbolos, una frase simple situada a la izquierda. A la frase simple ms a la izquierda de una forma sentencial se le llama handle o pivote.

handle ==> n , 1 , ; , x y , A = B

El handle es interesante en un proceso de reconocimiento, ya que a la hora de construir el rbol no interesa almacenar en memoria todo el lenguaje fuente, adems es normal que se lea de izquierda a derecha, y conforme se vaya leyendo el texto fuente ir construyendo el rbol:

Z

( ((((((((((((((((((((((((((((((((((((((((( ( ( ( ( ( Q R ( ( ((((((((( ((((((((((( ( ( ( ( ( ( ( ( N F G ( ( ( (((((( ( ((((((((((( ( ( a b c d e f g h ((( (marca de final)

La mayora de los procedimientos de reconocimiento intentan que el mtodo pueda trabajar con la misma cantidad de informacin antes de empezar a reducir. Todo esto lo utiliza el mtodo ascendente.

(1) bc se reducen a N sin conocer el resto.

Por tanto, vamos a tener un conjunto de gramticas asociadas a mtodos de reconocimiento. Suponiendo una gramtica que permite (1), realizamos dicha reduccin y as eliminamos almacenamiento de memoria, quedndonos slo con la sentencia N.

La forma sentencial cannica sera: aN resto de fichero fuente; que va estar compuesto de dos partes: lo almacenado en memoria (aN) y lo que queda por leer del texto fuente.

A continuacin leeramos "d", que sera el handle y lo reduciramos a F, luego tendramos:

a N F

a Q (disminuiremos capacidad de almacenamiento) Handle

y as sucesivamente:

a Q e f g h

a Q G h

handle

a Q R

Z

En la prctica, suele ser difcil construir gramticas en las que solamente leyendo el ltimo elemento de la reduccin se produzca sta; como vemos hace falta tambin el siguiente elemento. El nombre del mtodo suele tener un nmero entre parntesis, que es el nmero de smbolos necesarios para realizar la reduccin. Lo ms normal es que sea uno (1).

GRAMTICA RECURSIVA:

Es aqulla en la que un smbolo no terminal puede ser definido a partir de ese mismo smbolo no terminal:

4 N

( ((((((( ( ( (el lenguaje se convierte en infinito)

( ( ((((((( N

La gramtica es recursiva por la izquierda si = , es decir: N (((>+ N

N generalmente no se suele admitir,

( ya que se llamara a s misma

((((( continuamente y nunca terminara

( ( el proceso (es ms problemtica

( ( en reconocedores sintcticos).

((((( N

La gramtica es recursiva por la derecha si = :

N N (((>+ N

( ((((( ( ( ((((( N

GRAMTICA AMBIGUA:

Cuando una misma sentencia puede generarse mediante dos rboles distintos. Es decir, existe una doble interpretacin. En general no es deseable:

Z

Z + Z ( a

Z Z

( ( (((((((((((((((( ((((((((((((((((

( ( ( ( ( ( Z ( Z Z ( Z

( ( ( ( ( ( ((((((((((( ( ( ( ( (((((((((((

( ( ( ( ( ( ( ( ( ( Z ( Z ( ( ( ( Z ( Z

( ( ( ( ( ( ( ( ( ( a + a + a a + a + a

Si no interesa una gramtica de este tipo, deberamos intentar cambiar de gramtica de forma que ambas definieran el mismo lenguaje:

Z

Z Z + N ( N

((((((((((((((((((N a

( ( ( Z ( N

( ( (

((((((((((((( ( (

( ( ( ( (

Z ( N ( (

( ( ( ( (

( ( ( ( (

N ( ( ( (

( ( ( ( (

a + a + a

- Se puede, dada una gramtica recursiva por la izquierda, construir una gramtica no recursiva por la izquierda conservando el lenguaje que genera. Para ello debemos saber qu lenguaje es el generado por una gramtica dada:

Dada G(Z): Z a ( b ( c ( Z a ( Z b ( Z c ( Z 0 ( Z 1

Objetivo (( L(G)

VT = { a, b, c, 0, 1 }

VN = { Z }

L = { x / Z (((>+ x /\ x VT* }

Z (((> a

(((> a a

Z (((> Z a

(((> b a

(((> c a

L = { a,b,c,aa,ba,ca,ab,bb,cb,ac,bc,cc,a0,b0,c0,a1,... }

al ser una gramtica recursiva, el lenguaje es infinito:

(((> Z a a

(((> Z b a

Z (((> Z a

(((> Z c a

(((> Z 0 a

(((> Z 1 a

en definitiva, por extensin no lo podemos especificar:

L = secuencias de {a, b, c, 0, 1} que comienzan por { a, b, c }

o tambin:

L = { x y1 ... yn } n ( 0 /\ x { a, b, c } /\ yi VT

Veamos ahora el proceso inverso: definir un lenguaje y construir su gramtica:

L = conjunto de naturales pares

VT = { 0, 1, 2, 3,..., 9 }

Todo nmero par constar de tres partes:

((((((((((((((((((((((((((((

( P ( I ( U (

(((((((((((((((((((((((((((( {1..9}

{0..9}

par = {0,2,4,6,8}

excepto cuando son nmeros de una o dos cifras. En general la gramtica ser:

N P I U P 1 (..( 9

I I0 ( I1 ( I2 (...( I9 ( 0 (...( 9

I I D ( D simplificando D 0 (..( 9

U 0 ( 2 ( 4 ( 6 ( 8 N

( ((((((((((((( ( ( ( P I U

( ( ( ( ((((( ( N = 3456 ( ( ( ( ( I D ( ( ( ( ( ( ( ( ( ( D ( ( ( ( ( ( 3 4 5 6

- Si n = 34 N

( ((((((((((((( ( ( ( P I U

( ( ( ( ( ( 3 4 luego: I

I D (

- Si n = 2 N

( ((((((((((((( ( ( ( P I U

( ( ( ( ( (

2

Si P

1 ( 2 (..( 9 ( se generara una secuencia que no est en el lenguaje:

N

( ((((((((((((((((( ( ( ( P I U

( ( ( ( ((((((( ( ( ( ( ( ( I D ( ( ( ( ( ( ((((( ( ( ( ( ( ( ( ( I D ( ( ( ( ( ( ( 0 5 0

entonces: N

P I U ( 2 ( 4 ( 6 ( 8

EJERCICIOS:

1.- a) Sea L = { a bn a / n ( 0 } hallar la gramtica.

L = { a b a, a b b a, a a, ... } ( VT*

S a T a

T T b ( n ( 0

b) L = { an bn / n > 0 }

L = { a b, a a b b, a a a b b b, ... } ( VT+

S a S b ( a b

Estos dos ejemplos corresponden a gramticas libres de contexto que se utilizan para lenguajes de programacin.

Tambin existen gramticas ms complicadas, dependientes del contexto como:

L = { an bn an / n > 0 }

EJERCICIOS:

Construir el rbol dada la sentencia:

expresin E

T ( E + T ( E - T

G1 trmino T

F ( T * F ( T / F

factor F

( E ) ( i

E (( smbolo principal

E rbol mnimo

VT = { +, -, *, /, (, ), i }

(

(

VN = { E, T, F }

T

(

Sentencia mnima (( i

(

F

E (((> T (((> F (((> i

(

(

E (((>+ i

i

Sentencia: ( i ) E sentencia: i*i E

( (

( ( T T

( ( ( ((((((((((((( F ( ( ( ( T ( F

((((((((((((( ( ( ( ( ( ( ( ( ( ( E ( F ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( T ( i * i

( ( ( ( ( ( ( F ( ( ( ( ( i )

Sentencia: i * i + i E

( ((((((((((((((((((( ( ( ( E ( T

( ( ( ( ( ( T ( F

( ( ( ((((((((((((( ( ( ( ( ( ( ( T ( F ( ( ( ( ( ( ( ( ( ( ( ( F ( ( ( ( ( ( ( ( ( ( ( ( ( ( i * i + i

Sentencia: i * ( i + i ) E

( ( T

( ((((((((((((((((((((((((( ( ( ( T ( F

( ( ( ( ( ((((((((((((((((((((((((( F ( ( ( ( ( ( ( E ( ( ( ( ( ( ( ( ( ((((((((((((( ( ( ( ( ( ( ( ( ( ( ( E ( T ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( T ( F ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( F ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( i * ( i + i )

Cules son las frases que hay en E + T * F, y de ellas cules son simples ?

((((((((((( E

( ( frases (((((((((((( ((((((((((((((((((( ( ( ( ( ( T

( ( (

(((((((((((

( (

E + T * F frase

simple

(handle)

Para un rbol podemos tener mltiples derivaciones pero tambin es posible que una gramtica nos permita, para una sentencia, construir varios rboles. A esta gramtica se le denomina gramtica ambigua y, en principio, no es deseable (la vimos antes):

Sea G2 : E (((( E + E ( E - E ( E * E ( E / E ( ( E ) ( i

L(G1) = L(G2) E A1 E

( (i * i + i ((((((((((((((((((( ((((((((((((((((((( ( ( ( ( ( ( E ( E E ( E

( ( ( ( ( ( ((((((((((((( ( ( ( ( ((((((((((((( ( ( ( ( ( ( ( ( ( ( E ( E ( ( ( ( E ( E

( ( ( ( ( ( ( ( ( ( i * i + i i * i + i

E * E + E

frases simples.

existe solapamiento.

Lo que interesa es que el rbol refleje la gramtica utilizada, por ejemplo, en G1 se refleja que el producto es prioritario con respecto a la suma.

En algunos mtodos de reconocimiento nos interesa construir una gramtica ambigua siempre que pudisemos reducir el tamao de los rboles, pero siempre necesitaramos un mecanismo adicional para realizar el rbol de forma nica.

EJERCICIOS:

a) L = { 1n 0m / n > m > 0 }

n > m (((

n = 2, 3, ...

m = 1, 2, ...

L = { 110, 1110, ... , 11100, 111100, ... , 1111000, ... }

igual nmero de 1 que de 0

Lo descomponemos en

al menos un 1

LA = 1p p > 0 L = LA LB

LB = 1q 0q q > 0

S A B

A A 1 ( 1

B 1 B 0 ( 1 0

S

( ((((((((((((((((((( ( ( A B

( ( ((((((( ((((((((((((((((((( ( ( ( ( ( A ( ( B ( ( ( ( ( ( ( ( ( ((((((( ( ( ( ( ( ( ( 1 1 1 1 0 0

b) L = { 1n 0n 1m 0m / n,m ( 0 }

LA = { 1m 0m / m ( 0 }

L = LA LA = LA2 LA = { 1n 0n / n ( 0 }

S A A S

( A 1 A 0 ( - - - - -((((((((((( ( ( pertenece a L A A A

( ( ( ((((((((((((( ( Gramtica Ambigua para ( ( (

S ( A ( ( ( ( ( ((((((( ( ((((((( ( ( ( ( ( ( ( ( A A ( ( A ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 1 1 0 0

c) L = { 1n 0m 1m 0n / n,m ( 0 }

S 1 S 0 ( A

A 0 A 1 (

d) L = { 1n 0n } U { 0m 1m } m,n ( 0

LA LB LA ( LB = { }

LA = { , 10, 1100, ... }

L = { , 10, 1100,.., 01,0011,... }

LB = { , 01, 0011, ... }

S A ( B

A 1 A 0 (

B 0 B 1 (

e) L = { 13n+2 0n / n ( 0 } 13n+2 0n = 12 13n 0n = 12 (13)n 0n

S 1 1 A

S 1 1 1 S 0 ( 1 1

A 1 1 1 A 0 (

f) L = {1, 0,de igual nmero de ceros y unos, no importa el orden }

L = {, 1 0, 0 1, 1 1 0 0, 0 0 1 1, 1 0 1 0, 0 1 0 1,

1 0 0 1, 0 1 1 0, ... }

(NO)A 1 0 A ( 0 1 A ( A 1 0 ( A 0 1 ( 1 A 0 ( 0 A 1 ( A A (

o tambin: A A A ( 1 A 0 ( 0 A 1 (

g) L = { 1n 0m 1p / n+p > m ( 0 }

((((((((((((( m = 0,1,... 1(1 1 1 0 0 0(1

p+n = 1,... ((((((((((((( n(0) = n(1)

(((((((((((((( (1 1 0 0((0 1(1

((((((((((((((

S 1 A B C A ( A B C A 1

B 1 B 0 (

Gramtica Ambigua

C 0 C 1 (

A A 1 (

El Lenguaje no puede ser generado por una gramtica independiente del contexto, sino por una dependiente del contexto.

EJERCICIOS: Dada una gramtica ver el lenguaje que genera:

a) S 1 0 S 0 ( a A S 1 0 S 0

A b A ( a S a A

S

A b A

(

(((((((((((((((

A a

( ( (

(1 0)n S 0n

(

(((((((((

( ( (

a bm a

L = { (1 0)n a bm a 0n / n,m ( 0 }

b) S S S ( 1 A 0 S S S

A 1 A 0 ( S 1 A 0

S

A 1 A 0

( (((((((((

A ( ( S S

( ( ((((( (((((

( ( ( ( S S S S Cada S genera una secuencia 1m 0m m > 0

L = { 1m1 0m1 1m2 0m2 ... 1mk 0mk / mi > 0 k > 0 }

i=1..k

5

c) S 1 A ( B 0 S 1 A1 1q 0n = 1r 0n

r > n ( 0

A 1 A ( C S B 01n 0m 0 = 1n 0p

p > n ( 0

B B 0 ( C A 1 A

1q 0n q(n(0

C 1 C 0 ( A C

B B 0 1n 0n 0s = 1n 0m

s ( 0

B C m ( n ( 0

C 1 C 0

1n 0n n ( 0

C

L = { 1n 0p / p > n ( 0 } U { 1r 0n / r > n ( 0 }=

= { todas las sentencias con distinto nmero de 1 que de 0 } =

= { 1n 0m / m n }

d) S b A D c

D G i

A A G S

G

No crea ningn lenguaje.

RELACIONES:

Sea un conjunto D = { a, b, c, ..., z } y sean b y c dos elementos del conjunto D. Decimos que b est relacionado con c y lo denotamos por b R c, si se cumple una propiedad entre estos dos elementos. Otra forma de denotar que b est relacionado con c, aparte de b R c, es por medio de un par de elementos ordenados (b,c) que no es lo mismo que (c,b). Se trata de RELACIONES BINARIAS ya que se establecen entre dos elementos.

A veces se define una relacin como un conjunto de pares ordenados entre s:

6

Se define relacin traspuesta de R y se denota por RT:

RT = { (y,x) / x R y }

R = { (a,b), (a,c), (b,c) }

RT = { (b,a), (c,a), (c,b) }

PROPIEDADES DE UNA RELACIN:

- Reflexiva:

7

- Simtrica:

8

- Transitiva:

9

Una relacin R est contenida en P si todas las parejas de R estn en P:

10PRODUCTO DE DOS RELACIONES:

Dadas dos relaciones P y R: P * R = Q

a P b /\ b R c ((> a Q c = a P*R c

Si P = R ((> P*R = R2

Ejemplo:

D = { personas } R = "ser padre de"

R2 = a R b /\ b R c (((> a Q c R2 = Q = "ser abuelo de"

Propiedades

El producto de dos relaciones es asociativo:

(P*Q)*R = P*(Q*R) = P*Q*R

R*R*R = R3 R4 = R3*R = (R2)2

I = R0 Relacin de identidad (relaciona a todo elemento consigo

mismo y nada ms).

a R a a I a

b R b b I b R1 = R

c R c c I c

SUMA DE RELACIONES (UNIN):

P + R = Q

11

12

13

14CIERRE TRANSITIVO:

Llamamos cierre transitivo de una relacin R, y lo expresamos R+, a la unin de todas las potencias de la relacin R, a partir de la potencia uno: R+ = R1 + R2 + ...

15

- Si a R+b /\ b R+c (((> a R+c

Dem: a R+b (((> Existe n a Rnb

(((> a Rn+pc = a R+c

Si b R+c (((> Existe p b Rpc

As mismo, llamamos CIERRE TRANSITIVO REFLEXIVO de una relacin R y lo denotamos R*, a la unin de todas las potencias de esa relacin empezando por la potencia cero (Identidad):

R* = R0 + R1 + R2 + ...

16

R* = R0 + R+

17IMPLEMENTACIN DE UNA RELACIN EN LA MAQUINA:

El mtodo de representacin de una relacin se puede realizar considerando la pareja ordenada (a,b) como ndices de una matriz:

a1 a2 ... an

((((((((((((((((((((

a1( (

a2( (

.( (

.( R (

.( (

( (

( (

an( (

(((((((((((((((((((( n*n

Esta matriz es binaria, contendr un 1 si a R b y 0 en caso contrario. Por tanto, ser una matriz booleana de n*n bits que nos definir la relacin por extensin:

_

R[a,b] = 0 (( a R b

R[a,b] = 1 (( a R b

R[ai,aj] = Rij

* Operacin suma de dos relaciones R y P:

a R b ((> a (R+P) b = a Q b

a P b ((> a (R+P) b = a Q b

Rij = 1 ((> Qij = 1

RijPijQij

000

Pij = 1 ((> Qij = 1

011

101

111

R+P Suma lgica (OR) de las dos matrices.

(adicin binaria)

* Operacin producto de dos relaciones R y P:

a R b

(( a R*P c = a Q cQ = R*P

b P c

Rij = 1

/\ Qik = 1 Para todo j

Pjk = 1

Rij * Pjk = Qik (( Producto lgico (AND).

(binario)

18

* Operacin traspuesta:

a R b (((>b RT a

Q = RT

b Q a

Rij = Qji

* Operacin identidad:

a R0 a R0ii = 1

19

((((((((((((((

(1 (

( . 0 (

( . (

( . (

( 0 . (

( 1(

((((((((((((((

R+ = R1 + R2 + ... + Rn

20

R* = R0 + R1 + ... + Rn

Una vez calculada la relacin R, podemos calcular todo lo dems.

RELACIONES BINARIAS APLICADAS A LENGUAJES FORMALES:

Hasta ahora hemos hablado de las relaciones en general. Muchas veces nos interesar establecer relaciones entre elementos del V = VT + VN y tambin entre elementos de V*.

- Podemos ver las derivaciones (((>) como una relacin que aplicamos a un conjunto de secuencias:

((> , pertenecen a V* = 1 N 2

R

/\ N

N pertenece a VN 1,2, pertenecen a V*

= 1 2

1 N 2 (((> 1 2

- Esta relacin la establece la gramtica.

Producto de Derivaciones:

((> /\ ((> implica que: ((>2 (derivacin doble)En general podemos tener: ((>+ si Existe n t.q. ((>n

n > 0

((>* si Existe n t.q. ((>n

n ( 0

Si n = 0 ((>0 implica que: =

- Nos interesa ms una relacin entre smbolos:

Definimos la relacin: N C M = N P M

C = Cabeza P = Primero

Si: N ((> M pertenece a V*

M pertenece a V N pertenece a VN

- Relacin P+:

21

N P S1 P S2 ... Sn P S

N, S1, S2, ..., Sn VN

N (((> S1 1

S1 (((> S2 2

.

N (((>+ S n+1 n n-1 ... 2 1

.

.

pertenece a V*

Sn-1 (((> Sn n

Sn (((> S n+1

N P+ S (( N ((>+ S

- Relacin ltimo (U): N U M si N ((> M

22

- Relacin U+:

23

N U+ S (( N ((>+ S / pertenece a V*

- Relacin Dentro (D): N D M si N ((> 1 M 2

24

- Relacin D+:

25

N D+ S (( N ((>+ 1 S 2 / 1,2 pertenecen a V*

26 ((>* = ((>0 + ((>1 + ((>2 + ... N ((> M ( N M

RESTRICCIONES DE UNA GRAMTICA:

Para que una gramtica tenga sentido, existen ciertas restricciones que deben cumplirse:

1)No existan reglas de la forma N N , ya que no aportan nada a la gramtica y hacen los rboles ambiguos e infinitos.

2)Todo smbolo del vocabulario debe ser accesible a partir del smbolo principal de la gramtica (Z):

27Ejemplo:Z A B

A 0 1

B 1 B (

N 0 0 1 (((> no construye ninguna sentencia.

3)Para todo smbolo no terminal N, desde N se pueda generar una secuencia de smbolos terminales:

28CHEQUEO DE LAS RESTRICCIONES DE LA GRAMTICA:El proceso a seguir ser: aplicar las reglas 2 y 3 iterativamente y al final aplicar la regla 1. Veamos la siguiente propiedad:

Prop.: Si Z ((>+ N /\ N ((> ' M ' entonces Z ((>+ '' M ''

Por tanto, para verificar la regla 2, compruebo los smbolos no terminales que verifican Z ((> N y marco los N como accesibles, y as sucesivamente, ya que cualquier M que cumpla N ' M ' tambin ser accesible y marcado como tal. Una vez dada una pasada en la que no hayamos marcado ninguno, aquellos que se hayan quedado sin marcar no cumplirn esta restriccin y por tanto sern eliminados.

Para verificar la regla 3 veamos la siguiente propiedad:

N1 ((>+ x1

.

xi pertenece a VT

.

.

Ni pertenece a VN

Nk ((>+ xk

1M y1 N1 y2 N2 ... Nk yk+1 yj pertenece a VT

entonces M ((>+ z pertenece a VT*

M ((>+ y1 x1 y2 x2 ... yk xk yk+1 = z pertenece a VT* M

( (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( y1 N1 y2 N2 . . . . Nk yk+1 ((((( ((((( ((((( ( ( ( ( . . . . ( ( ((((( ((((( ((((( x1 x2 xk

El proceso a seguir es el siguiente: buscamos aquellos smbolos que verifican N x x pertenece a VT*, es decir, que N ((>+ x perteneciente a VT* y los marcamos (a los N), y haramos un proceso iterativo que aplicara la propiedad 1, donde todos los N deben estar marcados: Si My1 N1 ... yk Nk yk+1

yi pertenecen a VT* Ni marcados para todo i entonces marco M.

Tras una pasada en la que no marquemos ningn smbolo no terminal nuevo, se acaba el proceso y se eliminan los no marcados.

Al final se aplica la regla 1 y as se acaba el proceso global.

Veamos un ejemplo:

Ejemplo:

Z E + T

E E ( S + F ( T

F F ( F P ( P

P G

G G ( G G ( F

T T * i ( i

Q E ( E + T ( T ( S

S i

Los smbolos que se marcan que verifican la regla 2 son los siguientes: Z, E, T, S, F, P, G ya que, Para todo N Z ((>+ N , se ha quedado sin marcar Q.

Z ((> E + T ((> S + F + T

Z ((>* S = = + F + T

Luego la gramtica resultante sera:

Z E + T

E E ( S + F ( T

F F ( F P ( P

P G

G G ( G G ( F

T T * i ( i

S i

Los smbolos que verifican la regla 3 son: S, T, E, Z, ya que:

Para todo N ((>+ x perteneciente a VT* y los no marcados son F, P, G, luego al final de la primera pasada la gramtica resultante sera:

Z E + T

E E ( T

T T * i ( i

S i

En la segunda pasada, S no se marca debido a la regla 2, luego resulta:

Z E + T

E E ( T

T T * i ( i

Aplicando finalmente la regla 1, obtenemos la gramtica final:

Z E + T

E T

T T * i ( i

NOTACIN BNF EXTENDIDA (EBNF):

La notacin para las gramticas que hemos venido utilizando hasta ahora es la llamada BNF. En esta notacin aparecan algunos metasmbolos como: , , ::=, etc, de la siguiente forma:

< smbolo no terminal > ::= < smbolo no terminal > begin

< expresin > ::= < expresin > < trmino > ( < trmino >

Esta notacin ocasiona una especie de lenguaje que se define como el lenguaje cuyas sentencias estn en BNF, y como est compuesto por metasmbolos (permiten trabajar con gramticas que empleen otros smbolos), este lenguaje se denomina metalenguaje, ya que permite definir otro lenguaje.

La notacin EBNF aade otros metasmbolos como son: { }, [ ], ( ), ' '. Veamos el significado de cada uno de ellos:

- { } :Indica que lo que est en su interior se puede repetir un nmero cualquiera de veces (0..N):

N { A } ( N ( A ( A A ( A A A ( ...

- [ ] :Indica que lo que est en su interior es opcional, por tanto se repite una o ninguna vez:

::= if then [else ]

< N > ::= A [ B ] C ( < N > ::= A B C ( A C

- Tambin puede aparecer en una regla la combinacin de llaves y corchetes:

Aab [c {d} e] f

abf, abcef, abcdef, abcddef, ...

Aab {c [ de ]} f

abf, abcf, abcdef, abcdecf, abccdecdef,..

A[a ( b] c ( A

ac ( bc ( c

c, ac, bc.

A{ a ( b } c

c, ac, bc, aac, bbc, abc, bac, ...

- ( ) :Realizan lo que en aritmtica se denomina sacar factor comn. Se realiza solo una vez lo que aparece dentro:

abcd ( abe (((> ab ( cd ( e )

A { ( a ( b ) c } d

d, acd, bcd, acacd, bcbcd, acbcd, ...

- ' ' :Sirven para distinguir un smbolo que sea igual a un metasmbolo:

F ( E ) ( a

F '(' E ')' ( a

A las secuencias que se puedan generar con estos metasmbolos se les llama expresiones regulares y a su metalenguaje, lenguaje de expresiones regulares.

DIAGRAMAS SINTCTICOS:

Otra notacin ms cmoda para el usuario, pero no para el computador son los llamados diagramas sintcticos, cuyo conjunto representa a una gramtica. Los smbolos terminales se representan encerrados en un crculo, mientras que los smbolos no terminales se encierran en un rectngulo. La concatenacin se representa mediante flechas que unen a los smbolos:

E E + T ( T

E [ + E ] T

E T { + T }

Simplificando:

El proceso de sustitucin consiste en transformar el smbolo no terminal por su diagrama sintctico correspondiente:

E T { + T }

T F { * F }

F '(' E ')' ( a

(

(

Sustituyendo:

JERARQUA DE GRAMTICAS DE CHOMSKY:

Se distinguen cuatro tipos de gramticas, donde cada tipo de gramtica es englobada por las de jerarqua superior:

((((((((((((((((((((((((((((((((( ( tipo 0 ( ( ((((((((((((((((((((((((( ( ( ( tipo 1 ( ( ( ( ((((((((((((((((( ( ( ( ( ( tipo 2 ( ( ( ( ( ( ((((((((( ( ( ( ( ( ( (tipo 3 ( ( ( ( ( ( ( ((((((((( ( ( ( ( ( ( ( ( ( ( ( ((((((((((((((((( ( ( ( ( ( ( ( ((((((((((((((((((((((((( ( ( ( (((((((((((((((((((((((((((((((((

Las gramticas que hemos visto hasta ahora son las de tipo 2 o independientes del contexto. Cada tipo de gramtica se caracteriza por la forma de sus reglas o producciones: G ( VT, VN, Z, R )

Adems, se caracterizan por sus restricciones, cuantas ms restricciones haya menor es el conjunto de gramticas a construir, y tambin por los reconocedores que son capaces de reconocer el lenguaje.

-TIPO 0 (phrase-structured grammars): Son las gramticas ms generales, denominadas gramticas con estructura de frase. Sus reglas son de la forma:

29Sentencias del tipo: a N M x n Q

a b c Q a N M x x y M ((> a b c Q n Q x y M

Se sustituyen por smbolos terminales y no terminales.

Los autmatas que reconocen estos lenguajes son las mquinas de Turing.

Esta gramtica es muy potente pero tiene el inconveniente de ser muy compleja la derivacin.

- TIPO 1 (context-dependent grammars): Son las gramticas dependientes del contexto, de la forma:

30Ejemplo:

a N M x ((> a n Q M x a = 1 N = N

M x = 2 = n Q

Sus reconocedores son los autmatas linealmente limitados (lineas-bounded autom).

- TIPO 2: Son las gramticas independientes del contexto (context-free grammars), son de la forma:

31

Sus reconocedores son los autmatas de pila. Existen para ellos buenos mtodos prcticos pero muy complejos para aplicarlos a compiladores, por lo que se suele utilizar un subconjunto. (PARSER).

- TIPO 3: Son las ms elementales, llamadas gramticas regulares (regular grammars), de la forma:

32

Sus reconocedores son los autmatas finitos. Reconocedores lxicos (SCANNER).

Todas las gramticas regulares originan un conjunto de secuencias llamadas expresiones regulares.

Veamos ahora como se construyen los autmatas finitos, para a partir de ellos elaborar los analizadores lxicos.

REFERENCIAS BIBLIOGRFICAS:[Sanchis 86]

Sanchis Llorca, F. J. y Galan Pascual, C. Compiladores; Teora y construccin.

Paraninfo. S. A. Madrid.

[Snchez 89]

Snchez Dueas, G. y J. A. Valverde Andreu. Compiladores e Intrpretes; Un enfoque pragmtico. (2 Edicin. Corregida y ampliada).

Daz de Santos. Madrid.

[Gries 75]

Gries, D. Construccin de Compiladores

Paraninfo. Madrid.

[Aho 72]

Aho, A.V. and J.D. Ullman. The Theory of Parsing, Translation, and Compiling (Volume 1: Parsing)

Prentice-Hall, Inc. Englewood Cliffs, N.J.

[Alfonseca 87]

Alfonseca, M., Sancho, J. y M.M. Orga. Teora de Lenguajes, Gramticas y Autmatas.

Universidad y Cultura. Madrid.

[Fortes 87]

Fortes, J. Recopilacin de apuntes de la asignatura Traductores e Intrpretes.

Curso 86-87.Principal responsable del desarrollo del FORTRAN.

Trabaj en el ALGOL

que generara el Pascal.

EMBED Equation.3

N

P I U

N

M

E

+

T

T

E

E

+

T

E

+

T

E

+

T

E

T

+

T

E

+

T

E

T

*

F

T

*

F

T

F

E

(

F

)

a

*

F

E

+

E

(

E

)

a

*

+

1PAGE 2

_1188677843.unknown