Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

42
Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1

Transcript of Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Page 1: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Teoría de lenguajes y compiladores

Unidad I

Analizadores lexicográficos

Introducción

Semana 1

Page 2: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.
Page 3: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Objetivo General

El alumno al finalizar el curso desarrollará aplicaciones que le permitan determinar si una sentencia corresponde a la estructura gramatical de un lenguaje de programación. Así mismo estará capacitado para proponer nuevas formas estructurales en la definición de lenguajes de programación.

Page 4: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Objetivo Específico

Desarrollar un analizador lexicográfico

Page 5: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Objetivo Instruccional

Analizar la evolución de los lenguajes de programación; estableciendo las diferencias entre ellos, así como los elementos que los conforman.

Page 6: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Reflexión:

Si eres programador y desarrollas algo, pero no logras hacer que sirva …

… llámalo versión

Page 7: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.
Page 8: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Programación

“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 arrojado, sean

los resultados esperados”.

Page 9: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Requisitos mínimos para desarrollar un lenguaje

•Ayudar a escribir buenos programas.

•Fácil de leer.

•Fácil de entender.

•Fácil de modificar.

Page 10: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Programación vs Mantenimiento

Creación inicial y verificación

de un programa.

Se refiere a las correcciones y los cambios

que se realizan en un programa después de su desarrollo.

Page 11: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Estructura y Organización de los Programas

“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.

Page 12: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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.

Page 13: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Organización de la Máquina de Von Neumann

Unidad decontrol

Unidad Aritmética Unidad de

entrada y salida

Acumulador A

Registro R

Memoria para instrucciones y datos

Page 14: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Elementos de la máquina de Von Neumann

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 15: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Codificación

Lenguaje de máquina: 00000010101111001010 00000010101111101010 00000011001100100110

Lenguaje Ensamblador: Load I Add J Store K

Lenguaje alto nivel: K = I + J

Page 16: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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.

Page 17: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Compilador

Código destino

Programa fuente

Entrada Salida

Tiempo de traducción

Tiempo de ejecución

…Primera experiencia

Page 18: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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 experiencia

Page 19: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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 experiencia

Page 20: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Evolu

ción d

e los

leng

uaje

s Generaciones de los lenguajes

de programaciónGeneració

nNombre 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 21: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Cate

gorí

a d

e los

leng

uaje

s Clasificación de los lenguajes

de programación

Page 22: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Formas de organización

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

•ObjetosOrg

aniz

aci

ón d

e u

n p

rog

ram

a

Page 23: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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.

•Se utiliza para organizar descripciones de lenguajes y traductores, así como reglas para entender los programas escritos en un lenguaje.

Nota

ción g

ram

ati

cal d

e u

n len

gu

aje

Page 24: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Notación 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 SINTAXISNota

ción g

ram

ati

cal d

e u

n len

gu

aje

Page 25: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

BNF (Forma de Backus-Naurs)

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>

Nota

ción g

ram

ati

cal d

e u

n len

gu

aje

Page 26: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

BNFE (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.

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:

Nota

ción g

ram

ati

cal d

e u

n len

gu

aje

Page 27: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

ESQUEMA DE SINTAXISSe construye un sub-esquema para cada símbolo

no terminal.

Expresión

Termino Termino+

-

Termino

Factor Factor*

div

FactorTermino( )

Variable

Constante

Nota

ción g

ram

ati

cal d

e u

n len

gu

aje

Page 28: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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 Conway

Page 29: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Entero

Digito

Identificador

Letra

Letra

Digito

Diagrama de Conway

Page 30: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Parametros

Lista_id

Lista_id

Identificador

)(

,

Diagrama de Conway

Page 31: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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

Page 32: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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

Page 33: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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

Page 34: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

• ENSAMBLADOR

Traducen programas escritos en lenguaje ensamblador a código máquina

•COMPILADOR

Traducen 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ón

Page 35: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Sistema de 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

Page 36: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

• Análisis (Etapa Inicial):Divide al Programa Fuente 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 Programa Objeto deseado a

partir de la representación Intermedia (requiere técnicas más especializadas)

PARTES DE LA COMPILACIÓN

Page 37: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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

Page 38: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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

Page 39: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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

Page 40: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

ESTRUCTURA FUNCIONAL DE UN COMPILADOR

(de una pasada) SENTENCIA

Fuente Explorador Reconocedor Generador Objeto

de código

Tabla de

símbolos

Page 41: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

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

Page 42: Teoría de lenguajes y compiladores Unidad I Analizadores lexicográficos Introducción Semana 1.

Teoría de lenguajes y compiladores

Unidad I

Analizadores lexicográficos

Introducción

Semana 1