Está en la página 1de 3

package dosprueba1; /** @author: Irbin @nick: veneed @date: 2012-04-21 at 1:01p.m.

Programa de analizador lxico que evalua 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 inicio o al final (pe ro 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 dgito 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 Dgito 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 nmeros 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 dgito 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 dgito } }//end while }catch(IOException e){} }catch(FileNotFoundException e){} } /** Mtodo 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 true; else if(c==']') return true; else if(c=='.') return true; else if(c==':') return true; else if(c==',') return true; else if(c=='"') return true; else if(c=='@') return true; //comentarios else if(c=='<') return false; else if(c=='>') return false; else if(c=='#') return false; // y logico else if(c=='') return false; // o logico else if(c=='~') return false; // no logico else if(c=='$') return false; // asignacion else if(c=='+') return false; else if(c=='-') return false; else if(c=='*') return false; else if(c=='/') return false; else if(c=='%') return false; // mod else return false; } /** retornamos nuestro caracter de operador */ public static char evaluarOperador(char c){ char car=' '; if(c=='<')car='<'; else if(c=='>')car='>'; else if(c=='#')car='#';

else if(c=='')car=''; else if(c=='~')car='~'; else if(c=='$')car='$'; else if(c=='+')car='+'; else if(c=='-')car='-'; else if(c=='*')car='*'; else 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=')'; else if(c=='[')car='['; else if(c==']')car=']'; else if(c=='"')car='"'; else if(c=='.')car='.'; else if(c==':')car=':'; else if(c==',')car=','; else if(c=='@')car='@'; return car; } /** buscamos si existe la palabra reservada */ public static boolean palabraReservada(String cad){ if(cad.equalsIgnoreCase("FUNCION")) return true; else if(cad.equalsIgnoreCase("SI"))return true; else if(cad.equalsIgnoreCase("ENTONCES"))return true; else if(cad.equalsIgnoreCase("SINO"))return true; else if(cad.equalsIgnoreCase("REPETIR"))return true; else if(cad.equalsIgnoreCase("LEER")) return true; else if(cad.equalsIgnoreCase("ESCRIBIR")) return true; //con equalsIgnoreCase no nos importa si est en maysculas o minsculas o alt ernadas else return false; } public static void main(String ar[]){ new dosPrueba1("entrada_prueba_3.txt"); //este ser nuestro archivo de entrada } }

También podría gustarte