Sunteți pe pagina 1din 71

DISEO DE

COMPILADORES
INTRODUCCIN
PROCESADORES DE LENGUAJE

COMPILACIN INTRPRETE

Diseo de Compiladores
PROCESADORES DE LENGUAJE

Diseo de Compiladores
PROCESADORES DE LENGUAJE

MODELO HBRIDO

TRADUCTOR: es aquel procesador de lenguaje que tiene como entrada un


lenguaje fuente, y produce como salida un lenguaje destino con un nivel
similar de complejidad que el lenguaje fuente de entrada.

Diseo de Compiladores
PROCESADORES DE LENGUAJE
Modelo Hbrido - Tendencia

TRADUCTOR: es aquel procesador de lenguaje que tiene como entrada un


lenguaje fuente, y produce como salida un lenguaje destino con un nivel
similar de complejidad que el lenguaje fuente de entrada.

Diseo de Compiladores
PROCESADORES DE LENGUAJE
Esquema General

Diseo de Compiladores
PROCESADORES DE LENGUAJE
Fases de un compilador

Diseo de Compiladores
PROCESADORES DE LENGUAJE
Fases de un compilador

Diseo de Compiladores
TRADUCCION DIRIGIDA POR LA
SINTAXIS
ANALISIS SINTACTICO
Top-Down
Validando mediante un rbol sintctico con una estrategia de arriba-abajo

Diseo de Compiladores
ANALISIS SINTACTICO
Top-Down

Diseo de Compiladores
ANALISIS SINTACTICO
Analizador Sintctico Predictivo

Diseo de Compiladores
ANALISIS LXICO
EXPRESIONES REGULARES
Definicin

Diseo de Compiladores
EXPRESIONES REGULARES
Leyes algebraicas

Leyes algebraicas que se aplican a las expresiones regulares

Diseo de Compiladores
EXPRESIONES REGULARES
Extensiones de las expresiones regulares

Las siguientes son extensiones utilizadas en las expresiones regulares


como consecuencia de su definicin y leyes algebraicas:

Una o ms instancias. Cerradura positiva de Kleene. Representado con


el operador +. As, r+ = r r*, y r* = (r+ | ).

Cero o una instancia. Representado con el operador ?. Asi es posible


establecer que r? = r| .

Clase de caracteres. Es una abreviacin para representar una


secuencia de smbolos. Ejemplo: (a|b|c ..|z) = [a-z]

Diseo de Compiladores
EXPRESIONES REGULARES
Ejemplos

1. Todas las cadenas de letras minsculas que comiencen y terminen con la


letra 'a'.

2. Cadenas de a's y b's que no tengan tres b's consecutivas.

3. Cadenas de a's y b's que terminan en 'a', 'aa', o 'ab'.

4. Cadenas de a's y b's que no poseen un nmero impar de a's consecutivas


seguidas de un nmero impar de b's consecutivas.

Diseo de Compiladores
EXPRESIONES REGULARES
Ejemplos

1. Todas las cadenas de letras minsculas que comiencen y terminen con la


letra 'a'.
a ( [ a-z ]* a )?
2. Cadenas de a's y b's que no tengan tres b's consecutivas.
a* b? ( ab | ba )* b? a*
1. Cadenas de a's y b's que terminan en 'a', 'aa', o 'ab'.
( a | b )* a ( a | b | )
2. Cadenas de a's y b's que no poseen un nmero impar de a's consecutivas
seguidas de un nmero impar de b's consecutivas.
( aa | b )* ( a | bb )*

Diseo de Compiladores
DEFINICIONES REGULARES
Ejemplos

Diseo de Compiladores
AUTMATAS FINITOS
Autmatas Finitos No Determinsticos

Diseo de Compiladores
AUTMATAS FINITOS
Autmatas Finitos No Determinsticos

AFN que reconoce el lenguaje para la expresin regular (a|b)* abb

Diseo de Compiladores
AUTMATAS FINITOS
Algoritmo de Thompson
Construcciones de Thompson que permite obtener un AFN a partir de
una expresin regular
s*

st s|t

Diseo de Compiladores
CONVERSIN DE UN AFN A UN AFD
Algoritmo de Subconjuntos

Operaciones sobre los estados del AFN

Diseo de Compiladores
CONVERSION DE UN AFN A UN AFD
Algoritmo de subconjuntos
Algoritmo de conversin de un AFN a un AFD

Diseo de Compiladores
CONVERSION DE UN AFN A UN AFD
Minimizacin de un AFD

Diseo de Compiladores
SIMULACIN DE UN DIAGRAMA DE FLUJO
Estrategia 1

Diseo de Compiladores
SIMULACIN DE UN AFD
Estrategia 2

Diseo de Compiladores
ANALISIS SINTCTICO
DEFINICIN FORMAL DE UNA GRAMATICA
LIBRE DE CONTEXTO

Instr if (expr) instr else instr

Diseo de Compiladores
DERIVACIONES

Diseo de Compiladores
RELACION BNF EXPRESIONES REGULARES
Conversion

Gramticas libres de contexto: Notacin ms poderosa que las expresiones regulares.

Algoritmo de conversin: A partir de una expresin regular se puede encontrar una


gramtica BNF equivalente.

Entrada: Una expresin regular.


Salida: Una gramtica equivalente.

METODO
1. A partir de la expresin regular de entrada, obtener el AFN equivalente.
2. Para cada estado i del AFN, crear un no terminal Ai.
3. Si el estado i tienen una transicin al estado j con la entrada a, agregar la produccin
Ai aAj. Si el estado i pasa al estado j con la entrada , agregar la produccin Ai Aj.
4. Si i es un estado de aceptacin, agregar Ai .
5. Si i es el estado inicial, hacer que Ai sea el smbolo inicial de la gramtica.

Diseo de Compiladores
A0 -> A1 | A3 A0 -> aA2 | bA4
A1 -> a A2 A2 -> aA2
A3 -> bA4 A4 -> bA4
A2 -> aA2
A4 -> bA4

Diseo de Compiladores
Diseo de Compiladores
Diseo de Compiladores
ELIMINACIN DE LA RECURSIVIDAD POR LA
IZQUIERDA

Diseo de Compiladores
ELIMINACIN DE LA RECURSIVIDAD POR LA
IZQUIERDA

Diseo de Compiladores
ELIMINACIN DE LA RECURSIVIDAD POR LA
IZQUIERDA

Diseo de Compiladores
ANALISIS SINTCTICO DESCENDENTE
PRIMERO(X)
PRIMERO (X)
1. Si X es un terminal, entonces PRIMERO(X) = {X}
2. Si X es un no terminal y X Y1Y2Yk es una produccin para k 1, entonces se
agrega a en PRIMERO(X) si para cierta i, a est en PRIMERO(Yi), y est en todos
las funciones PRIMERO(Y1) PRIMERO(Yi-1)
3. Si esta en todos los conjuntos PRIMERO(Y1) a PRIMERO(Yk), entonces se agrega
en PRIMERO(X).
4. Si X es una produccin definida, entonces se agrega a PRIMERO(X).

PRIMERO (X1X2Xn)
1. Agregar a PRIMERO(X1X2Xn) todos los smbolos que no sean de PRIMERO(X1).
2. Si est en PRIMERO(X1), agregar todos los smbolos que no sean de
PRIMERO(X2).
3. Si est en PRIMERO(X1) y PRIMERO(X2), entonces agregar todos los smbolos
que no sean de PRIMERO(X3), y as sucesivamente.
4. Si est en todos los conjuntos PRIMERO de X1 a Xn, entonces agregar al
conjunto PRIMERO(X1X2Xn)

Diseo de Compiladores
ANALISIS SINTCTICO DESCENDENTE
SIGUIENTE (X)

SIGUIENTE(X)
Aplicar las siguientes reglas hasta que no sea posible agregar ningn smbolo
terminal nuevo a cualquier conjunto SIGUIENTE:

1. Colocar $ en SIGUIENTE(S), en donde S es el smbolo inicial y $ es el delimitador


derecho de entrada.

2. Para cada produccin de la forma A B , agregar a SIGUIENTE(B) todos los


smbolos a excepcin de que se encuentren en PRIMERO().

3. Para toda produccin de la forma:


A B, o,
A B , en donde PRIMERO() contiene a ,

entonces todo lo que hay en SIGUIENTE(A) est en SIGUIENTE(B).

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Gramticas LL(1)

Utilizar un smbolo de la cadena de entrada

L L (1) para realizar la seleccin de la accin


sintctica que corresponda (elegir la siguiente
produccin).

A partir del smbolo inicial, se produce una derivacin por


la izquierda para la verificacin de pertenencia de la
cadena al la gramtica.

Se refiere al anlisis de la cadena de entrada de izquierda a derecha,


hasta encontrar el smbolo $.

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Gramticas LL(1)

Una gramtica G con su Tabla de Anlisis Sintctico sin entradas mltiples se


define como LL(1) y cumple con las siguientes condiciones:
a. No es recursiva por la izquierda
b. No es ambigua
c. Est factorizada por la izquierda en caso de ser necesario
d. Para toda A | , se debe cumplir :
Slo a la vez puede derivar en .
PRIMERO() es disjunto a PRIMERO()
Si deriva en , entonces no deriva en ninguna cadena que comience con
un terminal en SIGUIENTE(A).

Si una gramtica no cumple con alguna de estas condiciones, hay que tratar de
convertirla ya sea aplicando algoritmos de eliminacin de recursin por la
izquierda, factorizando o eliminando la ambigedad.

Observacin: No todas las gramticas pueden ser convertidas en gramticas LL(1).

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Gramticas LL(1)

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Gramticas LL(1)

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Gramticas LL(1)

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Gramticas LL(1)

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Recuperacin de Errores
MODO PNICO
En caso de error, omitir smbolos hasta que aparezca un carcter de sincronizacin.

CASOS TPICOS
1. Todos los smbolos en SIGUIENTE(A) pertenecen al conjunto de sincronizacin de A.
2. Agregar todos los smbolos que pertenecen a PRIMERO(A) al conjunto de
sincronizacin de A.

PRIMERO(F) = PRIMERO(T) = PRIMERO(E) = { (, id } SGTE(E) = SGTE(E) = { ), $ }


PRIMERO(E) = { +, }, PRIMERO(T)= { *, } SGTE(T) = SGTE(T) = { +, ), $ }, SGTE(F) = { +, *, ), $ }

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Recuperacin de Errores

No Terminal PRIMERO SIGUIENTE


E ( , id ),$
E +, ),$
T ( , id +,),$
T *, +,),$
F ( , id *,+,),$

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Recuperacin de Errores

ESTRATEGIA
1. Si M[A,a] = no definido (esta
vaca la entrada), omitir a.
2. Si M[A,a] = sinc, se elimina A
de la pila.
3. Si top() es un terminal b, y
ba, entonces eliminar b de
la pila.

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Recuperacin de Errores
Grammar #3:
Procesar una gramtica que recibe frases palndromo. Los espacios
no cuentan.
Ejemplos:
pop
a man a plan a canal panama

Solution:
<palindrome> ::= a <palindrome> a | b <palindrome> b | c
<palindrome> c | d <palindrome> d | e <palindrome> e | ... | z
<palindrome> z
<palindrome> ::= <letter>
<letter> ::= a | b | c | ... | y | z

Diseo de Compiladores
ANALISIS SINTCTICO PREDICTIVO
Recuperacin de Errores

Below is a sample BNF grammar:


S := '-' FN | FN
FN := DL | DL '.' DL
DL := D | D DL
D := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' |
'8' | '9'

Diseo de Compiladores
ANALISIS SINTCTICO ASCENDENTE
Reducciones

Construccin del rbol de anlisis sintctico en sentido ascendente: se comienza


desde la cadena de entrada y se busca llegar al smbolo inicial de la gramtica.

Reduccin: Reducir la cadena de entrada al smbolo inicial.

Id + id => F * id => T * id => T * F => T => E

Diseo de Compiladores
ANALISIS SINTCTICO ASCENDENTE
Mangos

Diseo de Compiladores
ANALISIS SINTCTICO ASCENDENTE
Poda de Mangos

Para la gramtica : Una reduccin es:

E E+T |T
TT*F |F id * id F * id T * id T * F T E
F ( E ) | id

Diseo de Compiladores
ANALISIS SINTCTICO ASCENDENTE
Analizador Sintctico LR

Si w est en L(G), la
reduccin de un
anlisis sintctico
ascendente, en
otro caso, Error.

Diseo de Compiladores
ANALISIS SINTCTICO ASCENDENTE
Analizador Sintctico LR

Agregar el estado 0 en la pila

Diseo de Compiladores
ANALISIS SEMANTICO

Diseo de Compiladores
ANALISIS SEMNTICO
Definicin dirigida por la sintaxis

Una Def. Dirigida por la Sintaxis es una gramtica libre de contexto, formada por
atributos y reglas o acciones. Los atributos se asocian con los smbolos gramaticales
y las reglas con las producciones.

Si X es un smbolo y a un atributo, escribimos X.a

TIPOS DE ATRIBUTOS

a. Sintetizados, cuyo valor depende de sus hijos y del nodo mismo donde se
encuentra.
b. Heredados, cuyo valor depende de valores en el padre, en el nodo mismo y en
sus hermanos.

Diseo de Compiladores
ANALISIS SEMNTICO
Definicin dirigida por la sintaxis

Ejemplo: Expresiones aritmticas para los operadores + y *

Diseo de Compiladores
ANALISIS SEMNTICO
Definicin dirigida por la sintaxis

Ejemplo: Expresiones aritmticas para los operadores + y *

Diseo de Compiladores
ANALISIS SEMNTICO
Definicin dirigida por la sintaxis

Ejemplo: Atributos sintetizados y heredados

Diseo de Compiladores
ANALISIS SEMNTICO
Definicin dirigida por la sintaxis

Ejemplo: Expresiones aritmticas para los operadores + y *

Diseo de Compiladores
ANALISIS SEMNTICO
Grficos de dependencias

Un grafo de dependencia describe el flujo de informacin entre los atributos en un


rbol de anlisis sintctico. Una flecha de una instancia de atributos a otra significa
que el valor de la primera es necesario para calcular el de la segunda.

Para cada nodo del rbol de anlisis sintctico, etiquetado por el smbolo
gramatical X, el grafo tiene un nodo para cada atributo asociado con X.

Diseo de Compiladores
ANALISIS SEMNTICO
Grficos de dependencias

Diseo de Compiladores
ANALISIS SEMNTICO
EJEMPLO

Construir el rbol sintctico para: a 4 + c

Diseo de Compiladores
ANALISIS SEMNTICO
EJEMPLO (Atributos sintetizados)

Diseo de Compiladores
ANALISIS SEMNTICO
TRANSFORMACIN DE ACCIONES SEMNTICAS

Escribir un Traductor Dirigido por la Sintaxis para una gramtica que


acepta cadenas de operadores asociativos por la izquierda con el
siguiente alfabeto ={ +, -}.

Diseo de Compiladores
ANALISIS SEMNTICO
TRANSFORMACIN DE ACCIONES SEMNTICAS

EJERCICIO: Considerando la gramtica anterior, se pide:

1. Obtener el rbol sintctico para la cadena 9 5 + 2

2. Eliminar le recursin por la izquierda

3. Ordenar las reglas semnticas

4. Obtener el grafo de dependencias para la misma cadena de entrada

Diseo de Compiladores
ANALISIS SEMNTICO
TRANSFORMACIN DE ACCIONES SEMNTICAS

Gramtica de operadores asociativos por la izquierda con recursin por


la izquierda eliminada.

Diseo de Compiladores
ANALISIS SEMNTICO
TRANSFORMACIN DE ACCIONES SEMNTICAS

El grafo de dependencias para la gramtica de operadores binarios


asociativos por la izquierda, sin recursin por la izquierda para la cadena
9 5 + 2 queda:

Diseo de Compiladores
ANALISIS SEMNTICO
TRANSFORMACIN DE ACCIONES SEMNTICAS

El mtodo general para adaptar otros esquemas de traduccin dirigidas


por la sintaxis es el sgte:

a. Suponer que se cuenta con

b. El algoritmo para eliminar la recursin por la izquierda simple es:

c. Aplicar:

Diseo de Compiladores

S-ar putea să vă placă și