Hola que tal amig@s programadores y gente con mucho tiempo libre y que de última hora anda buscando un analizador léxico… :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 Díaz Pérez, ya comenzamos a talachearle con la programación y pues lo primero que cruzo por nuestra mente pues «inge su…» lo hacemos con Tokens, bueno para ser más precisos con la función de StringTokenizer, pero el profesor nos aconsejo no utilizarlo ya que después conforme vayamos avanzando se nos dificultará más y más, así que para no meternos en líos hubo que rehacer todo y con una botella de tequila a lado, tres bolsas de «Totis», y pura música de antro para no dormirnos, iniciamos el programa, según yo y mi cerebro que ya está chingando que se quiere ir a dormir el programa ya está bien 🙂
Éste analizador Léxico está programado en Java y reconoce: identificadores (variable), palabras reservadas, números, operadores, separadores, letra y dígito , y se crea con la intención 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 código ya va comentado y sólo 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 línea 118 el nombre establecido por el nombre de su archivo de entrada.
Cualquier duda, aclaración, consejo es bien recibido, saludos cordiales y espero les sirva de algo.
[java]
/**
@author: Luigi Pérez Calzada
@nick: GianBros
@date: 2011-08-11 at 3:39a.m.
Programa de analizador léxico 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 línea
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 línea
}
i=j;//movemos a nuestra variable i en la cadena
System.out.println("Número–>"+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
}
}
[/java]
eres un genio
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
Hola amigo solo copias y pegas el archivo en un programa java llamado: «dosPrueba1» (respetando mayúsculas y minúsculas 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 🙂
hola amigo tu compilador esta bien pero tengo un error cuando compilo no me arroja errores pero a la hora de ejecutar no me muestra nada solo presione una tecla uso textpad para ejecutar el programa saludos
Quizá tu programa no este bien configurado intentalo ejecutar desde consola y si sigue sin funcionar, quizá entonces si sea el programa, saludos 🙂
si amigo pero no se mucho al respecto pero que podria suceder en ese caso porque me compila perfecto sin errores pero no me muestra las funciones del programa T_T
Quizá no tienes bien instalado el jdk por eso te digo que compiles y ejecutes desde consola (pantalla negra de Windows)
Saludos ya probé desde consola y nada si quieres me contacto desde el correo para mandarte loa capture el mismo error que me arroja me lo tira en consola
Claro, mandame a mi correo no hay problema. Mi mail lo encuentras en la sección de mi curriculum.
Oye amigo, como puedo hacer para que al final del analizis me salga un mensaje de «Verdadero» o «Falso», osea que el código en txt esta correcto?
Ayúdame Por Favor!
Gracias por el aporte amigo, me ayudo para la base de el mio 😀
Amigo terminaste el compilador??? Sera que me puedes ayudar con lo que sigue..Gracias!
Vos me podes ayudar fijate que no me funciona, ya lo cargue así como lo indicas pero no me funciona, no me podemos hablar por correo? joseandbsy2005@gmail.com
Amigo… ya lo pase a netbeans pero no hace nada :/ compila y ejecuta pero el programa sencillamente NO HACE NADA , podrias ayudarme? porfavor…
A alguien ya le funcionó este programa? Ando con el mismo error que marcan todos en los comentarios de arriba. :/
Hola amigo me podrias decir si debo cargar el archivo txt en alguna de las carpetas de mi netbeans para q se ejecute correctamente o q debo hacer… te agradeceria en verdad… te dejo mi correo: piolin_lpsay@hotmail.com
HEY BUENAS BROO…..DISCULPA DE QUE FORMA ELIMINAS ESTO
INICIO PROGRAMA{
ENT X;
<"ESTE ESPACIO"
.
.
.
.
ESQUE NO CONSIDERE ESO Y AHORA ME ESTA DANDO MUCHOOS PROBLEMAS YA BUSQUE MUCHAS SOLUCIONES Y NO ENCUENTRO NINGUNA?
mi correo es este si alguien sabe
esteban_dejesusfg@hotmail.com