ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Análisis Léxico En Java


Enviado por   •  12 de Octubre de 2013  •  4.431 Palabras (18 Páginas)  •  340 Visitas

Página 1 de 18

Introducción

Dentro de la fase de compilación existen tres grandes sub-etapas las cuales se

encargan de analizar el código para dar un resultado positivo si tus expresiones util izadas son

gratamente reconocidas por todas las normas que plantea cierto lenguaje de programación.

En este documento se muestra el desarrollo de una de esas sub-etapas, el análisis

léxico. Dentro de esta sub-etapa se localizan solo las normas que deben de cumplir todas

aquellas palabras (tokens) que estén dentro de un código escrito por el usuario. Dicho de otra

forma se encarga de indicar si dentro de tu código existe alguna palabra no reconocida para el

lenguaje.

Cada uno de los métodos aquí contenidos presentan una breve descripción de su

función, el algoritmo utilizado y el código para lenguaje Java.

Clase AnLexico

La clase AnLexico está diseñada para evaluar una cadena de caracteres basada en un

léxico determinado. Cuenta solo con el constructor default y al crear un objeto de esta clase, al

igual que todos, comienza con valores vacios.

Atributos

Atributos contenidos dentro de la clase AnLexico:

Tabla de símbolos

La tabla de símbolos contendrá las palabras reservadas del lenguaje así como las

variables que se declaren dentro de un programa. Es una instancia de la clase Hashtable

denominada tabaSimbolos.

Código

Hashtable tokens= new Hashtable();

Tabla de tokens

La tabla de tokens tendrá uso al almacenar cada una de las palabras que contenga la

cadena de texto a analizar. Es también una instancia de la clase Hashtable en este caso

nombrada tokens.

Código

Hashtable tablaSimbolos= new Hashtable();

6

Cadena de errores

Este objeto de la clase String contendrá todos aquellos errores resultantes del análisis

léxico. Tendrá un uso importante ya que de el dependerá el veredicto final de análisis; al estar

vacio significara que no se detectaron errores durante todo el proceso.

Código

String error="";

7

Método analiza

Este método analiza cada una de las palabras guardadas dentro de la tabla de tokens,

toma como llegada una cadena que después envía al método encargado de separar en tokens.

Mientras la tabla contenga algún token mas, tomara de uno a uno y los analizara. Cada token

lo compara con una de las posibles opciones; siendo el primer caso que el token sea un tipo de

dato, lo cual indica que el siguiente token deberá ser un nombre para una variable y tendrá

que pasar las normas para ser válido, los casos siguientes simplemente ubican su posible valor

y lo envían para ser validado.

Algoritmo para analizar una cadena dada

contenido es un objeto de la clase String que llega como parámetro

cantidad es variable de tipo entero que toma el valor que regresa el método tokeniza al

enviarle contenido

token y aux son objetos de la clase String

j es variable de tipo entero que inicializa su valor en cero

se llama al método llenaSimbolos

mientras j sea menor que cantidad

token toma el valor de tokens donde la clave sea j

si tablaSimbolos contiene como clave a token

aux toma el valor de tablaSimbolos donde clave sea token

si aux es igual a la cadena “tipo de dato”

j se incrementa en uno

token toma el valor de tokens donde la clave sea j

si el método nomVariablreValido regresa verdadero al evaluar token

se envía token al método guardaVarible

sino

error añade una nueva línea con token y la oración “nombre de

variable invalido”

sino si el método conectorLogico regresa verdadero al enviarle a token

se envía token al método evalConectorLogico

sino si el método opLogicos regresa verdadero al enviarle a token

se envía token al método evalOpLogicos

sino si el método opAsignacion regresa verdadero al enviarle a token

se envía token al método evalOpAsignacion

sino si el método opAritmeticos regresa verdadero al enviarle a token

se envía token al método evalOpAritmeticos

sino

si token es diferente de ‘(’ y ‘)’

error añade una nueva línea con token y la oración “palabra no

reconocida”

j se incrementa en uno

si error esta vacio

regresa verdadero

regresa falso

8

Código

public boolean analiza(String contenido){

int cantidad=tokeniza(contenido);

String token="";

String aux="";

llenaSimbolos();

int j=0;

while(j<cantidad){

token=String.valueOf(tokens.get(j));

if(tablaSimbolos.containsKey(token)){

aux=String.valueOf(tablaSimbolos.get(token));

if(aux.equals("tipo de dato")){

j++;

token=String.valueOf(tokens.get(j));

if(nomVariableValido(token)) guardaVariable(token);

else error+="Error: " +token +" nombre de variable invalido \n";

}

}

else if(conectorLogico(token)){

evalConectorLogico(token);

}

else if(opLogicos(token)){

evalOpLogicos(token);

}

else if(opAsignacion(token)){

evalOpAsignacion(token);

}

else if(opAritmeticos(token)){

evalOpAritmeticos(token);

}

else

if(!token.equals("(") && !token.equals(")")) error+="Error: " +token +" palabra no

reconocida \n";

j++;

}

if(error.isEmpty())

return true;

return false;

}

9

Método llenaSimbolos

Este método se encarga de llenar la tabla de símbolos donde se encuentran todas

aquellas palabras

...

Descargar como (para miembros actualizados) txt (27 Kb)
Leer 17 páginas más »
Disponible sólo en Clubensayos.com