Вы находитесь на странице: 1из 7

Hola que tal amig@s programadores y gente con mucho tiempo libre y que de ltima hora anda buscando

un analizador lxico :s (espero si hayas llegado ac buscando eso y no por buscar Red Tube punto com), pues resulta que en la clase de Traductores del profesor Ing. Armando Daz Prez, ya comenzamos a talachearle con la programacin y pues lo primero que cruzo por nuestra mente pues inge su lo hacemos con Tokens, bueno para ser ms precisos con la funcin de StringTokenizer, pero el profesor nos aconsejo no utilizarlo ya que despus conforme vayamos avanzando se nos dificultar ms y ms, as que para no meternos en los hubo que rehacer todo y con una botella de tequila a lado, tres bolsas de Totis, y pura msica de antro para no dormirnos, iniciamos el programa, segn yo y mi cerebro que ya est chingando que se quiere ir a dormir el programa ya est bien

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 o 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 } }

AMIGO!! COMO LE HACES PARA VER Q FUNCIONE!! NO ME ABRE NADA DE ARCHIVO Y YA LO HICE COMO TU DICES!!! COMO PUEDO VER Q SI FUNCIONE CON MI ARCHIVO YA EN BLOC DE NOTAS??? POR FAVOR Responder

GianBros Dice:
junio 13th, 2013 a las 5:41 PM

Hola amigo solo copias y pegas el archivo en un programa java llamado: dosPrueba1 (respetando maysculas y minsculas y sin comillas dobles), en la misma carpeta donde guardes tu programa java copiaras el archivo entrada_prueba_3.txt, y ejecutas tu programa java para comprobar que funcione si no funciona, escribe el error que te arroja la consola de java, saludos y suerte Responder

Вам также может понравиться