compilador lexico

10

Upload: evelyn-sanchez

Post on 12-Mar-2016

218 views

Category:

Documents


3 download

DESCRIPTION

QUE ES UN COMPILADOR LEXICO

TRANSCRIPT

Page 1: COMPILADOR LEXICO
Page 2: COMPILADOR LEXICO

Un compilador es un programa que permite traducir un lenguaje

fuente o lenguaje de programación a un lenguaje objeto o código

ensamblador, el cual es un lenguaje que puede entender la

maquina; mediante el proceso de traducción es importante

mencionar que se realiza detección de errores en el programa

fuente. Los compiladores se utilizan tanto para lenguajes de

programación tradicionales, como Fortran, C o Ada, o para

aplicaciones especializadas como por ejemplo lenguajes de

descripción de hardware, lenguajes de programación de robots,

entre otros.

¿Qué ES UN COMPILADOR LÉXICO?

Page 3: COMPILADOR LEXICO
Page 4: COMPILADOR LEXICO

Análisis: Se realiza una división del programa en sus

componentes y se crea una representación intermedia del

programa fuente. Durante esta fase la estructura del programa se

guarda en una estructura de datos especial que se denomina

árbol sintáctico.

Análisis léxico: separación de cada elemento componente del

programa

Análisis sintáctico: agrupa los componentes léxicos en frases

gramaticales

Análisis semántico: Se revisa el programa fuente para

comprobar que las reglas semánticas del lenguaje (aquellas

relativas al significado de las distintas instrucciones) se cumplen.

Un ejemplo de regla semántica es la comprobación de tipos en

las expresiones.

Síntesis: Construye el programa destino deseado a partir de una

descripción en un lenguaje de representación intermedia.

Page 5: COMPILADOR LEXICO
Page 6: COMPILADOR LEXICO

Las tres primeras fases que realiza un compilador son:

análisis léxico, sintáctico y semántico las cuales

corresponden al analisis, pero dentro de la segunda fase

de la compilación es decir durante la sintesis existen las

siguientes fases: generación de código intermedio,

optimador de código, y generador de código y existen

otras dos fases la administración de la tabla de simbolos y

el manejo de errores las cuales hacen interacción con las

seis fases.

La tabla de símbolos: es una estructura de datos que

almacena los identificadores utilizados en el programa

fuente así como los atributos de cada identificador.

El manejador de errores: es un módulo que gestiona las

acciones a realizar por cada uno de los errores

encontrados en las diferentes fases de la compilación.

Page 7: COMPILADOR LEXICO

Cuando el analizador léxico detecta un

indentificador en el programa fuente, el

identificador se introduce en la tabla de

símbolos.

Las fases de análisis sintáctico y semántico

por lo general manejan una gran proporción

de los

errores detectables por el compilador. La

fase léxica puede detectar errores donde los

caracteres

restantes de la entrada no forman ningún

componente léxico del lenguaje.

Page 8: COMPILADOR LEXICO

EJEMPLO:

Las fases de análisis

Conforme avanza la traducción, la representación

interna del programa fuente que tiene el

compilador se modifica. Para ilustrar esas

representaciones, considérese la traducción de la

proposición

Posición := inicial + velocidad * 60 (1)

La figura 4 muestra la representación de esa

proposición después de cada frase.

Posición := inicial + velocidad * 60

Id1 := id2 + id3 * 60

Page 9: COMPILADOR LEXICO

Tabla de símbolos

1

2

3

4 : =

id1 +

id2 *

id3 entareal

60

temp1 := entareal(60)

temp2 := id3 * temp1

temp3 := id2 + temp2

id1 := temp3

temp1 := id3 * 60.0

id1 := id2 + temp1

MOVF id3, R2

MULF #60.0, R2

MOVF id2, R1

ADDF R2, R1

MOVF R1, id1

Page 10: COMPILADOR LEXICO

Optimación de Código

La fase de optimación de código trata de mejorar el código

intermedio de modo que resulte un

código de máquina más rápido de ejecutar.

En la compilación hay dos partes: Análisis y Síntesis. La parte

del análisis divide al programa

fuente en sus elementos componentes y crea una

representación intermedia. De las dos partes,

la síntesis es la que requiere la técnica más especializada.

En esta parte el código intermedio optimizado es traducido a

una secuencia de instrucciones en

ensamblador o en el código de máquina del procesador que

nos interese. Por ejemplo, la

sentencia

A:=B+C se convertirá en:

LOAD B

ADD C

STORE A