You are on page 1of 5

ste analizador Lxico est programado en Java y reconoce: identificadores (variable),

palabras reservadas, nmeros, operadores, separadores, letra y dgito , y se crea con la


intencin de en un futuro poder desarrollar un compilador, la verdad no estoy del todo
seguro que el programa este bien o sea lo que pidi el profesor pero bueno el intento ac
est

si

quiera

que

sirva

de

mal

ejemplo.

El cdigo ya va comentado y slo hace falta agregar sus operadores, separadores, palabras
reservadas, y su archivo de entrada debera llamarse:entrada_prueba_3.txt (sin las
comillas dobles) o cambiar en la lnea 118 el nombre establecido por el nombre de su archivo
de

entrada.

Cualquier duda, aclaracin, consejo es bien recibido, saludos cordiales y espero les sirva de
algo.

/**
@author: Luigi Prez Calzada
@nick: GianBros
@date: 2011-08-11 at 3:39a.m.
Programa de analizador lxico que evlua si existe un numero, un
separado
un operador, una palabra, una palabra reservada
*/
import java.io.*;
import java.util.*;
class dosPrueba1{
public dosPrueba1(String f){
String bufferIn;
try{
DataInputStream in=new DataInputStream(new
FileInputStream(f));//leemos nuestro archivo de entrada
try{
while((bufferIn=in.readLine())!=null){//mientras no
lleguemos al fin del archivo...
int i=0;
String cad=bufferIn.trim();
//eliminamos los espacios en blanco al incio o al
final (pero no a la mitad)
while(i<cad.length()){//recorremos la lnea
char t=cad.charAt(i);//vamos leyendo caracter
por caracter

if(Character.isDigit(t)){//comprobamos si es
un digito
String ora="";
ora+=t;
int j=i+1;
while(Character.isDigit(cad.charAt(j))){
//mientras el siguiente elemento sea un
numero
ora+=cad.charAt(j);//concatenamos
j++;
if(j==cad.length())break;//rompemos si
llegamos al final de la lnea
}
i=j;//movemos a nuestra variable i en la
cadena
System.out.println("Nmero-->"+ora);
continue;//pasamos al siguiente elemento
}//end if si es Digito
else if(Character.isLetter(t)){//comprobamos
si es una letra
String ora="";
ora+=t;
int j=i+1;
while(Character.isLetterOrDigit(cad.charAt(j))){
//mientras el siguiente elemento sea una
letra o un digito
//ya que las variables pueden ser con
numeros
ora+=cad.charAt(j);
j++;
if(j==cad.length())break;
}
i=j;
if(palabraReservada(ora)){//comprobamos si
es una palabra reservada
System.out.println("Palabra
reservada="+ora);

}
else{//caso contrario es un identificador
o variable
System.out.println("Identificador->"+ora);
}
continue;
}//end if si es variable
else if(!Character.isLetterOrDigit(t)){
//si no es letra ni digito entonces...
if(evaluarCaracter(t)){//es separador?
System.out.println("Separador->"+evaluarSeparador(t));
}else{//o es un operador?
System.out.println("Operador->"+evaluarOperador(t));
}
i++;
continue;
}//end if si es diferente de letra y digito
}
}//end while
}catch(IOException e){}
}catch(FileNotFoundException e){}
}

/**
Metodo que evalua nuestro caracter si existe y nos retorna
verdadero para los separadores
y
falso para los operadores
*/
public static boolean evaluarCaracter(char c){
if(c=='(') return true;
else if(c==')')return true;
else if(c=='<')return false;

else if(c=='>')return false;


else return false;
}

/**
retornamos nuestro caracter de operador
*/
public static char evaluarOperador(char c){
char car=' ';
if(c=='<')car='<';
else if(c=='>')car='>';
return car;
}

/**
retornamos nuestro caracter de separador
*/
public static char evaluarSeparador(char c){
char car=' ';
if(c=='(') car='(';
else if(c==')')car=')';
return car;
}

/**
buscamos si existe la palabra reservada
*/
public static boolean palabraReservada(String cad){
if(cad.equalsIgnoreCase("if")) return true;
else if(cad.equalsIgnoreCase("luigi"))return true;
else if(cad.equalsIgnoreCase("puraslineas"))return true;
//con equalsIgnoreCase no nos importa si esta en mayusculas o
minusculas o alternadas
else return false;
}

public static void main(String ar[]){


new dosPrueba1("entrada_prueba_3.txt");
//este ser nuestro archivo de entrada
}
}

You might also like