teoría de lenguajes y compiladores
DESCRIPTION
Unidad I. Analizador lexicográfico. Teoría de lenguajes y compiladores. Semana 1. Temas. Introducción a la teoría de lenguajes. Evolución de los lenguajes de programación. Categorías de los lenguajes. Elementos de un lenguaje de programación. Compiladores e intérpretes. Objetivo General. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/1.jpg)
Teoría de lenguajes y compiladores
Unidad I
Analizador lexicográfico
Introducción a la teoría de lenguajes. Evolución de los lenguajes de programación. Categorías de los lenguajes. Elementos de un lenguaje de
programación. Compiladores e intérpretes.
Temas
Semana 1
![Page 2: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/2.jpg)
Objetivo General
El alumno al finalizar el curso podrá desarrollar aplicaciones que le permitan determinar si una estructura gramatical corresponde a una sentencia valida en la definición de un lenguaje en particular, teniendo en cuenta el contexto sintáctico y semántico. Así mismo estará capacitado para proponer nuevas formas estructurales en la definición de lenguajes de programación.
2
![Page 3: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/3.jpg)
Objetivos Específicos
• Diseñar e implementar un analizador lexicográfico.
• Diseñar e implementar un analizador sintáctico.
• Diseñar e implementar un analizador semántico.
3
![Page 4: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/4.jpg)
Objetivos Instruccionales
• Describir la evolución de los lenguajes de programación y reconociendo las categorías existentes, así como los elementos que la conforman.
• Establecer las diferencias entre, compiladores e interpretes.
4
![Page 5: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/5.jpg)
Reflexión:
Si eres programador y no logras hacer algo que sirva…
…llámalo versión
![Page 6: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/6.jpg)
![Page 7: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/7.jpg)
Programación
“El arte de la programación, es el arte de organizar la
complejidad”.
“Organizar los cálculos de manera que nuestros
sentidos sean suficientes para garantizar que el
cómputo arroje los resultados esperados”.
Intr
od
ucc
ión
![Page 8: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/8.jpg)
Requisitos mínimos para desarrollar Requisitos mínimos para desarrollar un lenguaje.un lenguaje.
• Ayudar a escribir buenos programas.
• Fácil de leer.
• Fácil de entender.
• Fácil de modificar.
Intr
od
ucc
ión
![Page 9: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/9.jpg)
Programación vs MantenimientoProgramación vs Mantenimiento
Creación inicial y verificación
de un progama.
Se refiere a las correcciones y los cambios
que se realizan en un programa después de su desarrollo.
Intr
od
ucc
ión
![Page 10: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/10.jpg)
Estructura y OrganizaciónEstructura y Organización
Son claves para manejar programas
muy grandes.
La legibilidad de un programa puede mejorarse organizándolo de tal manera que cada parte pueda entenderse en forma relativamente
independiente del resto.
Intr
od
ucc
ión
![Page 11: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/11.jpg)
Von Neumann
Introduce el concepto de programa almacenado. Propuso que los programas
se almacenaran de forma digital en la memoria de la computadora junto con
los datos.
Por otro lado, se dio cuenta que la aritmética decimal usada por la ENIAC podía ser reemplazada usando aritmética binaria. Este
diseño, conocido como ARQUITECTURA de VON NEUMANN, ha sido la base para casi todas las computadoras
digitales.
Intr
od
ucc
ión
![Page 12: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/12.jpg)
La Máquina de Von Neumann
Unidad decontrol
Unidad Aritmética
Unidad deentrada y salida
Acumulador A
Registro R
Memoria para instrucciones y datos
Organización de la máquina de Von Neumann
Intr
od
ucc
ión
![Page 13: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/13.jpg)
La Máquina de Von NeumannIn
tro
du
cció
n
Los enteros eran la única forma de datos
Podía sumar, restar, multiplicar, dividir y tomar el valor absoluto de un numero.
A una localidad de memoria podía
asignársele el valor contenido en el
acumulador
Determina el orden de ejecución de las instrucciones.
![Page 14: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/14.jpg)
Código de Máquina
Lenguaje de máquina: 00000010101111001010 00000010101111101010 00000011001100100110
Lenguaje Ensamblador: Load I Add J Store K
Lenguaje alto nivel: K = I + J
La Máquina de Von NeumannIn
tro
du
cció
n
![Page 15: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/15.jpg)
Primera experiencia
En los años 50, se creía que los programas eficientes solo podían escribirse manualmente, usando algunas variantes de lenguajes de máquina. (Fortran)
¡ Surge preocupación por la eficiencia de ejecución !
• El alto costo de creación de código ensamblador o de máquina fue la principal motivación para el desarrollo de Fortran (FORmula TRANslation).
• Ninguna notación diferente del lenguaje de máquina puede ejecutarse directamente en un computador.
Intr
od
ucc
ión
![Page 16: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/16.jpg)
Compilador
Código destino
Programa fuente
Entrada Salida
Tiempo de traducción
Tiempo de ejecución
Primera experienciaIn
tro
du
cció
n
![Page 17: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/17.jpg)
Beneficios de los lenguajes de alto nivel
• Surgimiento de usuarios y programas nuevos.
• Proporciona notaciones fáciles de leer.
• Proporciona portabilidad (Usuarios pueden intercambiar programas)
Primera experienciaIn
tro
du
cció
n
![Page 18: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/18.jpg)
Estructura y legibilidad Vs Eficiencia
• La legibilidad y la capacidad de modificar los programas pueden contribuir también a la eficiencia.
• La eficiencia de un programa depende de las decisiones tomados en los niveles de diseño, desde la concepción hasta la elección de estructuras de datos y algoritmos para el código final.
• El refinamiento de código se realiza con la mejora de puntos críticos, que son las pequeñas partes muy utilizadas en donde el programa la mayor parte de su tiempo de ejecución.
Primera experienciaIn
tro
du
cció
n
![Page 19: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/19.jpg)
Evo
luci
ón
de
los
len
gu
aje
s Cinco generaciones de los lenguajes
de programaciónGeneración Nombre Particularidad
Primera De maquina Especifico para cada microprocesador, uso de código binario
Segunda Ensamblador Uso de nemotécnicas que abstraen al lenguaje de maquina
Tercera De alto nivel Lenguajes estructurados con comandos cercanos al lenguaje natural
Cuarta Propósito especial Programas orientados a programas específicos
Quinta Naturales Incluye inteligencia artificial y sistemas expertos
![Page 20: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/20.jpg)
Ca
teg
ori
a d
e lo
s le
ng
ua
jes
Clasificación de los lenguajes de programación
![Page 21: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/21.jpg)
Como se debe estructurar un programa
Existe más de una forma para solucionar un problema, así que hay mas de una forma para estructurar un programa. La estructura tiene que establecerse para cada programa.
Formas:• Descendente
• Modular
• Objetos
Ele
me
nto
s d
e u
n le
ng
ua
je
![Page 22: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/22.jpg)
Estructura sintáctica
• La sintaxis de un lenguaje especifica como están construidos los programas en dicho lenguaje.
• La estructura sintáctica, es decir la estructura impuesta por la sintaxis del lenguaje, constituye la herramienta para trabajar con el lenguaje.
• Esta se ha utilizado para organizar descripciones de lenguajes y traductores, así como reglas para entender los programas escritos en un lenguaje.E
lem
en
tos
de
un
len
gu
aje
![Page 23: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/23.jpg)
Estructura sintáctica
La sintaxis de un lenguaje programación casi siempre se especifica usando alguna variante de una notación conocida como GRAMATICA INDEPENDIENTE DEL CONTEXTO o simplemente GRAMATICA.
Las variantes de notación son:
• BNF (Forma de Backus-Naurs)
• BNFE (BNF extendida)
• ESQUEMAS DE SINTAXISEle
me
nto
s d
e u
n le
ng
ua
je
![Page 24: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/24.jpg)
NOTACION BNF
La siguiente notación describe la sintaxis de los números reales.
<numero-real> ::= <secuencia-digitos> . <secuencia-digitos>
<secuencia-digitos> ::= <digito> | <digito><secuencia-digitos>
<digito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Otro ejemplo:
<expresion> ::= <expresion> + <termino> | <expresion> - <termino> | <termino> <termino> ::= <termino> * < factor> | <termino> div <factor> | <factor>
<factor> ::= <expresion> |<termino> | <constante>
Ele
me
nto
s d
e u
n le
ng
ua
je
![Page 25: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/25.jpg)
Sean las 4 reglas siguientes parte de la gramática de un lenguaje de programación.
<entero> ::= <digito> | <digito> <entero>
<identificador> ::= <letra> | <identificador> <digito> | <identificador> <letra>
<parametros> ::= ( <lista_id> )
<lista_id> ::= <identificador> | <identificador> , <lista_id>
NOTACION BNFE
lem
en
tos
de
un
len
gu
aje
![Page 26: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/26.jpg)
NOTACION BNF EXTENDIDA
Expresion ::= Termino { ( ´+´ | ´-´ ) Termino } Termino ::= Factor { ( ´*´ | div ) Factor } Factor ::= ´(´ Expresion ´)´ | Variable | Constante
Los símbolos no terminales comienzan con letras mayúsculas, los terminales que consisten en símbolos como + , - se colocan entre comillas sencillas y los símbolos terminales en negrita como div.
Además:• Una barra vertical |, representa una opción• Los paréntesis, ( y ), se usan para agrupar• Las llaves, { y }, representan cero o mas repeticiones• Los corchetes, [ y ], representan una construcción opcional
Ejemplo:
Ele
me
nto
s d
e u
n le
ng
ua
je
![Page 27: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/27.jpg)
NOTACIÓN EN ESQUEMA DE SINTAXIS
Se construye un subesquema para cada símbolo no terminal.
Expresión
Termino Termino+
-
Termino
Factor Factor*
div
FactorTermino( )
Variable
Constante
Ele
me
nto
s d
e u
n le
ng
ua
je
![Page 28: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/28.jpg)
Un diagrama de conway es un grafo dirigido que tiene dos componentes esenciales, además de las líneas de flechas que sirven de conectivas.
•El “rectángulo” para indicar que en ese punto hay una metanoción del vocabulario no terminal N ( y por tanto tendrá otro diagrama de conway para definirle).
•El “circulo” para indicar que en ese punto hay un símbolo terminal, que por lo tanto será un elemento del vocabulario terminal T.
En estos diagramas se acostumbrará a comenzar el recorrido por la izquierda, por la rama que suele llevar muy cercano a ella el nombre de la metanoción a definir, se sigue el recorrido en el sentido de las flechas y cada elemento que se va encontrando se toma y se concatena a lo que ya se tuviera.
Diagrama de ConwayE
lem
en
tos
de
un
len
gu
aje
![Page 29: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/29.jpg)
Entero
Digito
Identificador
Letra
Letra
DigitoEle
me
nto
s d
e u
n le
ng
ua
jeDiagrama de Conway
![Page 30: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/30.jpg)
Parametros
Lista_id
Lista_id
Identificador
)(
,
Diagrama de ConwayE
lem
en
tos
de
un
len
gu
aje
![Page 31: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/31.jpg)
Conceptos relacionados
Con algunas técnicas básicas de escritura de compiladores se pueden construir traductores para una gran variedad de lenguajes y máquinas
Arquitectura de Computadoras
Arquitectura de Computadoras
Lenguajes de Programación
Lenguajes de Programación
Teoría de Lenguajes
Teoría de Lenguajes
Teoría de Algoritmos
Teoría de Algoritmos
Ingeniería de Software
Ingeniería de Software
CompiladoresCompiladores
Co
mp
ilad
ore
s e
inte
rpre
tes
![Page 32: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/32.jpg)
CompiladoresUn compilador es un programa que lee un programa en un lenguaje y lo traduce a un programa equivalente en otro lenguaje, y además informa al usuario sobre la presencia de errores en el programa de entrada
programa programa
fuente objeto
mensajes
de error
compilador
Co
mp
ilad
ore
s e
inte
rpre
tes
![Page 33: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/33.jpg)
Computadora Persona
HISTORIA
Código Máquina
Lenguaje Ensamblador
Código Máquina
Ensamblador
Código Máquina
Lenguaje Ensamblador
Lenguaje de Alto Nivel
CompiladorEnsamblador
Co
mp
ilad
ore
s e
inte
rpre
tes
![Page 34: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/34.jpg)
• ENSAMBLADOR Traducen programas escritos en lenguaje ensamblador a
código máquina
• COMPILADORTraducen programas escritos en lenguaje de alto nivel a código
intermedio o a código máquina
• INTERPRETE No genera código objeto, analiza y ejecuta directamente cada
proposición del Programa Fuente (PF)
• PREPROCESADOR Sustituyen macros, incluyen archivos o extensión del
lenguaje.
TIPOS DE SISTEMAS DE COMPILACIÓNC
om
pila
do
res
e in
terp
rete
s
![Page 35: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/35.jpg)
SISTEMA PARA PROCESAMIENTO DE UN LENGUAJE
estructura del programa fuente
programa fuente
programa objeto en lenguaje ensamblador
código de máquina relocalizable biblioteca archivos obj.relocal.
código de máquina absoluto
preprocesador
ensamblador
compilador
editor de carga y enlace
Co
mp
ilad
ore
s e
inte
rpre
tes
![Page 36: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/36.jpg)
• ANÁLISIS (Etapa Inicial):Divide al PF en sus elementos componentes y crea
una representación intermedia. Se determinan las operaciones y se registran en una estructura de árbol (ej. árbol sintáctico)
• SÍNTESIS (Etapa Final): Construye el PO deseado a partir de la
representación Intermedia (requiere técnicas más especializadas)
PARTES DE LA COMPILACIÓNC
om
pila
do
res
e in
terp
rete
s
![Page 37: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/37.jpg)
UN AMBIENTE GENERAL DE COMPILACIÓN
Fuente
Análisis léxicoAnálisis sintácticoAnálisis semántico
Intermedio
Generador de código
Código relocalizable
Enlazador
Objeto
Más: Sistemas de
edición y depuración
Co
mp
ilad
ore
s e
inte
rpre
tes
![Page 38: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/38.jpg)
FASES DE UN COMPILADOR PROGRAMA FUENTE
analizador léxico
analizador sintáctico administrador analizador semántico manejador de la tabla generador de código intermedio de errores
de símbolos optimizador de código generador de código PROGRAMA OBJETO
Cada fase transforma al PF de una representación a otra
Co
mp
ilad
ore
s e
inte
rpre
tes
![Page 39: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/39.jpg)
ESQUEMA DE BLOQUES DE UN COMPILADOR
FUENTE Compilador
ANALISIS Scanner Tabla Parser de símbolos SINTESIS Prep. para la Gen. del código OBJETO Gener. del código
Co
mp
ilad
ore
s e
inte
rpre
tes
![Page 40: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/40.jpg)
ESTRUCTURA FUNCIONAL DE UN COMPILADOR (de una pasada)
SENTENCIA
Fuente Explorador Reconocedor Generador Objeto
de código
Tabla de
símbolos
Co
mp
ilad
ore
s e
inte
rpre
tes
![Page 41: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/41.jpg)
Lex y YACC
• Herramientas que nos permiten desarrollar componentes o la mayor parte de un compilador
• Son un recurso invaluable para el profesional y el investigador
• Existen paquetes freeware
HERRAMIENTAS PARA CONSTRUCCIÓN DE COMPILADORES
Co
mp
ilad
ore
s e
inte
rpre
tes
![Page 42: Teoría de lenguajes y compiladores](https://reader036.vdocuments.site/reader036/viewer/2022062500/56815164550346895dbf9199/html5/thumbnails/42.jpg)
Teoría de lenguajes y compiladores
Unidad I
Analizador lexicográfico
Introducción a la teoría de lenguajes. Evolución de los lenguajes de programación. Categorías de los lenguajes. Elementos de un lenguaje de
programación. Compiladores e intérpretes.
Temas
Semana 1