Вы находитесь на странице: 1из 52

TEMA 1.

INTRODUCCIN Y CONCEPTOS BASICOS

1.1. Traduccin de Lenguajes

1.2. Fases de un traductor y agrupacin de las fases

1.3. Lenguajes y gramticas. Conceptos bsicos

Compiladores. Tema1

n 1

1.1. Traduccin de Lenguajes


Compilador: Programa que acepta como entrada un texto de programa en un cierto lenguaje y genera como salida texto de programa en otro lenguaje. Traduccin: Proceso por el cual un compilador convierte el texto del programa de entrada en el de salida. Terminologa:
Lenguaje fuente: lenguaje en que se escribe la entrada Lenguaje objeto: lenguaje en que se escribe la salida
En general, muy diferente del lenguaje fuente

Objetivo de la traduccin:
Conseguir que el hardware realice las acciones descritas en la semntica del programa La ejecucin del programa traducido supondr tomar datos de diversas fuentes y volcarlos en otras despus de procesarlos

El programa en lenguaje objeto se convertir en ejecutable:


Cargador (RUNNER) con/sin caparazn (Shell)

Compiladores. Tema1

n 2

1.1. Traduccin de Lenguajes

Traductor: programa que procesa un texto fuente y genera un texto objeto.


El traductor escrito en un lenguaje de implementacin LI (desde LA a mquina) El texto fuente escrito en un lenguaje fuente LF (ej AN) El texto objeto escrito en lenguaje objeto LO (ej. Mquina).

LF LI

LO

Compiladores. Tema1

n 3

1.1. Traduccin de Lenguajes

Ensamblador
El traductor en LI Ensamblador (Assembler) lenguaje fuente: Ensamblador (Assembly) lenguaje objeto: Mquina

Compilador
El traductor en LI cualquiera de alto nivel lenguaje fuente: lenguaje de alto nivel lenguaje objeto: lenguaje de bajo nivel

Programa fuente

Compilador Ensamblador

Programa objeto

Compiladores. Tema1

n 4

1.1. Traduccin de Lenguajes

Tiempo de compilacin: tiempo para la traduccin LF a LO Tiempo de ejecucin: tiempo en ejecutarse el programa objeto Intrpretes: programas que ejecutan las instrucciones que se encuentran en el texto fuente
Datos

Programa objeto

Ejecucin

Resultados

Compiladores. Tema1

n 5

1.1. Traduccin de Lenguajes

Intrpretes: programas que ejecutan las instrucciones que se encuentran en el texto fuente

Datos

Programa objeto fuente

Intrprete Ejecucin

Resultados

Compiladores. Tema1

n 6

1.2. Fases de un traductor y agrupacin de las fases

Un TRADUCTOR esta compuesto por dos mdulos: anlisis y sntesis


El mdulo de anlisis tiene tres fases: anlisis lxico, sintctico y semntico. El mdulo de sntesis tiene tres fases: generacin de cdigo intermedio, y en el caso de los compiladores generacin de cdigo y optimizacin de cdigo. Los intrpretes toman el cdigo intermedio y lo ejecutan directamente.

Compiladores. Tema1

n 7

FRONT-END ANLISIS

Programa fuente

ANLISIS LXICO ANLISIS SINTCTICO ANLISIS SEMNTICO


TABLA DE SMBOLOS DE

MANEJO

SNTESISS
ERRORES

GENERACIN DE CDIGO INTERMEDIO

GENERACIN DE CDIGO OPTIMIZADOR DE CDIGO

BACK-END Programa objeto


Compiladores. Tema1

n 8

1.2. Fases de un traductor y agrupacin de las fases

El mdulo de anlisis verifica si el programa en lenguaje fuente es correcto, y recoge la informacin necesaria en las tablas de smbolos para el mdulo de sntesis. En el caso de que el mdulo de anlisis detecte la existencia de errores en el programa fuente, se envan los mensajes correspondientes al usuario por medio del manejador de errores. El mdulo de sntesis se encarga de la generacin de cdigo objeto, una vez que el mdulo de anlisis ha verificado que el cdigo fuente es correcto. La tabla de smbolos es una estructura de datos que almacena la informacin recogida en el mdulo de anlisis, y emplendose dicha informacin en el mdulo de sntesis para la generacin del cdigo objeto. Las fases de un procesador de lenguajes tambin se pueden clasificar en front-end y back-end, segn la independencia de la mquina objeto para la cual se produce el cdigo.
Compiladores. Tema1 n 9

1.2.Fases de un traductor y agrupacin de las fases

Anlisis lxicogrfico (scanner)


Identificar los smbolos Eliminar espacios en blanco, carcter de fin de lnea, etc. Eliminar comentarios que acompaan al fuente Crear unos smbolos intermedios (TOKENS) (Identificadores,nmeros, palabras reservadas) Avisar de los errores que detecta.

EjEMPLO.Analizador lexicogrfico Posicion:= pos_inicial + velocidad * 60 Tokens id1:=id2 + id3 * 60


Compiladores. Tema1

n 10

1.2.Fases de un traductor y agrupacin de las fases

Analizador sintctico
Comprueba que las sentencias que componen el texto fuente son correctas en el lenguaje, creando una representacin interna que corresponde a la sentencia analizada, normalmente en una estructura jerrquica llamada rbol sintctico, donde cada nodo representa una operacin y los hijos de un nodo representan los argumentos de esa operacin. Durante el anlisis sintctico se van mostrando los errores que se encuentran.
:= id1 id2 id3 + * 60

Compiladores. Tema1

n 11

1.2.Fases de un traductor y agrupacin de las fases


Representacin que tiene como entrada el analizador semntico

:=
:= id1 id2 id3 + * id 60 id 3
60

id

Compiladores. Tema1

n 12

1.2.Fases de un traductor y agrupacin de las fases


rbol sintctico:

:=

id

id

id

Entero_real

60

Compiladores. Tema1

n 13

1.2. Fases de un traductor y agrupacin de las fases

Generacin de cdigo intermedio


cdigo abstracto independiente de la mquina para la que se generar el cdigo objeto. ha de cumplir dos requisitos.
Ser fcil de producir a partir del anlisis sintctico Ser fcil traducir a lenguaje objeto

Ejemplo: cdigo intermedio de tercetos (instrucciones como mximo tres operandos).


:=

Temp1 : = entero_real (60) Temp2 : = id3 * temp1 Temp3 : = id2 + temp2 Id1 : = temp3
Compiladores. Tema1

id1 id2

+ * id3 Entero_real 60

n 14

1.2.Fases de un traductor y agrupacin de las fases

Optimizador de Cdigo
del cdigo intermedio crea un nuevo cdigo ms compacto y eficiente, simplificando sentencias aritmticas, etc. Ejemplo:
Temp1 : = entero_real (60) Temp2 : = id3 * temp1 Temp3 : = id2 + temp2 Id1 : = temp3

Quedar:

temp := id3 * itof(60) Id1 : = id2 + temp


Compiladores. Tema1 n 15

1.2.Fases de un traductor y agrupacin de las fases


Generador de Cdigo Mquina
cdigo a lenguaje objeto que es directamente ejecutable por la mquina en la fase final del compilador.

Ejemplo: temp := id3 * itof(60) Id1 : = id2 + temp Registros: R1,R2


MOVE MUL MOVE ADD MOV id3,R2; #60,R2; id2,R1; R1,R2; R2,id1;

Ensamblador
0010001001..........................011
Compiladores. Tema1 n 16

1.3. Lenguajes y gramticas. Conceptos bsicos

1.3.1.Lenguajes formales 1.3.1.1. Alfabeto 1.3.1.2. Palabra 1.3.1.3. Operaciones con palabras 1.3.1.4. Lenguajes 1.3.1.5. Operaciones con Lenguajes 1.3.2. Gramticas Formales 1.3.2.1. Concepto de gramtica formal 1.3.2.2. Tipos de Gramticas. Jerarqua de Chomsky 1.3.2.3. rboles de derivacin 1.3.2.4. Ambigedad 1.3.2.5. Recursividad 1.3.2.6. Factorizacin a izquierdas

Compiladores. Tema1

n 17

1.3.1.Lenguajes formales. 1.3.1.1. Alfabeto

Se llama alfabeto a un conjunto finito, no vaco, cuyos elementos se denominan letras o smbolos. Se definen los alfabetos por la enumeracin de los smbolos que contiene. Ejemplos : A1={A, B, C, D, E, F , G, ..., Z} A2={0,1} A3={0, 1, 2, 3, 4, 5, 6, 7, 8, 9} A4={(, )}

Compiladores. Tema1

n 18

1.3.1.Lenguajes formales. 1.3.1.2. Palabra


Se denomina palabra a toda secuencia finita de letras formada con los smbolos de un alfabeto. Palabras sobre A1 : JOSE, ANA, RREDF, ABACZA Palabras sobre A2 : 0 Palabras sobre A3 : 12 Palabras sobre A4 : ((())( x = JOSE(sobre A1) |x|=4 1 9065 )()(( z = 123456 (sobre A3) 11001100 67890 1111

Se usarn letras minsculas para representar las palabras de un alfabeto :

y = (()) (sobre A4)

Longitud de una palabra: nmero de smbolos (letras) que la componen: |y|=4 |z|=6 Se define la palabra vaca como aquella cuya longitud es cero. Se representa mediante la letra . Se define universo del discurso o lenguaje universal sobre el alfabeto W() al conjunto de palabras que se pueden formar con las letras de un alfabeto, W() es un conjunto infinito. Ejemplo: un alfabeto con el menor nmero posible de letras (1). A={a} En este caso, W(A) = { , a, aa, aaa, aaaa, ...}, y contiene un nmero infinito de elementos. La palabra vaca pertenece a todos los lenguajes universales de todos los alfabetos.
Compiladores. Tema1 n 19

1.3.1.Lenguajes formales. 1.3.1.3 Operaciones con palabras


Concatenacin de palabras Sean dos palabras x, y tales que x W(), y W() Supongamos que x=A0A1...... Ai |x| = i ; y= B0B1...... Bj |y| = j Se llama concatenacin de las palabras x e y (y se representa por xy) a otra palabra, z, obtenida poniendo las letras de x y a continuacin las de y : z= A0A1...... Ai B0B1...... Bj Se cumple que: |z|=|x|+|y| propiedades de la concatenacin : Operacin cerrada. Es decir, la concatenacin de dos palabras de W(A) es otra palabra de W(A). Si x W(A) e y W(A), entonces xy W(A). Propiedad asociativa : x(yz)=(xy)z Existencia de elemento neutro. El elemento neutro de esta operacin es la palabra vaca , tanto por la derecha como por la izquierda. Siendo x una palabra cualquiera, se cumple : x = x = x no cumple la propiedad conmutativa
Compiladores. Tema1

n 20

1.3.1.Lenguajes formales. 1.3.1.3 Operaciones con palabras


Potencia de una palabra
Se denomina potencia i-sima de una palabra a la concatenacin consigo misma i veces.

xi = xxx...xx
|----------------| i

se cumplen las siguientes relaciones

xi+1 = xix = xxi (i > 0) xixj = xi+j (i, j > 0)


Para que ambas relaciones se cumplan tambin para i, j = 0, basta con definir x0 = , cualquiera que sea x. Ejemplo: x = ABCD, entonces
x2 = xx = ABCDABCD x3 = xxx = ABCDABCDABCD

la longitud de la potencia es |xi | = i *|x|

Reflexin de palabras
Sea x=A0A1...... An , se denomina palabra refleja o inversa de x, representado por x-1, a

x-1 = x=AnAn-1...... A0 est formada por las mismas letras, pero ordenadas de forma inversa.
Compiladores. Tema1 n 21

1.3.1.Lenguajes formales. 1.3.1.4. Lenguajes

Se denomina lenguaje sobre el alfabeto a cualquier subconjunto del lenguaje universal W() L W() El conjunto vaco, ,es un subconjunto de W(). Este lenguaje no debe confundirse con aquel que contiene nicamente a la palabra vaca. Para diferenciarlos hemos de darnos cuenta de la distinta cardinalidad de ambos conjuntos, ya que

C() = 0 C({}) = 1
Estos dos conjuntos sern lenguajes sobre cualquier alfabeto. El alfabeto en s puede considerarse como un lenguaje : el formado por todas las posibles palabras de una letra.
Compiladores. Tema1

n 22

1.3.1.Lenguajes formales. 1.3.1.5. Operaciones con Lenguajes


Unin de lenguajes Consideremos dos lenguajes diferentes definidos sobre el mismo alfabeto L1 W() y L2 W() Se denomina unin de ambos lenguajes al lenguaje formado por las palabras de ambos lenguajes : L1 L2={ x | x L1 x L2} Propiedades de esta operacin : Operacin cerrada. La unin de dos lenguajes definidos sobre el mismo alfabeto ser otro lenguaje definido sobre ese alfabeto Propiedad asociativa. (L1 L2) L3 = L1 (L2 L3) Existencia de elemento neutro. L = L = L Propiedad conmutativa. Se verifica que L1 L2 = L2 L1 Propiedad de idempotencia. Se verifica que L L = L
Compiladores. Tema1 n 23

1.3.1.Lenguajes formales. 1.3.1.5. Operaciones con Lenguajes


Concatenacin de lenguajes Consideremos dos lenguajes definidos sobre el mismo alfabeto, L1 y L2. La concatenacin o producto de estos lenguajes es el lenguaje L1L2= { xy / x L1 y x L2} Las palabras de este lenguaje estarn formadas al concatenar cada una palabra del primero de los lenguajes con otra del segundo. La concatenacin de lenguajes con el lenguaje vaco es: L = L = Propiedades de esta operacin : Operacin cerrada. La concatenacin de lenguajes sobre el mismo alfabeto es otro lenguaje sobre ese alfabeto. Propiedad asociativa. (L1 L2) L3 = L1 (L2 L3) Elemento neutro. Cualquiera que sea el lenguaje considerado, el lenguaje de la palabra vaca cumple que {}L = L{} = L

Compiladores. Tema1

n 24

1.3.1.Lenguajes formales. 1.3.1.5. Operaciones con Lenguajes Potencia de un lenguaje Se define la potencia i-sima de un lenguaje a la operacin de concatenarlo consigo mismo i veces.
Li = LLL ....L
|------------| i

Se cumplen las siguientes relaciones


Li+1 = LiL = LLi (i > 0) Li Lj = Li+j (i, j > 0) Para que las relaciones se cumplan para i, j = 0, se define L0 = {}, cualquiera que sea L
Compiladores. Tema1

n 25

1.3.1.Lenguajes formales. 1.3.1.5. Operaciones con Lenguajes

Clausura positiva de un lenguaje


Se define la clausura positiva de un lenguaje L:

L+ = Li
i=1

Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles excepto L0. Si L no contiene la palabra vaca, la clausura positiva tampoco. Ya que cualquier alfabeto es un lenguaje sobre l mismo (formado por las palabras de longitud 1), al aplicarle esta operacin se observa que

+ = W() - {}
Compiladores. Tema1 n 26

1.3.1.Lenguajes formales. 1.3.1.5. Operaciones con Lenguajes


Cierre o Clausura de un lenguaje
Se define el cierre o clausura de un lenguaje L como :

L* = Li
i=0

Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles, incluso L0. Todas las clausuras contienen la palabra vaca.

Se cumplen las siguientes relaciones:

L* = L+ {} L+ = L L* = L* L

(ser imposible obtener la palabra vaca)

Ya que el alfabeto es un lenguaje sobre s mismo,al aplicrsele esta operacin.

* = W()
Se denominar * al lenguaje universal o universo del discurso sobre el alfabeto
Compiladores. Tema1 n 27

1.3.1.Lenguajes formales. 1.3.1.5. Operaciones con Lenguajes

Reflexin de lenguajes
Se llama lenguaje reflejo o inverso de L, representndose por

L-1

L-1 ={ x-1 / x L }
lenguaje que contiene las palabras inversas a las palabras de L

Compiladores. Tema1

n 28

1.3.2. Gramticas Formales.1.3.2.1. Concepto de gramtica formal

Una gramtica define la estructura de las frases y de las palabras de un lenguaje. Las gramticas son un mtodo para la generacin de palabras de un lenguaje a partir de un alfabeto.
para generar estas palabras se utilizan las derivaciones. se denominan formales porque se centran en los estudios de los lenguajes formales que son aquellos que estn definidos a partir de reglas preestablecidas. Para los lenguajes naturales existen otro tipo de gramticas.

Compiladores. Tema1

n 29

1.3.2. Gramticas Formales.1.3.2.1. Concepto de gramtica formal


Ejemplo: consideremos la instruccin de cualquier lenguaje x = y+2*z con:

conjunto de producciones :
<instruccin> ::= <asignacin> <asignacin> ::= <identificador>=<expresin> <expresin> ::= <sumando> <expresin> ::= <sumando>+<expresin> <sumando> ::= <factor> <sumando> ::= <factor> * <sumando> <factor> ::= <identificador> <factor> ::= <nmero>

Reglas morfolgicas :
<identificador> ::= x <identificador> ::= y <identificador> ::= z <nmero> ::= 2 Obtenemos la expresin x = y+2*z a partir de <instruccin> as:

<instruccin> <asignacin> <identificador> = <expresin> x = <expresin> x = <sumando> + <expresin> x = <factor> + <expresin> x = <identificador> + <expresin> x = y+ <expresin> x = y+ <sumando> x = y+ <factor> * <sumando> x = y+ <nmero> * <sumando> x = y+2* <sumando> x = y+2* <factor> x = y+2* <identificador> x = y+2*z
Compiladores. Tema1 n 30

1.3.2. Gramticas Formales.1.3.2.1. Concepto de gramtica formal


Produccin o regla (x::=y):
es un par ordenado(x,y) con x,y *, es decir, si se encuentra x como parte de

cualquier palabra v se puede sustituir x por y en v, lo que permite transformar palabras en otras

Derivacin directa v w:
aplicacin de una produccin a una palabra v para convertirla en otra w donde

v=zxu y w=zyu (v, w, z, u *)


Se cumple que para cada produccin x::=y existe una derivacin directa (haciendo z=u=):

xy

Derivacin v *w:
aplicacin de una secuencia de producciones a una palabra.

Longitud de la derivacin:
nmero de derivaciones que hay que aplicar para obtener la palabra.

Derivacin ms a la izquierda: Derivacin ms a la derecha:


Compiladores. Tema1

Se utiliza en cada derivacin directa la

produccin aplicada a los smbolos ms a la izquierda de la palabra. Se utiliza en cada derivacin directa la

produccin aplicada a los smbolos ms a la derecha de la palabra.


n 31

1.3.2. Gramticas Formales.1.3.2.1. Concepto de gramtica formal

Se llama gramtica formal a la cudrupla

G = (T,N, S, P)
T, alfabeto de smbolos terminales N, alfabeto de smbolos no terminales S N, es el axioma o smbolo inicial P es un conjunto finito de reglas de produccin de la forma u ::= v, donde u + y v *.

Se verifica adems que:


T N = el alfabeto es = T N
Compiladores. Tema1 n 32

1.3.2. Gramticas Formales.1.3.2.1. Concepto de gramtica formal

Ejemplo : consideremos la gramtica


T = {0, 1, 2} N = {N, C} S=N P = { N::=NC, N::=C, C::=0, C::=1, C::=2} Es posible establecer una notacin simplificada para las reglas de produccin. Si existen dos reglas de la forma u::=v u::=w se pueden representar de la forma: u::=v | w Esta forma de representar las reglas de produccin recibe el nombre de forma normal de Backus (o BNF)

Compiladores. Tema1

n 33

1.3.2. Gramticas Formales.1.3.2.1. Concepto de gramtica formal

Sea G = (T,N, S, P). Una palabra x * se denomina forma sentencial de G si se verifica que

S * x
Considerando la gramtica anterior, las siguientes son formas sentenciales : NCC, NC2, 120
S = N NC NCC S = N NC NCC NC2 S = N NC NCC CCC 1CC 12C 120

Si una forma sentencial x cumple que x T* se dice que x es una sentencia o instruccin de G. Es decir, las sentencias estarn compuestas nicamente por smbolos terminales. En el ejemplo anterior es sentencia: 120
Compiladores. Tema1 n 34

1.3.2. Gramticas Formales.1.3.2.1. Concepto de gramtica formal

Sea una gramtica G = (T,N, S, P). Se llama lenguaje asociado a la G, o lenguaje generado por G, o lenguaje descrito por G, al conjunto :

L(G) = { x / S * x and x T* }
Conjunto de todas las sentencias de la gramtica

Ya que la teora de gramticas formales (Chomsky), junto con la notacin BNF, proporciona una forma de describir lenguajes, esta simbologa se considera como un metalenguaje (lenguaje para describir lenguajes).

Compiladores. Tema1

n 35

1.3.2. Gramticas Formales 1.3.2.2. Tipos de Gramticas. Jerarqua de Chomsky


Chomsky clasific las gramticas en cuatro grandes grupos : G0, G1, G y G3. Cada uno de estos grupos incluye las gramticas del siguiente, de acuerdo con el siguiente esquema: G3 G2 G1 G0

1. Gramticas tipo 0
Las reglas de produccin tienen la forma

u ::= v
donde u +, v *, u = xAy con x *, y *, A N sin otra restriccin En las reglas de produccin:
La parte izquierda no puede ser la palabra vaca. En la parte izquierda (u) ha de aparecer algn smbolo no terminal.

Los lenguajes representados por estas gramticas reciben el nombre de lenguajes sin restricciones. Puede demostrarse que todo lenguaje representado por este tipo de gramticas pueden ser descritos tambin por un grupo de gramticas un poco ms restringido (llamado de gramticas de estructura de frases), cuyas producciones tienen la forma xAy ::= xvy, donde x, y, v *, siendo A un smbolo no terminal.
Compiladores. Tema1 n 36

1.3.2. Gramticas Formales 1.3.2.2. Tipos de Gramticas. Jerarqua de Chomsky


Ya que v puede ser la palabra vaca, se sigue que en estas reglas podemos encontrar situaciones en que la parte derecha sea ms corta que la izquierda. Las reglas en que ocurre esto se denominan compresoras. Una gramtica que contenga al menos una regla compresora se denomina gramtica compresora. En las gramticas compresoras, las derivaciones pueden ser decrecientes, ya que la longitud de las palabras puede disminuir en cada uno de los pasos de derivacin. Ejemplo: sea G = ({a, b}, {A, B, C}, A, P), donde P: A ::= aABC | abC CB ::= BC bB ::= bb bC ::= b Esta gramtica es de tipo 0, no es de estructura de frases por:
la regla CB ::= BC; formas de considerarla:
Considerando x = , A = C, y = B. Estara formada la parte izquierda de la produccin, pero la derecha ser vB y sea cual sea v, no podr ser BC Considerando x = C, A = B, y = . As tendramos formada la parte izquierda de la regla, pero en la derecha tendramos Cv, y sea v lo que sea no podremos obtener CB. Ya no es posible hacer ninguna otra descomposicin, por lo que esta regla no pertenece al esquema de reglas visto para las gramticas de estructura de frases.

Compiladores. Tema1

n 37

1.3.2. Gramticas Formales 1.3.2.2. Tipos de Gramticas. Jerarqua de Chomsky


Para la produccin : A ::= aABC:
A = A, x= , y =. Si hacemos v = aABC, la regla se ajusta al formato considerado.

Sin emparquego la regla CB ::= BC puede descomponerse en las cuatro reglas siguientes, que permiten obtener las mismas derivaciones con ms pasos, pero ajustndose a las condiciones exigidas para que la gramtica sea de estructura de frases.
CB ::= XB XB ::= XY XY ::= BY BY ::= BC

La gramtica resultante, tendr 3 reglas de produccin ms y dos smbolos adicionales (X, Y) en el alfabeto de smbolos no terminales. Veamos la derivacin de la sentencia aaabbb, mediante la gramtica original :

A a(A)BC aa(A)BCBC aaab(CB)CBC aaa(bB)CCBC aaab(bC)CBC aaab(bC)BC aaab(bB)C aaabb(bC) aaabbb


Se observa tambin que la gramtica es compresora, debido a la presencia de la regla bC ::= b. Puede comproparquese que el lenguaje generado por esta gramtica es {anbn|n=1,2,..}

Compiladores. Tema1

n 38

1.3.2. Gramticas Formales 1.3.2.2. Tipos de Gramticas. Jerarqua de Chomsky 2. Gramticas tipo 1
Las reglas de produccin de esta gramtica tienen la forma xAy ::= xvy donde x, y *, v + y A ha de ser un smbolo no terminal. (A puede transformarse en v slo si aparece en el contexto definido por x e y) Ya que v no puede ser la palabra vaca, se deduce de aqu que este tipo de gramticas no pueden tener reglas compresoras. Se admite una excepcin en la regla S ::= (siendo S el axioma de la gramtica). Como consecuencia se tiene que la palabra vaca pertenece al lenguaje generado por la gramtica slo si contiene esta regla. Los lenguajes generados por este tipo de gramticas se denominan dependientes del contexto. Evidentemente todas las gramticas de tipo 1 son tambin de tipo 0, y as, todos los lenguajes dependientes de contexto sern tambin lenguajes sin restricciones. Ejemplo : G = ({S, B, C}, {a, b, b}, S,P), donde P es: S := aSBc | aBC bB := bb bC ::= bc CB ::= BC cC ::= cc aB ::= ab
Compiladores. Tema1 n 39

1.3.2. Gramticas Formales 1.3.2.2. Tipos de Gramticas. Jerarqua de Chomsky 3. Gramticas tipo 2
Las reglas de estas gramticas se ajustan al siguiente esquema A ::= v donde v *, y A N En concreto v puede ser . Para toda gramtica de tipo 2 existe una gramtica equivalente desprovista de reglas de la forma A ::= , que generar el mismo lenguaje que la de partida, excepto la palabra vaca. Si se le aade a la segunda gramtica la regla S ::= , las gramticas generarn el mismo lenguaje. Por lo tanto, se pueden definir las gramticas de tipo 2 de una forma ms restringida, en el que las reglas de produccin tendrn la siguiente forma

A ::= v donde v +, y A N . Adems podrn contener regla S ::=


Los lenguajes generados por este tipo de gramticas se denominan independientes de contexto, ya que la conversin de A en v puede realizarse independientemente del contexto en que aparezca A. La mayor parte de los lenguajes de programacin de ordenadores pueden describirse mediante gramticas de este tipo. Ejemplo : sea la gramtica G = ({a, b}, {S}, S, { S ::= aSb | ab}). Es una gramtica de tipo 2. La derivacin de la palabra aaabbb ser: S aSb aaSbb aaabbb Puede verse que el lenguaje definido por esta gramtica es {anbn | n=1, 2, ...} Un mismo lenguaje puede generarse por muchas gramticas diferentes. Sin emparquego, una gramtica determinada describe siempre un lenguaje nico.
Compiladores. Tema1 n 40

1.3.2. Gramticas Formales 1.3.2.2. Tipos de Gramticas. Jerarqua de Chomsky


4. Gramticas tipo 3
Gramticas lineales por la izquierda, cuyas reglas de produccin pueden tener una de las formas siguientes:

Estas gramticas se clasifican en los dos grupos siguientes:

A ::= a A ::= Va S ::=


donde a

T, A, V N, y S es el axioma de la gramtica.

Gramticas lineales por la derecha, cuyas reglas de produccin tendrn la forma:

A ::= a A ::= aV S ::=


donde a

T, A, V N, y S es el axioma de la gramtica.

Los lenguajes representados por este tipo de gramticas se denominan lenguajes regulares. Ejemplos:
G1 = ({ 0, 1}, {A, B}, A, { A ::= B1 | 1, B ::= A0}) Gramtica lineal por la izquierda que describe el lenguaje L1 = { 1, 101, 10101, ... } = {1(01)n | n = 0, 1, 2, ...} G2 = ({ 0, 1}, {A, B}, A, { A ::= 1B | 1, B ::= 0A}) Gramtica lineal derecha que genera el mismo lenguaje que la gramtica anterior. Compiladores. Tema1

n 41

1.3.2. Gramticas Formales. 1.3.2.3. rboles de derivacin

A toda derivacin de una gramtica de tipo 1, 2 3 le corresponde un rbol de derivacin. Este rbol se construye as :
La raz del rbol corresponde al axioma de la gramtica Una derivacin directa se representa por un conjunto de ramas que salen de un nodo determinado. Al aplicar una regla, uno de los smbolos de la parte izquierda de la produccin queda sustituido por la palabra de la parte derecha. Por cada uno de los smbolos de x se dibuja una rama, que parte del nodo correspondiente al smbolo sustituido. En cada rama, el nodo de partida se denomina padre. El final se denomina hijo del primero. Dos nodos hijos del mismo padre se denominan hermanos. Un nodo es ascendiente de otro si es su padre o ascendiente de su padre. Un nodo es descendiente de otro si es su hijo o es descendiente de su hijo.

A lo largo del proceso de construccin del rbol, los nodos finales de cada paso, ledos de izquierda a derecha, forman la forma sentencial obtenida por la derivacin representada por el rbol. Ser rama terminal aquella dirigida hacia un smbolo terminal. Este nodo se llama hoja. El conjunto de hojas, ledo de izquierda a derecha, forma la sentencia generada por la derivacin.
Compiladores. Tema1 n 42

1.3.2. Gramticas Formales. 1.3.2.3. rboles de derivacin


Ejemplo : sea la gramtica G = ({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0},{N,C}, N, {N ::= C | NC, C ::=0|1|2|3|4|5|6|7|8|9}) Consideraremos la derivacin : N NC NCC CCC 2CC 23C 234 El rbol de derivacin correspondiente es:
N N C C N

Subrbol Dado un rbol correspondiente a una derivacin, se denomina subrbol al rbol cuya raz es un nodo cualquiera y cuyos nodos son los descendientes de ste.
Teorema : Los nodos terminales de un subrbol, ledos de izquierda a derecha, forman una frase respecto de la raz del subrbol. Demostracin :
Sea U la raz del subrbol, y sea u la palabra formada por los nodos terminales del subrbol. As, se verifica que U +u Sea x la palabra formada, leyendo de izquierda a derecha, los nodos terminales del rbol situados a la izquierda de los del subrbol. Sea y la palabra formada, leyendo de izquierda a derecha, los nodos terminales situados a la derecha de los del subrbol. De esta forma se verifica que xuy es la sentencia definida por el rbol completo. Como S *xUy y adems U +u, se sigue que u es una frase respecto de U y de la forma sentencial xuy.

Si todos los nodos terminales del subrbol son hijos de la raz, entonces u es una frase simple.
Compiladores. Tema1

n 43

1.3.2. Gramticas Formales. 1.3.2.3. rboles de derivacin

Proceso inverso
Para cada derivacin existe un nico rbol de derivacin. Sin emparquego, de una misma sentencia pueden obtenerse, a veces, varias derivaciones diferentes. Por ejemplo, el mismo rbol anterior puede aplicarse a las siguientes derivaciones :
N NC NCC CCC 2CC 23C 234 N NC NCC CCC C3C 23C 234 N NC NCC CCC 2CC 2C4 234

Compiladores. Tema1

n 44

1.3.2. Gramticas Formales. 1.3.2.4. Ambigedad

Se dice que una sentencia es ambiga cuando para una misma sentencia podemos tener varios rboles de derivacin diferentes.
(Como se vio en el ejemplo anterior, una misma sentencia puede obtenerse como resultado de varias derivaciones diferentes, pero a las que les corresponde un nico rbol de derivacin.)

Se dice que una gramtica es ambiga si tiene al menos una sentencia ambiga. Se dice que un lenguaje es ambigo si existe una gramtica ambiga que lo genera.

Ejemplo :
G = ({i, +, *, (, )}, {E}, E, E ::= E + E | E * E | ( E ) | i })
Consideremos la sentencia i+i*i. Para esta sentencia podemos tener los siguientes rboles de derivacin :

Compiladores. Tema1

n 45

1.3.2. Gramticas Formales. 1.3.2.4. Ambigedad

rboles de derivacin para la sentencia i+i*i.


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

Esto no quiere decir que el lenguaje sea ambiguo, ya que se puede encontrar una gramtica equivalente a la anterior, sin ser ambigua. Pero hay lenguajes para los cuales es imposible encontrar gramticas no ambiguas. Estos lenguajes se denominan inherentemente ambiguos.

Compiladores. Tema1

n 46

1.3.2. Gramticas Formales. 1.3.2.4. Ambigedad

Ejemplo: gramtica equivalente a la anterior sin ser ambiga: G = ({i, +, *, (, )}, {E, T, F}, E, E ::= T | E + E, T ::= F | T * F, F ::= ( E ) | i }) Existe un slo rbol de derivacin para la sentencia i+i*i
E E T F i + T T F i * i F

Compiladores. Tema1

n 47

1.3.2. Gramticas Formales. 1.3.2.6. Recursividad

Una gramtica G se llama recursiva en A, A N, si

A +xAy
Si x es la palabra vaca, se dice que la gramtica es recursiva a izquierdas

A +Ay
Si y es la palabra vaca, se dice que la gramtica es recursiva a derechas

A +xA
Se dice que una produccin es recursiva si

A::= xAy
La produccin es recursiva a izquierdas si x =.

A::= Ay
Ser recursiva a derechas si y =.

A::= xA Si un lenguaje es infinito, la gramtica que lo representa ha de ser recursiva.


Compiladores. Tema1 n 48

1.3.2. Gramticas Formales. 1.3.2.6. Recursividad Eliminacin de la recursividad por la izquierda en producciones de un mismo smbolo no terminal:

A N
Si P1= (A::=A1| A2|.| An|1| 2||m) donde i no comienza por A entonces //crear un smbolo nuevo A N= N {A}; P=(P-P1) {A::= 1A| 2A||mA ; A::= 1A| 2A||nA|} fsi f

Compiladores. Tema1

n 49

1.3.2. Gramticas Formales. 1.3.2.6. Recursividad

1. 2.

Eliminacin de la recursividad por la izquierda en ms de un paso Disponer los N en algn orden A1, A2,An Para i:=1 hasta n Para j:=1 hasta n Si i j entonces reemplazar cada produccin Ai::= Aj por: Ai::= 1 | 2 |. k donde Aj::= 1 | 2 |. k son todas las reglas de Aj fsi Eliminar la recursividad por la izquierda de las Ai fpara fpara

Compiladores. Tema1

n 50

1.3.2. Gramticas Formales. 1.3.2.6. Recursividad. Ejemplo.

G =({i,+,*,(,)},{E,T},E, P={E ::=T+E | T*E | i ; T::=E|(E)})


1. 2. A1=E; A2=T Bucles: i=1 (A1=E); j=1 (A1=E). Se reemplazaran E::=E. No hay. i=1 (A1=E); j=2 (A2=T). Se reemplazan E::=T. El nuevo P es

E ::=E+E | E*E |(E)+E | (E)*E | i T::= E | (E)


Se elimina la recursin en E quedando P:

E ::= (E)+EE | (E)*EE | i E E ::= +EE | *EE | T::= E | (E) i=2 (A2=T); j=1 (A1=E). Se reemplazan T::=E. El nuevo P es E ::= (E)+EE | (E)*EE | i E E ::= +EE | *EE | T::= (E)+EE | (E)*EE | i E | (E)
Se eliminara la recursin en T si la hubiera.

i=2 (A2=T); j=2 (A2=T). Se reemplazaran T::=T. No hay

El conjunto final de producciones es P


Compiladores. Tema1 n 51

1.3.2. Gramticas Formales. 1.3.2.7. Factorizacin a izquierdas


Se puede factorizar a izquierdas cuando en una gramtica aparecen producciones de un mismo smbolo no terminal en cuya parte derecha, la primera parte es comn.

Algoritmo de factorizacin a izquierdas:


A N Si A::=1| 2 | ..|n entonces //crear un smbolo nuevo A y cambiar las producciones por: N= N {A}; A::= A A::= 1| 2||n fsi f
Ejemplo: {E ::=E+E | E*E | i }. Se crea E y quedara: E ::= EE | i E::= +E| *E
Compiladores. Tema1 n 52

Вам также может понравиться