Está en la página 1de 14

Procesadores de Lenguajes I Tema 1.

Introduccin a los Traductores


Profesor: Jos Ignacio Gmez Espnola Pg. 1




TEMA 1. INTRODUCCIN A LOS
TRADUCTORES








- Conceptos Generales.

- Gramticas y Lenguajes.

- Estructura de un Traductor.

- Tipos de Enfoques de los Lenguajes de Programacin




Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 2


CONCEPTOS GENERALES


1. Definiciones

- Alfabeto: conjunto finito y no vaco de smbolos.

- Smbolo: elemento de un alfabeto.

- Palabra: concatenacin finita de smbolos.

- A
*
: conjunto de todas las palabras que se pueden
formar con el alfabeto A.

- Lenguaje: conjunto finito o infinito de oraciones,
cada una de ellas de longitud finita y construida por
concatenacin de un conjunto finito de palabras.

- Sintaxis: conjunto de reglas formales que especifican
qu construcciones del lenguaje son legales.

- Semntica: conjunto de reglas que especifican el
significado de cada construccin sintcticamente
correcta.

- Traductor: sistema que acepta como entrada la
representacin textual de un algoritmo en un lenguaje
fuente y produce una representacin del mismo en un
lenguaje objeto. El traductor se desarrolla en un
lenguaje de implementacin.

Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 3
- Compilador: traductor que convierte el programa del
lenguaje fuente al lenguaje objeto antes (y de forma
independiente) de la ejecucin del programa.

- Intrprete: traductor que realiza la conversin y la
ejecucin al mismo tiempo.

- Encuadernador: resuelve las referencias que hayan
quedado abiertas en un programa objeto, aadiendo
los mdulos que se necesiten para obtener un
programa ejecutable.

- Cargador: ubica en memoria un programa ejecutable
y comienza su ejecucin.


Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 4

2. Tcnicas de Construccin de Traductores.
Bootstrapping

- Autocompilador: es aqul que est escrito en el
mismo lenguaje que se pretende compilar.

- Bootstrapping: tcnica mediante la cual se puede
construir un compilador compilndolo mediante un
lenguaje intermedio, pudiendo utilizar dicho
compilador a su vez como entrada de otro
compilador, ayudndonos a generar otro lenguaje
intermedio, y as sucesivamente hasta generar el
compilador del lenguaje de alto nivel final que
estamos buscando. Se utiliza especialmente para la
generacin de autocompiladores.













Wirth desarroll el primer compilador de Pascal en
Zurich mediante esta tcnica. Tambin es utilizada
por el compilador C de GNU.

Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 5


GRAMTICAS Y LENGUAJES


1. Concepto de Gramtica

Llamamos Gramtica Generativa a la cudrupla G =
(V, T, P, S) donde:

- V: alfabeto de variables o smbolos no terminales.
- T: alfabeto de smbolos terminales.
- P: conjunto de reglas de produccin.
- S: Smbolo especial de V denominado axioma o
smbolo inicial de la gramtica.

Ejercicio1: G = (V, T, P, S) donde:
V = {S, A, B}
T = {a, b}
P = {SaB, SbA, Aa, AaS, A bAA, Bb,
BbS, BaBB}

Ejercicio2: G = (V, T, P, E) donde:
V = {E}
T = {+, -, , (, ), <id>}
P = {EE+E, EE-E, EE E, E(E), E<id>}


2. Notacin de Backus

Permite abreviar la especificacin de la parte
izquierda de las producciones de una gramtica, siempre
que haya al menos dos producciones cuyas partes
izquierdas sean idnticas.
Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 6
3. Paso de derivacin

Sea G = (V, T, P, S) y o, | e {VT}
*
. Decimos que
| se deriva de o en un paso y se nota como o
+
| s y
solo s:
-
1
y
2
e {VT}
*
y oeP / o=
1
o
2
y |=
1

2


Sea G = (V, T, P, S) y o, | e {VT}
*
. Decimos que
| se deriva de o y se nota como o
*
| s y solo s:

-
1
,...,
n
e {VT}
*
/ o=
1

+

n
=|

4. Lenguaje generado por una gramtica

Se define como el conjunto de cadenas compuestas
por smbolos terminales que se derivan del axioma de la
gramtica dada:

L(G) = {ueT
*
/ S
*
u}

Ejercicio3: Obtener el lenguaje generado por G = ({S}, {a, b},
SaSb, S ab}, S).

5. Clasificacin de las gramticas segn Chomsky

- Tipo 0: Es el tipo ms general. Definen lenguajes con
estructura de frases. Las mquinas de Turing reconocen
lenguajes de este tipo.

- Tipo 1: Gramticas sensibles al contexto. Las
producciones son de la forma:

o
1
Ao
2
o
1
|o
2
/ AeV, |e (VT)
+
, o
1
,o
2
e (VT)
*
.
Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 7
- Tipo 2: Gramticas libres de contexto. Son reconocidos
por los autmatas a pila. Una de sus aplicaciones es la
generacin de analizadores sintcticos.

Las producciones son del tipo: A o / AeV, oe (VT)
*


- Tipo 3: Gramticas regulares. Los lenguajes
reconocidos por estas gramticas se denominan
lenguajes regulares, y son reconocidos por autmatas
finitos. Una de sus aplicaciones es la generacin de
analizadores lxicos.

Las producciones pueden tener la siguiente forma:

Au, AuB / A, B eV, u e T
*


Denominndose gramtica regular lineal por la
derecha.

O tambin:

Au, ABu / A, B eV, u e T
*


Denominndose en este caso gramtica regular lineal
por la izquierda.

6. Gramticas ambiguas

Una gramtica se dice que es ambigua si existe al
menos una palabra del lenguaje generado por dicha
gramtica con al menos dos rboles de derivacin.

Ejercicio4: Comprobar si la siguiente gramtica es ambigua G =
({S, A, B}, {a, b}, {SaSb, Sab, S })
Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 8
7. Representacin EBNF de la sintaxis de los lenguajes

Smbolos utilizados para la notacin EBNF:

::= Equivalencia
X smbolo terminal
<X> smbolo no terminal
{X} X puede aparecer 0 ms veces
X|Y Puede escogerse entre X o Y
[X] X puede aparecer o no
(X) Prioridad
Delimitacin de smbolos no EBNF coincidentes
con smbolos EBNF

cadena vaca

Ejemplo: Descripcin EBNF de un lenguaje simple:

<PROG> ::= <SENT> {<SENT>} fin
<SENT> ::= <N_INSTR><INSTR>
<INSTR> ::= <ASIG>|<ENTR>|<SAL>|<SALTOC>|<SALTOI>
<ENTR> ::= entrar <N_MEM>
<SAL> ::= salir <N_MEM>
<N_MEM> ::= <D_MEM> {,<D_MEM>}
<D_MEM> ::= #<DIG>
<SALTOI> ::= goto <N_INSTR>
<SALTOC> ::= if <EX_LOG> <N_INSTR>
<N_INSTR> ::= L<DIG>[<DIG>[<DIG>]]
<DIG> ::= 0|1|...|9
<ASIG> ::= <D_MEM> := <EX_ART>
<EX_ART> ::= <OP> <OP_ART> <OP> {<OP_ART> <OP>}
<EX_LOG> ::= <OP> <OP_LOG> <OP>
<OP_LOG> ::= = | > | <
<OP_ART> ::= + | - | * | /
<OP> ::= <C_MEM> | <CONST>
<C_MEM> ::= ( <D_MEM> )
<CONST> ::= <DIG> {<DIG>}.

Ejercicio5: Obtener un programa vlido en el lenguaje expresado
en el ejemplo anterior.
Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 9

8. Obtencin de la gramtica abstracta a partir de la
notacin EBNF

Pasos para la obtencin de la gramtica abstracta:

1. Identificar los tokens en la descripcin EBNF. Aquellas
variables que pasen a ser tokens se expresarn en
minscula en la versin BNF, como si se tratara de un
terminal ms, y desapareciendo las reglas asociadas en
dicha versin BNF.

2. Transformar la notacin EBNF a BNF. Para ello habr
que eliminar las construcciones del tipo [X] y {X}.
Adems, la barra vertical nicamente podr mantenerse
para utilizar la notacin de Backus.

3. Construir una tabla con los smbolos terminales y no
terminales a asociar a cada smbolo de la gramtica,
teniendo en cuenta que los tokens seleccionados pasan a
ser terminales.

4. Obtener las producciones definitivas de la gramtica
abstracta a partir de la tabla obtenida.


Ejercicio6: Obtener la gramtica abstracta asociada al lenguaje
EBNF dado en el ltimo ejemplo.
Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 10


ESTRUCTURA DE UN TRADUCTOR


1. Formalizacin del concepto de traduccin

1.1. Funcin de Interpretacin

Sea D un dominio semntico y L el dominio
sintctico de un lenguaje L(G). I se define como la
funcin de interpretacin:
I: L D

1.2. Modelo semntico

Se define el Modelo de Interpretacin o modelo
semntico como la tripleta M = (L, D, I).

1.3. Traduccin

Sean L
1
(G
1
) y L
2
(G
2
) dos lenguajes y sean
M
1
(L
1
, D, I
1
) y M
2
(L
2
, D, I
2
) dos modelos de
interpretacin, siendo:

I
1
: L
1
D I
2
: L
2
D
oeL
1
(G
1
) - |eL
2
(G
2
) t.q. I
1
(o) = I
2
(|)

1.4. Esquema de traduccin

Sean f: L
1
D y g: D L
2
. Definiremos el
esquema de traduccin como T = f o g, dando lugar a
la aplicacin T: L
1
L
2
.
Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 11


2. Fases de la traduccin



























Ejercicio7: Aplicar las distintas fases de la traduccin a la
expresin: a := b + c * 10, suponiendo que a, b, y c son variables
de tipo real.

Analizador
lxico

Tabla de
smbolos
Generador de
cdigo objeto
Optimizador
de cdigo
Generador de cdigo
intermedio
Analizador
semntico
Analizador
sintctico
Programa
fuente
Secuencia de tokens
rbol sintctico
Cdigo intermedio
Programa
objeto
Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 12

3. Tratamiento de errores

Tipos de error por el momento de deteccin:

- Errores en tiempo de ejecucin.
- Errores en tiempo de compilacin.

Posibles respuestas del compilador ante la deteccin
de errores en tiempo de compilacin:

1. Respuestas inaceptables:

a. El compilador se bloquea si recibe un cdigo
fuente errneo.

b. El compilador genera un cdigo objeto errneo.

2. Respuestas aceptables:

a. Detecta el primer error, informa y para.

b. Detecta el error e intenta continuar el anlisis,
tratando de evitar la avalancha de errores que
pueden producirse asociadas al ya detectado.

c. Trata de corregir los errores, emitiendo al final
un informe.

Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 13

4. Herramientas para la construccin de compiladores


- Generadores de Analizadores de Lxico: generacin
de un analizador de lxico mediante expresiones
regulares.


- Generadores de Analizadores Sintcticos: generacin
de un analizador sintctico a partir de una gramtica
independiente del contexto.


- Generadores de Cdigo Intermedio (o traductores
dirigidos por sintaxis): generacin de cdigo
intermedio a partir de un recorrido por el rbol
sintctico.


- Generadores Automticos de Cdigo: generacin de
cdigo objeto a partir del cdigo intermedio y de las
caractersticas del lenguaje mquina.


- Mquinas para Optimizacin de Cdigo: facilitan la
optimizacin de cdigo mediante la utilizacin de
herramientas de anlisis del flujo de datos.

Procesadores de Lenguajes I Tema 1. Introduccin a los Traductores
Profesor: Jos Ignacio Gmez Espnola Pg. 14

TIPOS DE ENFOQUE DE LOS LENGUAJES
DE PROGRAMACIN

1. El enfoque imperativo

- Es el enfoque clsico de programacin.
- Se especifica cmo alcanzar la solucin a un
problema mediante un algoritmo concreto y preciso.
- Existe el concepto de asignacin.
- Ejemplos: C, Pascal, Fortran, Basic.

2. El enfoque lgico

- No se especifica cmo alcanzar la solucin, sino cual
es el objetivo y cuales son los medios para alcanzarlo.
- Se trata de demostrar un objetivo a partir de un
conjunto de axiomas y un conjunto de reglas de
inferencia, generando nuevos hechos hasta la
obtencin del objetivo buscado.
- Ejemplo: http://es.wikipedia.org/wiki/Prolog

3. El enfoque funcional

- Enfoque muy terico y poco utilizado.
- Enfatiza la evaluacin de funciones en lugar de la
evaluacin de sentencias.
Total = 0;
For (i=1; i<=10; i++) ` sum[1..10]
Total += i; )
- Ejemplo: http://es.wikipedia.org/wiki/Haskell

También podría gustarte