Computers">
Analizador Lexico-Sintáctico
Analizador Lexico-Sintáctico
Analizador Lexico-Sintáctico
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string>
#include <fstream>
#define TAM_BUFFER 100
/* run this program using the console pauser or add your own getch, system("pause")
or input loop */
using namespace std;
class Lexico
{
char *nombreFichero; //NOmbre del fichero fuente
FILE* entrada; //Fichero de entrada
int n1; //Numero de linea
int traza; //control de traza
char buffer[TAM_BUFFER]; //Buffer auxiliar de caracteres
int pBuffer; // Posicion en el buffer
public:
Lexico(char *unNombreFichero, int una_traza=0);
~Lexico(void);
char siguienteToken(void);
void devuelveToken(char token);
int lineaActual(void){return n1;};
int existeTraza(void){if(traza) return 1; else return 0;};
};
Lexico::~Lexico()
{
fclose(entrada);
}
char Lexico::siguienteToken(void)
{
char car;
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':
case'W':
case'=': //asigancion
case'(': //parentesis
case')':
case';'://separadores
case'}'://separadores
case'{':
case'.'://fin de programa
case'+':
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);
}