Sunteți pe pagina 1din 5

/** @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));//lee mos 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 (per o no a la mitad) while(i<cad.length()){//recorremos la lnea char t=cad.charAt(i);//vamos leyendo caracter por caract er 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 l etra 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 pa labra 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-->"+evaluarSeparad or(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 } }

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