teoría de lenguajes y compiladores

42
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

Upload: alma

Post on 22-Jan-2016

86 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Teoría de lenguajes y compiladores

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

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

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

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

Reflexión:

Si eres programador y no logras hacer algo que sirva…

…llámalo versión

Page 6: Teoría de lenguajes y compiladores
Page 7: Teoría de lenguajes y compiladores

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

• 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

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

• 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

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

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

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

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

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

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