Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Profesor
Federico Peinado
Ingeniería en Informática
Facultad de Informática – Universidad Complutense de Madrid
Curso 2009-2010
¿Qué son los Procesadores de Lenguaje?
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 2
Un intérprete involucra a 2 lenguajes
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 3
Diagrama en bloque de un intérprete
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 4
Traductores
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 5
Un traductor involucra a 3 lenguajes
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 6
Diagrama en T de un traductor
A B
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 7
Conexión entre traductores
Bytecode
Java Bytecode Java Bytecode
Máquina
Ensamblador virtual de
C++ Ensamblador x86
C++ Java
x86 EJECUCIÓN
Compilador de Java
para Bytecode (javac.c) Ensamblador
¡No lo puedo ejecutar! x86
Compilador de Java
para Bytecode (javac.exe)
Compilador de C++ ¡Ya lo puedo ejecutar!
Ensamblador
para Ensamblador x86
x86
Las máquinas pueden verse
como los “intérpretes primarios”
(aunque en la práctica suele haber otra Máquina
traducción a lenguaje máquina) x86
Procesadores de Lenguaje EJECUCIÓN
Ingeniería en Informática 1.1 - 8
Más utilidades de la conexión entre traductores
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 9
El caso particular de los compiladores
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 10
El modelo de análisis-síntesis
Procesador de lenguaje
Módulo de Módulo de
Programa
Análisis Síntesis
Representaciones
intermedias
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 11
El módulo de análisis
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 12
Descomposición del análisis en pasos
1. Análisis léxico
Recibe el programa a procesar
Comprueba su validez léxica
Genera la secuencia de componentes léxicos o tokens (=
ocurrencias de categorías léxicas) que hay en el programa
2. Análisis sintáctico
Recibe la secuencia de componentes léxicos
Comprueba su validez estructural
Puede tener en cuenta restricciones contextuales,
como el hecho de que para poder usar un identificador
hay que haberlo declararlo previamente
Genera las representaciones intermedias correspondientes
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 13
Ejemplo de análisis (Simplificado)
Análisis Léxico
print ( 33 + 4 * 5 , “metros” )
print
Análisis
Sintáctico + “metros”
*
33
4 5
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 14
El módulo de síntesis
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 15
Descomposición de la síntesis en pasos
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 16
Ejemplo de síntesis en un intérprete (Simplificado)
* Valor =20
Valor = 33 33
4 5
Valor = 4 Valor = 5
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 17
Ejemplo de síntesis en un traductor (Simplificado)
apila 33
apila 4
apila 5
multiplica
suma
escribe
apila “metros”
escribe
apila 33 print
apila 4
apila 5
multiplica “metros” apila “metros”
suma +
apila 4
* apila 5
apila 33 33 multiplica
4 5
apila 4
apila 5
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 18
Definición de un lenguaje de programación
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 19
Pasos para definir un lenguaje de programación
2. Definición léxica
3. Definición sintáctica incontextual
Tratando sólo los aspectos incontextuales del lenguaje
5. Definición semántica
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 20
Ejemplo de descripción informal: Expresiones aritméticas
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 21
Definición léxica
Categorías léxicas
Ej: Identificador, Número, CadenaDeCaracteres,
ParéntesisAbierto, ParéntesisCerrado, etc.
Se pueden ver como pequeños lenguajes formales, de
hecho asumimos que deben ser lenguajes regulares
Ej: La categoría léxica Número es simplemente el
conjunto infinito de cadenas finitas formadas con los
dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9
REPASO: LENGUAJES FORMALES
(Expresiones Regulares)
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 22
Definición léxica mediante expresiones regulares
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 23
Definición léxica mediante gramáticas regulares
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 24
Definición léxica mediante autómatas finitos
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 25
Ejemplo de definición léxica: Expresiones aritméticas
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 26
Definición sintáctica
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 27
Definición sintáctica incontextual
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 28
Definición sintáctica incontext. mediante gramáticas incontext.
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 29
Definición sintáctica incontext. mediante gramáticas incontext.
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 30
El problema de la ambigüedad
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 31
Ejemplos sobre cómo evitar las gramáticas ambiguas
Gfbf Gfbf-no-ambigua
Terminales: p, ∧, ∨, ¬
Terminales: p, ∧, ∨, ¬ No terminales: fbf, fbf-y,
No terminales: fbf fbf-no
Axioma: fbf Axioma: fbf
Producciones: Producciones:
fbf → p fbf → fbf ∨ fbf-y
fbf → ¬ fbf fbf → fbf-y
fbf → fbf ∧ fbf fbf-y → fbf-y ∧ fbf-no
fbf → fbf ∨ fbf fbf-y → fbf-no
fbf-no → ¬ fbf-no
fbf-no → p
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 32
Ejemplos sobre cómo evitar las gramáticas ambiguas
p ∨ p ∧ p fbf
fbf ∨ fbf-y
fbf-y
fbf-y ∧ fbf-no
fbf-no
p fbf-no p
p
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 33
Prioridades y asociatividad
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 34
Prioridades y asociatividad
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 35
Utilidad de los delimitadores
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 36
Ejemplo: Los paréntesis
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 37
Ejemplo: Los paréntesis
p ∧ p ∨ p p ∧ (p ∨ p)
fbf
fbf
fbf-y
p p
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 38
Definición sintáctica incontextual mediante autómatas a pila
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 40
Definición sintáctica contextual y definición semántica
5. Definición semántica
Etiquetando las estructuras sintácticas con información
adicional sobre el significado de cada categoría sintáctica
Procesadores de Lenguaje
Ingeniería en Informática 1.1 - 41
Críticas, dudas, sugerencias…
Federico Peinado
www.federicopeinado.es
Procesadores de Lenguaje
Ingeniería en Informática