Вы находитесь на странице: 1из 67

COMPILADORES.

15/03/2015

ISUTIC-INFORMATICA

PROFESOR

ASNAY GUIROLA GONZALES


MASTER EN INFORMATICA APLICADA
PROFESOR ASISTENTE
PROGRAMACION
INTELIGENCIA ARTIFICIAL
BASE DE DATOS

CONTENIDOS

Objetivo General : Familiarizar os estudantes


com os processos,tcnicas e ferramentas que
intervm no funcionamento e no projecto de
compiladores para utilizao em computadores
digitais modernos

1. Caracterizar las fases del proceso


de compilacin a partir de disear
e implementar un intrprete para
un lenguaje de poca complejidad
de forma manual y usando un
generador automtico.

INTRODUCCIN A LA SIGNATURA P3

Objetivos Generales.

Bibliografa bsica

[1] T. Parr, Language Implementation


Patterns: Create Your Own Domain-Specific
and General programming Languages, The
Pragmatic Bookshelf, 2009.

Bibliografa bsica

[3] R. Brena, Autmatas y lenguajes. Un enfoque


de diseo., Universidad Tcnica de Monterrey,
Mxico, 2003.

[4] A. Aho, M. Lam, R. Sethi, and J. Ullman,


Compilers - Principles Techniques and Tools,
Addison Wesley, second ed., (2007).

INTRODUCCIN A LAS TCNICAS DE


COMPILACIN

Conceitos Bsicos de Compilao.


Compiladores Versus Interpretadores. A
Estrutura de um Compilador
15/03/2015

INTRODUCCIN

Lenguaje de programacin
10100
1101

Lenguaje de mquina
10100
1101
if(c > 0)
c++;
while(i>0)

Comunicacin
Hola

INTRODUCCIN

Lenguaje natural

Compilacin

01101011
11001111

INTRODUCCIN

class Process{
string name;
void Begin(){

Conjunto de smbolos y reglas que permiten la comunicacin,


es decir, trasmitir una idea, un mensaje.

Lxico
Conjunto de palabras que forman parte de un lenguaje
especfico.

Gramtica
Conjunto de reglas y principios que gobiernan el uso de un
lenguaje determinado; as, cada lenguaje tiene su propia
gramtica.

INTRODUCCIN

Lenguaje

Define las formas en que se combinan las palabras para la


formacion de frases.
Semntica
Significado, sentido o interpretacin de un determinado
elemento, smbolo, palabra, lenguaje o representacin
formal.

Lenguaje de programacin
Conjunto de smbolos y reglas sintcticas y semnticas que
permiten la comunicacin con un ordenador.

INTRODUCCIN

Sintaxis

Conjunto de intrucciones y datos, expresados en


formato binario, que son ejecutados por el CPU
de un ordenador.
Lenguaje de bajo nivel

Similar al lenguaje de mquina con pequeas


modificaciones nemotcnicas que facilitan su
uso, por ejemplo el lenguaje ensamblador.
Lenguaje de mquina

Lenguaje ensamblador

10110000 01100001

MOV AL, #61h

INTRODUCCIN

Lenguaje de mquina

Lenguaje que permite la comunicacin con un computador


mediante smbolos convencionales cercanos a un lenguaje
natural.

Ejemplos
Pascal
Java
C++
C#
Ruby
Python

INTRODUCCIN

Lenguaje de alto nivel

Caracterizar los conceptos de traductor,


compilador e intrprete.

Caracterizar la estructura de un compilador,


as como cada una de las fases del proceso de
compilacin.

INTRODUCCIN

Objetivos

2. Compiladores y Traductores.
3. Estructura de un compilador.
4. Conclusiones.
5. Bibliografa.

SUMARIO

1. Introduccin.

COMPILADORES Y TRADUCTORES

Un traductor es un programa que toma como


entrada un programa escrito en un lenguaje de
programacin (lenguaje fuente) y produce como
salida un programa en otro lenguaje (lenguaje
objeto).

Cdigo
fuente

Traductor

Cdigo
objeto

COMPILADORES Y TRADUCTORES

Traductor

Un compilador es un programa que permite


traducir el cdigo fuente (lenguaje de alto nivel)
a
otro
lenguaje
de
nivel
inferior
(tpicamente lenguaje mquina).

Compilador

Compilacin
Cdigo
fuente

Lenguaje
de
mquina

Ejecucin

COMPILADORES Y TRADUCTORES

Compilador

Un intrprete es un programa que toma el


cdigo fuente, lo analiza y lo ejecuta
directamente.

Ejecucin
Cdigo
fuente

Intrprete

COMPILADORES Y TRADUCTORES

Intrprete

Compilador Hbrido
Cdigo
fuente

Traductor

Bytescode

Compilador
(Mquina
Virtual de
JAVA)

salida

ESTRUCTURA DE UN COMPILADOR

Generacin de
Cdigo Intermedio

Tokens
Anlisis
Sintctico

Optimizacin de
Cdigo Intermedio

Cdigo Intermedio Optimizado


Generacin de
Cdigo Objeto

rbol Sintctico
Anlisis
Semntico

Cdigo
Objeto

GESTIN DE ERRORES

Anlisis
Lxico

TABLA DE SMBOLOS

Cdigo Intermedio

ESTRUCTURA DE UN COMPILADOR

Cdigo
fuente

Recibe como entrada una secuencia de smbolos


o caracteres.
Devuelve como salida una secuencia de
entidades sintcticas simples denominadas
tokens o lexemas.

Token
Cdigo
fuente

Scanner

Parser
NextToken
TABLA DE SMBOLOS

COMPILADORES Y TRADUCTORES

Analizador Lxico (Scanner)

Las categoras de tokens pueden variar de


un lenguaje a otro, pero en general se
distinguen las siguientes:
palabras reservadas
identificadores
constantes numricas y literales
operadores
demilitadores

<tipo del token, info>


Tipo del token: Representa una categora
sintctica.
Info: Proporciona informacin relacionada con
el token.

Token

Lexema

id
num

total
60

COMPILADORES Y TRADUCTORES

Estructura de un Token

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

1 ;

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

1 ;

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

1 ;

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

1 ;

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

1 ;

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

1 ;

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

id

1 ;

< id, 3 >

COMPILADORES Y TRADUCTORES

VALOR1

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

id

1 ;

< id, 3 >

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

id

1 ;

< id, 3 >


< op_as, = >

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

id

1 ;

< id, 3 >


< op_as, = >

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

id

1 ;

< id, 3 >


< op_as, = >

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

id

1 ;

< id, 3 >


< op_as, = >

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

id

1 ;

< id, 3 >


< op_as, = >

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

id

1 ;

< id, 3 >


< op_as, = >

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
2

3
4

id

1 ;

< id, 3 >


< op_as, = >

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
id
2

3
4

id

1 ;

< id, 3 >


< op_as, = >
< id, 1 >

COMPILADORES Y TRADUCTORES

VALOR2

V A L O R 1

V A L O R 2

Tabla de smbolos
1
id
2

3
4

id

1 ;

< id, 3 >


< op_as, = >
< id, 1 >

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
id
2

3
4

id

1 ;

< id, 3 >


< op_as, = >
< id, 1 >
< op_ar, +>

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
id
2

3
4

id
const

1 ;

< id, 3 >


< op_as, = >
< id, 1 >
< op_ar, + >
< const, 4 >

COMPILADORES Y TRADUCTORES

V A L O R 1

V A L O R 2

Tabla de smbolos
1
id
2

3
4

id
const

1 ;

< id, 3 >


< op_as, = >
< id, 1 >
< op_ar, + >
< const, 4 >
< delim, ;>

COMPILADORES Y TRADUCTORES

Es una estructura de datos que posee una


entrada para cada identificador o constante
definido o utilizado en el programa fuente y sus
atributos.
float valor2, valor1;
//
valor1 = valor2 + 1;
Tabla de smbolos

1
2
3
4

valor2

id

float

valor1

id

float

const

int

COMPILADORES Y TRADUCTORES

Tabla de smbolos

Anlisis lxico

Token
Cdigo
fuente

Scanner

Parser
NextToken
TABLA DE SMBOLOS

Recibe como entrada la secuencia de tokens


generada por el scanner.
Devuelve como salida si la secuencia de tokens es
o no correcta de acuerdo a la definicin sintctica
del lenguaje.
[ Agrupa los tokens en una estructura en forma de
rbol, denominada rbol sintctico. ]

COMPILADORES Y TRADUCTORES

Anlisis sintctico (Parser)

exp exp + exp


exp exp * exp
exp id
exp const
valor2 + valor3 * 1

valor2 +* valor3

Scanner

Scanner

<id, 3> <op_ar, +>


<id, 5> <op_ar, *>
<const, 10>

<id, 2> <op_ar, +>


<op_ar, *> <id, 5>

Parser
Expresin
Correcta!!!

Parser
Expresin
Incorrecta!!!

COMPILADORES Y TRADUCTORES

Reglas sintcticas

COMPILADORES Y TRADUCTORES

valor1 = valor2 + valor3 * 1

id1

id2

*
id3

Analiza la estructura jerrquica construida por el


parser, para tratar de encontrar errores
semnticos y preparar la generacin de cdigo.

valor1 = valor2 + valor3 * 1

=
id1

+
id2

*
id3

EntAReal
1

COMPILADORES Y TRADUCTORES

Anlisis semntico

El cdigo intermedio debe tener dos caractersticas


muy importantes: ser fcil de producir y fcil de
traducir al programa objeto.
Se genera a partir de la informacin obtenida
durante el anlisis semntico.
Representaciones de cdigo intermedio

MSIL
Java Bytecode
Notacin de cudruplos
Notacin polaca
Traduccin Sintctica Directa.

COMPILADORES Y TRADUCTORES

Generacin de cdigo intermedio

(4) id1 = temp3


=
(3) temp3 = id2 + temp2
id1

+
(2) temp2 = id3 * temp1
id2

id3

(1) temp1 = EntToReal(const4)


intToFloat

COMPILADORES Y TRADUCTORES

Cdigo de 3s direcciones.

La fase de optimizacin se efecta con el objetivo


de mejorar la eficiencia del cdigo intermedio.

Cdigo intermedio

Cdigo Optimizado

(1) temp1 = EntToReal(7)


(2) temp2 = id3 * temp1

temp2 = id3 * 7.0

(3) temp3 = id2 + temp2


(4) id1 = temp3

id1 = id2 + temp2

COMPILADORES Y TRADUCTORES

Optimizacin del cdigo Intermedio

La fase final de un compilador es la de generacin


del cdigo objeto, consistente en cdigo mquina o
cdigo ensamblador.
Cdigo Optimizado

Cdigo Objeto

temp2 = id3 * 7.0

MOVF id3, R2
MULF #7.0, R2
MOVF id2, R1

id1 = id2 + temp2

ADDF R2, R1
MOVF R1, id1

COMPILADORES Y TRADUCTORES

Generacin de cdigo objeto

Es el encargado de informar al usuario los errores que se


presentan en cualquiera de las componentes.

Tipos de errores
Lxicos
Sintcticos
Semnticos
Lgicos

COMPILADORES Y TRADUCTORES

Gestin e informacin de errores

lexicolgicos (Ejemplo: escribir mal un


nmero, un smbolo no permitido, etc.)
sintcticos (Ejemplo: expresin aritmtica con
parntesis no balanceados)
semnticos (Ejemplo: aplicar un operador a
un operando incompatible)
lgicos o de programacin (Ejemplo: ciclo
infinito)

CONCLUSIONES

Se estudiaron los conceptos de Interprete,


Compilador y Traductor y se mostr una clasificacin
de los Leguajes por el tipo de estrategia de ejecucin.
Se estudiaron, de forma general, cada una de las
fases del proceso de compilacin

CONCLUSIONES

Se presentaron dos clasificaciones de lenguajes de


programacin de acuerdo a su complejidad.

Orientacin del Estudio independiente:

Estudiar los epgrafes 1.1, 1.2 y 1.3 del libro


Compilers Principles, techniques, and Tools, A.
V. Aho, J. Ullman.
Leer el artculo The difference between
compilers and interpreters

BIBLIOGRAFA

Compilers Principles, techniques, and Tools, A. V. Aho, J.


Ullman. Epigrafes 1.1, 1.2 y 1.3.
The difference between compilers and interpreters,
Terence Parr.

BIBLIOGRAFA

Bibliografa

Вам также может понравиться