Está en la página 1de 7

Compiladores.

Guía 5 1

Facultad: Ingeniería
Escuela: Computación
Asignatura: Compiladores
Tema: Análisis Léxico

Contenido
En esta guía se dará a conocer la manera en que un
compilador realiza el análisis léxico de un programa fuente.

Objetivos Específicos
Simular un compilador, tomando en cuenta únicamente el
analizador léxico
Interpretar la forma en que un compilador realiza el análisis
léxico de un programa

Material y Equipo

Guía No 2
Computadora con DevC++

Introducción Teórica

Léxico
Guía 3
El léxico de un lenguaje de programación u otro lenguaje usado en
la informática
Guía 4 está constituido por todas las palabras y símbolos
que lo componen. En los lenguajes de programación el léxico lo
constituyen todos los elementos individuales del lenguaje,
denominados
fía frecuentemente “tokens”. Así son tokens: las palabras
reservadas del lenguaje, los símbolos que denotan los distintos
tipos de operadores, identificadores (de variables, de funciones,
de procedimientos, de tipos, etc), separadores de sentencias, y
otros símbolos empleados en las distintas construcciones del
lenguaje.

Análisis Léxico

Un programa fuente es una serie de símbolos que representan las


construcciones del lenguaje tales como variables, etiquetas,
palabras reservadas, constantes, operadores, entre otros. El
programa fuente se trata inicialmente con el analizador léxico,
el cual tiene el propósito de agrupar el texto en los diferentes
tipos de patrones que conforman las unidades léxicas como
2Compiladores. Guía 5
identificadores (de variables, de funciones, de procedimientos,
de tipos, de clases), palabras reservadas y operadores. Por
razones de eficiencia, a cada token se le asocia un atributo (o
más de uno) que se representa internamente por un código numérico
o por un tipo enumerado. Por ejemplo a un identificador se le
puede dar una representación interna de 1, a una contante de 2, a
un operador aritmético un 2,…, cada palabra reservada tiene su
propio código. Así, para la siguiente sentencia de Pascal:

IF cuenta = sueldo THEN jefe := justo;

El analizador léxico la separa en la siguiente secuencia de


tokens:

IF cuenta = sueldo THEN jefe := justo ;

Y les asigna su atributo, habitualmente por medio de un código


numérico cuyo significado se ha definido previamente.

Token Atributo Observaciones


IF 20 Palabra reservada
cuenta 1 Identificador
= 15 Operador de comparación
sueldo 1 Identificador
THEN 21 Palabra reservada
jefe 1 Identificador
:= 10 Asignación
Justo 1 Identificador
; 27 Separador de sentencias

El análisis léxico es un análisis a nivel de caracteres, su


misión es reconocer los componentes léxicos o tokens, enviando al
analizador sintáctico los tokens y sus atributos. También se
encarga de eliminar los comentarios. El analizador léxico también
recibe el nombre de explorador (en ingles scanner)

Procedimiento

Con el objeto de clarificar algunos de los conceptos sobre diseño


Guía
de 3
compiladores, se desea construir un mini compilador de un
lenguaje muy simple (aunque de alto nivel), que se ha denominado
MUSIM
Guía 4que significa MUy_SIMple. El lenguaje objeto será un
lenguaje de bajo nivel denominado ENSAMPOCO que significa
ENSAMbla POCO. En la guía 1 se trabajo con sus primeras versiones
MUSIM/0
fía y ENSAMPOCO/0.
Compiladores. Guía 5 3

La primera parte de este ejercicio consistirá en un programa que


simula el análisis léxico de un compilador, que lee desde un
archivo de texto el programa fuente.

Definición del compilador de MUSIM/0

MUSIM/0 ENSAMPOCO/0

C++

A partir de este diagrama, conteste las siguientes preguntas:

1. ¿Cuál es el lenguaje fuente? _____________________________


2. ¿Cuál es el lenguaje objeto? _____________________________
3. ¿Cuál es el lenguaje de implementación? __________________

(Puede consultar la introducción teórica de la guía 1 para


entender qué función cumplen cada uno de estos lenguajes)

Generalmente un compilador toma el programa fuente, lo interpreta


y crea un programa objeto (normalmente en lenguaje máquina). Por
ahora nos limitaremos a comprender y analizar una de las formas,
de cómo se llevaría a cabo un analizador léxico según las
características de un lenguaje.

Fichero fuente

Digite un programa en el lenguaje MUSIM/0, en un archivo de


texto, guárdelo como prueba1.txt. Puede utilizar uno de los
códigos vistos en la guía 1.

Análisis Léxico a través del Lenguaje Intermedio

El análisis léxico debe separar el fichero fuente en componentes


léxicos o tokens, y enviarlos al analizador sintáctico (en este
guía no se detallará el analizador sintáctico). Habitualmente se
envían los componentes léxicos y sus atributos. En este caso solo
se enviaran los tokens, ya que el atributo va implícito en el
token (tan sólo se tiene el tipo de dato entero).
4Compiladores. Guía 5

A continuación se muestra la definición de clase Léxico, la cual


contiene las funciones necesarias para poder implementar un
análisis léxico adecuado para el lenguaje MUSIM/0. Abra el
DevC++ y digite el siguiente código:

#include<iostream>
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string>
#define TAM_BUFFER 100
using namespace std;

class Lexico
{
char *nombreFichero;//Nombre del fichero fuente
FILE* entrada; //Fichero de entrada
int n1; //Número de línea
int traza; //Control de traza
char buffer[TAM_BUFFER]; //Buffer auxiliar de caracteres
int pBuffer; //Posición en el buffer

public:

Lexico(char *unNombreFichero, int una_traza=0);


~Lexico(void);
char siguienteToken(void);
void devuelveToken(char toke);
int lineaActual(void){return n1; };
int existeTraza(void){if(traza)return 1; else return 0;}
};

Lexico::Lexico(char *unNombreFichero, int una_traza)


{
entrada=fopen(unNombreFichero, "rt");
if((entrada==NULL))
{
cout<<"No se puede abrir el archivo"<<endl;
system("pause");
exit(-2);
}
if(una_traza) traza=1;
else traza = 0;
n1=1; //Se inicializa el contador de línea
pBuffer=0; //Se inicializa la posición del buffer
}

Lexico::~Lexico()
{
fclose(entrada);
}

char Lexico::siguienteToken(void)
{
char car;
Compiladores. Guía 5 5
while((car=((pBuffer>0) ? buffer[--pBuffer]:getc(entrada)))!=EOF)
{
if(car==' ') continue;
if(car=='\n'){++n1; continue;}
break;
}
if(traza) cout<<"ANALIZADOR LEXICO: Lee el token"<<car<<endl;
switch(car)
{
case'M': //palabra reservada
case'R': //palabra reservada
case'W': //palabra reservada
case'=': //asignación
case'(': //parentesis
case')':
case';': //separadores
case'}': //separadores
case'{':
case'.': //fin de programa
case'+': //operador
case'*':
case'-':
case'/':
case'%':
return(car);
}
if(islower(car))return(car); //variable
else if(isdigit(car)) return(car); //constante
else
{
cout<<"Error Lexico: Token Desconocido"<<endl;
system("pause");
exit(-4);
}
return(car);
}

void Lexico::devuelveToken(char token)


{
if(pBuffer>TAM_BUFFER)
{
cout<<"ERROR: Desbordamiento del buffer del analizador
lexico"<<endl;
system("pause");
exit(-5);
}
else
{
buffer[pBuffer++]=token;
if(existeTraza())
cout<<"ANALIZADOR LEXICO: Recibe en buffer el token"<<token<<endl;
system("pause");
}
}
6Compiladores. Guía 5

int main()
{
int traza;
char token;
Lexico obj("prueba1.txt",1);
if(obj.existeTraza())
cout<<"INICIO DE ANALISIS"<<endl;
while((token=obj.siguienteToken() )!='}')
cout<<token<<endl;
system("pause");
return 0;
}

Guarde el código .cpp en el mismo directorio donde guardo el


archivo prueba1.txt, luego ejecute el código.

Análisis de resultados
1. ¿Qué es lo que muestra el programa? ____________________
______________________________________________________________
______________________________________________________________
______________________________________________________________
2. Coloque en el archivo prueba.txt algún carácter no reconocido
por el lenguaje MUSIM/0. Vuelva a ejecutar la aplicación
generada en C++. ¿Qué observó en la ejecución?
______________________________________________________________
______________________________________________________________
______________________________________________________________
______________________________________________________________

Investigación complementaria
Investigar el funcionamiento e implementación de algoritmos para
la creación de árboles sintácticos.
Compiladores. Guía 5 7

Guía 5: Análisis Léxico Hoja de cotejo: 5


Docente: 1
Alumno: Máquina No:
Máquina No:

Alumno: GL:
Máquina No:
Docente: GL: Fecha:
a
Docente: GL:

EVALUACION

% 1-4 5-7 8-10 Nota

CONOCIMIENTO Del 20 Conocimie Conocimiento Conocimiento


al 30% nto y explicación completo y
deficient incompleta de explicación
e de los los clara de los
fundament fundamentos fundamentos
os teóricos teóricos
teóricos

APLICACIÓN Del 40%


DEL al 60%
CONOCIMIENTO

ACTITUD
Del 15% No tiene Actitud Tiene actitud
al 30% actitud propositiva y proactiva y sus
proactiva con propuestas son
. propuestas no concretas.
aplicables al
contenido de
la guía.
TOTAL 100%

También podría gustarte

  • Clase 1 Algortimo
    Clase 1 Algortimo
    Documento3 páginas
    Clase 1 Algortimo
    familiaines
    Aún no hay calificaciones
  • PP 1
    PP 1
    Documento5 páginas
    PP 1
    familiaines
    Aún no hay calificaciones
  • Estructuras Repetitivas
    Estructuras Repetitivas
    Documento13 páginas
    Estructuras Repetitivas
    familiaines
    Aún no hay calificaciones
  • Prueba Evaluativa de La Unidad 1
    Prueba Evaluativa de La Unidad 1
    Documento18 páginas
    Prueba Evaluativa de La Unidad 1
    familiaines
    Aún no hay calificaciones
  • 1
    1
    Documento6 páginas
    1
    familiaines
    Aún no hay calificaciones
  • 444
    444
    Documento15 páginas
    444
    familiaines
    Aún no hay calificaciones
  • Casos de Uso
    Casos de Uso
    Documento6 páginas
    Casos de Uso
    familiaines
    Aún no hay calificaciones
  • Diccionariosdedatos
    Diccionariosdedatos
    Documento1 página
    Diccionariosdedatos
    familiaines
    Aún no hay calificaciones
  • Formato 2
    Formato 2
    Documento1 página
    Formato 2
    familiaines
    Aún no hay calificaciones
  • Ejercicio 3 Secretarias
    Ejercicio 3 Secretarias
    Documento2 páginas
    Ejercicio 3 Secretarias
    familiaines
    Aún no hay calificaciones
  • Modelos UMl
    Modelos UMl
    Documento80 páginas
    Modelos UMl
    familiaines
    Aún no hay calificaciones
  • Ejercicio 3
    Ejercicio 3
    Documento2 páginas
    Ejercicio 3
    familiaines
    Aún no hay calificaciones
  • Los Estilos de Mecanografiado
    Los Estilos de Mecanografiado
    Documento5 páginas
    Los Estilos de Mecanografiado
    familiaines
    Aún no hay calificaciones
  • Ejerciciosaludocupacion N1
    Ejerciciosaludocupacion N1
    Documento8 páginas
    Ejerciciosaludocupacion N1
    familiaines
    Aún no hay calificaciones
  • Ejerciciocolas
    Ejerciciocolas
    Documento1 página
    Ejerciciocolas
    familiaines
    Aún no hay calificaciones
  • Libro 1
    Libro 1
    Documento1 página
    Libro 1
    familiaines
    Aún no hay calificaciones
  • SIMULACIÓNdefinicion
    SIMULACIÓNdefinicion
    Documento2 páginas
    SIMULACIÓNdefinicion
    familiaines
    Aún no hay calificaciones
  • Listas 01-2010
    Listas 01-2010
    Documento84 páginas
    Listas 01-2010
    familiaines
    Aún no hay calificaciones
  • Gestiondocumental 2-2
    Gestiondocumental 2-2
    Documento53 páginas
    Gestiondocumental 2-2
    familiaines
    Aún no hay calificaciones
  • Ejercicios Tema 2
    Ejercicios Tema 2
    Documento2 páginas
    Ejercicios Tema 2
    familiaines
    Aún no hay calificaciones
  • Crearencuestas
    Crearencuestas
    Documento14 páginas
    Crearencuestas
    familiaines
    Aún no hay calificaciones
  • Ejemplomaematico
    Ejemplomaematico
    Documento6 páginas
    Ejemplomaematico
    familiaines
    Aún no hay calificaciones
  • Induccion
    Induccion
    Documento3 páginas
    Induccion
    familiaines
    Aún no hay calificaciones
  • Biotecnologia Aplicada A La Medicina
    Biotecnologia Aplicada A La Medicina
    Documento38 páginas
    Biotecnologia Aplicada A La Medicina
    familiaines
    Aún no hay calificaciones