Академический Документы
Профессиональный Документы
Культура Документы
Compiladores. Tema1
n 1
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
Compiladores. Tema1
n 2
LF LI
LO
Compiladores. Tema1
n 3
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
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
Intrpretes: programas que ejecutan las instrucciones que se encuentran en el texto fuente
Datos
Intrprete Ejecucin
Resultados
Compiladores. Tema1
n 6
Compiladores. Tema1
n 7
FRONT-END ANLISIS
Programa fuente
MANEJO
SNTESISS
ERRORES
n 8
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
n 10
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
:=
:= id1 id2 id3 + * id 60 id 3
60
id
Compiladores. Tema1
n 12
:=
id
id
id
Entero_real
60
Compiladores. Tema1
n 13
Temp1 : = entero_real (60) Temp2 : = id3 * temp1 Temp3 : = id2 + temp2 Id1 : = temp3
Compiladores. Tema1
id1 id2
+ * id3 Entero_real 60
n 14
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:
Ensamblador
0010001001..........................011
Compiladores. Tema1 n 16
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
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
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
n 20
xi = xxx...xx
|----------------| i
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
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
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
n 25
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
L* = Li
i=0
Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles, incluso L0. Todas las clausuras contienen la palabra vaca.
L* = L+ {} L+ = L L* = L* L
* = W()
Se denominar * al lenguaje universal o universo del discurso sobre el alfabeto
Compiladores. Tema1 n 27
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
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
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
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
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.
produccin aplicada a los smbolos ms a la izquierda de la palabra. Se utiliza en cada derivacin directa la
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 *.
Compiladores. Tema1
n 33
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
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. 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
Compiladores. Tema1
n 37
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 :
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
T, A, V N, y S es el axioma de la gramtica.
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
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
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
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
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
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
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
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 =.
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. 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
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.