Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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