Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Guialexico
Guialexico
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
Procedimiento
MUSIM/0 ENSAMPOCO/0
C++
Fichero fuente
#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::~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);
}
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;
}
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
Alumno: GL:
Máquina No:
Docente: GL: Fecha:
a
Docente: GL:
EVALUACION
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%