Sunteți pe pagina 1din 26

Programas de Sistemas

relacionados con un
compilador
Inga. Viviana Mrida
Compiladores

gramas de Sistemas relacionados con un Compilador

Como se vio en la figura la entrada para un compilador puede producirse por Uno o varios
preprocesadores y puede necesitarse otro procesamiento de la salida Que produce el
compilador ante de obtener un cdigo de maquina ejecutable.
Preprocesadores:
Los preprocesadores producen la entrada para un compilador, y pueden realizar las
Funciones siguientes:
1. Procesamiento de macros: un preprocesador puede permitir a un usuario definir macros,
que son abreviaturas de construcciones mas grandes.
2. Inclusin de archivos: un preprocesador puede insertar archivos de encabezamiento en el
texto del programa. Por ejemplo, el preprocesador de C hace que
el contenido del archivo
<global.h> reemplace a la proposicin #include
<global.h> cuando procesa un archivo que contenga a esa proposicin.
3. Preprocesadores racionales, estos preprocesadores enriquecen los lenguajes antiguos con
recursos mas modernos de flujo de control y de estructuras de datos. Por ejemplo, un
preprocesador de este tipo podra proporcionar al usuario
macros incorporados para construcciones, como proposiciones hile o if en lenguaje de
programacin que no las tenga.

4. Extensiones a lenguajes. Estos procesadores tratan de crear posibilidades


al lenguaje que equivalen a macros incorporadas.
Por ejemplo el lenguaje. Equel es un lenguaje de consulta de base de datos
integrando en C. el preprocesador considera las proposiciones que empiezan con
## como proposiciones de acceso a la base de datos, sin relacin con C, y se
traducen a las llamadas de procedimiento a rutinas que realizan el acceso al base
de datos.
Los procesadores de macros tratan dos clases de proposiciones: definicin de
macros y uso de macros. Las definiciones normalmente se indican con algn
carcter exclusivo o palabra clave, como define o macro. Constan de un nombre
para la macro que se esta definiendo y de un cuerpo,, que constituye su definicin
esto es, smbolos que se remplazaran por valores( esto es una cadena de
caracteres). El uso de macro consiste en dar nombre a la macro y proporcionar
parmetros reales, es decir valores para sus parmetros formales. El procesador
de macros sustituye los parmetro reales por los parmetros formales. Del cuerpo
de la macro; despus el cuerpo transformado reemplaza el uso de la propia macro.

El agrupamiento de las fases

Las actividades de compilacin se agrupan


normalmente en dos o mas fases.
Etapa inicial: Recoge aquellas que
dependen principalmente del lenguaje
fuente.
anlisis lxico y sintctico, creacin de tabla
de smbolos, anlisis semntico y la
generacin de cdigo intermedio, con su
respectivo manejo de errores.
Etapa final: Incluye las partes que
dependen de la mquina objeto y del
lenguaje intermedio.
Fase de optimacin de cdigo, la
generacin de cdigo, el manejo de errores
y las operaciones que involucran la tabla de
smbolos.

Pasadas: Se acostumbra aplicar varias fases


de un compilador en una sola pasada.
Una pasada es la lectura de un archivo de
entrada y en la escritura de un archivo de
salida.
Es mejor agrupar los proceso de compilacin
por pasadas y no por fases.
El anlisis lxico, el anlisis sintctico, el
anlisis semntico y la generacin de cdigo
intermedio pueden agruparse en una pasada
Reduccin del nmero de pasadas: Es
recomendable tener pocas pasadas.
La lectura y escritura de archivos toma tiempo
e implica la carga de todo el programa en
memoria.

FASES DE UN COMPILADOR

La fase de anlisis tiene como entrada, el PF. En base a este programa fuente, la
fase de anlisis construye una representacin intermedia.
de quin?...

Del PF, precisamente. En la fase de sntesis se toma de entrada a esta


representacin intermedia, para la generacin del cdigo que constituye al PO.

FASES DEL ANALISIS

El anlisis que toma al PF como entrada,


consiste a su vez de tres fases:

Herramientas para la construccin

Existen herramientas ya definidas que se pueden usar para el desarrollo de un compilador.


Las mejores herramientas son las que ocultan los detalles del algoritmo de generacin y
producen componentes que se pueden integrar fcilmente al resto del compilador.
Generadores de analizadores sintcticos: Producen analizadores sintcticos a partir de
una entrada fundamental en una gramtica independiente del contexto.
Generadores de analizadores lxicos: Generan automticamente analizadores lxicos a
partir de una especificacin basada en expresiones regulares. La organizacin del
analizador lxico es en esencia un autmata finito.
Dispositivos de traduccin dirigida por la sintaxis: Producen grupos de rutinas que recorren
el rbol de anlisis sintctico, generando cdigo intermedio.
Generadores automticos de cdigo: Toman un conjunto de reglas que definen la
traduccin de cada operacin del lenguaje intermedio al lenguaje de mquina objeto.
Dispositivos para anlisis de flujo de datos: Consiste en la recoleccin de informacin
sobre la forma en que se transmiten valores de una parte del programa a cada una de las
otras partes.

Sintaxis
Definicin y generalidades
La sintaxis de un lenguaje de programacin es una definicin
de lo que constituye un programa gramaticalmente vlido en
dicho lenguaje.
La sintaxis queda especificada por un conjunto de reglas.
Una definicin de la sintaxis clara, concisa y formal es
especialmente importante en los lenguajes de programacin.

Sintaxis
Procesamiento de lenguajes y mtodos formales

Un Metalenguaje es un lenguaje usado para definir otros lenguajes.


Backus-Naur Form o BNF es uno de ellos.
BNF desarrollado por Noam Chomsky, es altamente usada en la definicin de

lenguajes de programacin.
Es til para describir de forma precisa las cadenas que son programas
legtimos y aislar todas las dems (las que tienen errores sintcticos de varios
tipos)
Las expresiones regulares tambin es un Metalenguaje

Sintaxis
BNF y el anlisis lxico
una sintaxis BNF sencilla es mostrada en la figura.

ANALISIS LEXICO
El papel del analizador lxico
Es la primera fase del programa traductor
Es el nico que gestiona el fichero de entrada
Es el que lee los caracteres del programa fuente y construye
smbolos intermedios, los cuales sern la entrada del analizador
sintctico
Por qu separar el anlisis lxico del sintctico?
El diseo de las partes posteriores dedicadas al anlisis queda
simplificada
Con fases separadas se pueden aplicar tcnicas especficas y
diferenciadas para cada fase
Se facilita la portabilidad
Los componentes lxicos se especifican mediante expresiones
regulares que generan lenguajes regulares ms fciles de
reconocer que los LLC

ANALISIS LEXICO

Lee los caracteres del programa fuente de izquierda a derecha, y


los agrupa en tokens.

ANALISIS LEXICO

TAREA PRINCIPAL
El PF es la entrada al analizador lexico y generalmente es un archivo de texto (los
interpretes reciben una o varias cadenas como entrada, desde el teclado).
Este monitoreo de la entrada (PF) lo efectua el analizador lexico con el fin de
identificar tokens, los cuales son cadenas o secuencias de caracteres que tienen
un cierto significado.

La salida de un analizador lexico es un conjunto


de tokens

En la compilacin el anlisis consta de tres


fases
Anlisis lxico: Tambin llamado Anlisis
lineal. En este se lee la cadena de
caracteres que constituye el programa de
izquierda a derecha, y se agrupa en
componentes lxicos, que son secuencias
de caracteres con significado colectivo.
En esta etapa el compilador revisa que los
tokens contengan los smbolos adecuados
del lenguaje.
Requiere por parte del diseador del
lenguaje, una adecuada clasificacin de
componentes lxicos (tokens).
Dentro de las categoras lxicas se tienen:
identificadores, nmeros, separadores,
operadores, comentarios, espacios en
blanco.

Para la expresin de pascal vf := vi + v * 60


se agruparan los componentes lxicos as:
el identificador vf
el smbolo de asignacin :=
el identificador vi
el signo de suma +
el identificador v
el signo de multiplicacin *
el nmero 60
Los espacios en blanco se eliminan
durante el anlisis lxico.

Tokens y lexemas
Token:
Elemento bsico del lenguaje
Unida lxica indivisible
Identifica una entidad lgica dentro del lenguaje
Incluyen: palabras Reservadas, constantes, Operadores, Signos de
puntuacin e identificadores.
Lexema:
la cadena original que se identifica como token
No hay correspondencia 1 1 entre token lexema.

Es cada secuencia de caracteres concreta que encaja con un patron.


P.ej: 8", 23" y 50" son algunos lexemas que encajan con el patrn (0'|1'|2'| ... |9') . El
nmero de lexemas que puede encajar con un patrn puede ser finito o infinito, p.ej. en el
patrn WHILE slo encaja el lexema WHILE.

Ejemplos de Tokens y Lexemas:

Otro EJEMPLO:
TOKEN, PATRON LEXEMA

Sintaxis
El Anlisis Lxico y el proceso de compilacin
Todos los programas deben ser
analizados para comprobar su
correccin sintctica antes de
ser interpretados o traducidos a
cdigo mquina.
Al nivel ms elemental, el
proceso de anlisis lxico
separa los caracteres
individuales del programa en
una cadena de tokens que se
analiza sintcticamente, de uno
en uno, hasta un nivel de
anlisis superior.
Las etapas de anlisis semntico y de optimizacin analizan la consistencia
semntica (comprobando, por ejemplo, la utilizacin consistente de operadores y
tipos de datos) y transforman el texto de forma que pueda utilizar de forma
eficiente la arquitectura en la que se ejecutar el programa.
Para terminar, la etapa de generacin de cdigo utiliza la representacin abstracta
resultante como base para la generacin de cdigo mquina ejecutable.

Sintaxis
Las expresiones regulares y el anlisis lxico
Las Expresiones regulares son una herramienta
muy utilizada en el diseo de lenguajes para
especificar formalmente cada clase de token.
Estas permiten conceptos como una o ms
apariciones de un dgito. Es ms, se puede crear
de forma similar una expresin regular para definir
el significado de un ldentificador:
[a-zA-Z] [a-zA-Z0-9]*
lo que significa una letra seguida por una o ms
apariciones de una letra o un dgito.
Las expresiones regulares se han convertido en
una herramienta muy popular del diseo de
lenguajes, porque admiten la generacin
automtica de analizadores lxicos sin problemas.
Dos generadores bastante utilizados son el Lex
(que genera cdigo de C) y el JLex (que genera
cdigo de Java).

Anlisis Lxico
Errores Lxicos
El analizador lxico tpicamente detecta los siguientes errores:
El utilizar caracteres que no pertenecen al alfabeto del
lenguaje
Encontrar una cadena que no coincide con ninguno de los
patrones de los tokens posibles
Posibles acciones que el analizador lxico puede llevar a cabo
para recuperarse de los errores
Ignorar los caracteres no vlidos hasta formar un token segn
los patrones dados
Borrar los caracteres extraos
Insertar un caracter que pudiera faltar
Reemplazar un caracter presuntamente incorrecto por uno
correcto
Conmutar las posiciones de dos caracteres adyacentes

Anlisis Lxico
Funcionamiento del analizador lxico
Su principal funcin es procesar la cadena de caracteres y devolver pares (token,
lexema). Generalmente debe funcionar como una subrutina del analizador sintctico.
Programa
fuente

token

Analizad
or lxico

Analizad
or
sintctico

Tabla de
smbolos

Operaciones que realiza el analizador lxico


Procesador lxico del programa fuente e identificacin de tokens y de sus lexemas
Manejo del fichero del programa fuente
Ignorar comentarios y en los lenguajes de formato libre, ignorar los separadores

PROCESADORES

Los procesadores producen la entrada para un compilador y realizan las funciones


siguientes.
1)Procesamiento de macros. Permite a un usuario definir macros que son abreviaturas de
construcciones grandes.
2)Inclusin de archivos. Inserta archivos de encabezamiento del programa,

3)Procesadores racionales. Este enriquece los lenguajes antiguos con recursos modernos
de flujo de control. Por ejemplo While o if, en un lenguaje donde no las tengan.
4) Extensin de Lenguaje. Trata de crear posibilidades de lenguaje que equivalen a
macros integradas.

ENSAMBLADORES

Algunos compiladores producen cdigo ensamblador, es decir un cdigo que se puede


ensamblar para su procesamiento.
Un cdigo ensamblador usa nombres en lugar de cdigos binarios para operaciones.

ENSAMBLADO DE DOS PASADAS


Un ensamblador hace dos pasadas sobre la entrada, en la primera pasada
lee una vez un archivo de entrada.
En la segunda pasada el ensamblador examina el archivo y luego la
traduce a bits, el resultado de la segunda pasada es un lenguaje de
mquina.

CARGADORES Y EDITORES DE ENLACE

Un programa llamado cargador realiza dos funciones de carga y edicin de enlaces. El


proceso de carga consiste en tomar el cdigo de mquina y relocalizables, modificar las
direcciones y ubicar las instrucciones y los datos modificados en las proposiciones ubicadas
en la memoria

MUCHAS GRACIAS
POR SU ATENCIN!

S-ar putea să vă placă și