elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  analizador sintactico
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: analizador sintactico  (Leído 10,060 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
analizador sintactico
« en: 9 Julio 2014, 04:52 am »

Saludos

Tengo el siguiente codigo que es un analizador lexicografico al cual le pido al usuario que le ingrese un token, para despues imprimir si se trata de un identificador, palabra reservada, etc..
El codigo funciona bien, el problema es que ahora tengo que hacer el analizador sintactico para lo cual he estado investigando en varios sitios, pero no se si debo hacer un automata de pila o un arbol sintactico, no se bien cual seria el siguiente paso a seguir

Código
  1. import java.util.Scanner;
  2.  
  3. class AnalizadorLexico {
  4. Estados estadoActual;
  5.  
  6.    private enum Estados {
  7.     q00, q01, q02, q03, q04, q05, q06, q07, q08, q09, q10,
  8.         q11, q12, q13, q14, q15, q16, q17, q18, q19, q20, q21, q22
  9. }
  10.  
  11.    private boolean palabraReservada(String token) {
  12.     int i;
  13.     String reservadas[] = {"abstract","assert","boolean","break","byte","case","catch","char","class","const",
  14.        "continue","default","do","double","else","enum","extends","final","finally","float","for","goto","if",
  15.        "implements","import","instanceof","int","interface","long","native","new","package","private","protected",
  16.     "public","return","short","static","super","switch","new","package","private","protected","synchronized","this",
  17.     "throw","throws","transient","try","void","volatile","while"};
  18.  
  19.     for(i = 0;i < reservadas.length;i++) {
  20.         if(reservadas[i].equals(token))
  21.               return true;
  22.        }
  23.     return false;
  24.    }
  25.  
  26.    private boolean esIdentificador(String token) {
  27.     int estadoSiguiente;
  28.     char arregloToken[] = token.toCharArray();
  29.     estadoActual = Estados.q00;
  30.     for(int i = 0;i < arregloToken.length;i++){
  31.     if(esLetra(arregloToken[i]))
  32.       estadoSiguiente = 0;
  33.     else if(esDigito(arregloToken[i]))
  34.       estadoSiguiente = 1;
  35.     else
  36.       estadoSiguiente = 2;
  37.     estadoActual = matrizTransicion(estadoActual,estadoSiguiente);
  38.     }
  39.     if(estadoActual.equals(Estados.q01))
  40.       return true;
  41.     else
  42.       return false;
  43.    }
  44.  
  45.    private boolean esDecimalEntero(String token){
  46.     int estadoSiguiente;
  47.     char arregloToken[] = token.toCharArray();
  48.     estadoActual = Estados.q00;
  49.     for(int i = 0;i < arregloToken.length;i++){
  50.     if(esDigito(arregloToken[i]))
  51.       estadoSiguiente = 0;
  52.     else
  53.       estadoSiguiente = 1;
  54.     estadoActual = matrizTransicion2(estadoActual,estadoSiguiente);
  55.     }
  56.     if(estadoActual.equals(Estados.q01))
  57.       return true;
  58.     else
  59.       return false;
  60.    }
  61.  
  62.    private boolean esDecimalReal(String token){
  63.     int estadoSiguiente;
  64.     char arregloToken[] = token.toCharArray();
  65.     estadoActual = Estados.q00;
  66.     for(int i = 0;i < arregloToken.length;i++){
  67.     if(esDigito(arregloToken[i]))
  68.       estadoSiguiente = 0;
  69.     else if(arregloToken[i] == '.')
  70.       estadoSiguiente = 1;
  71.     else
  72.       estadoSiguiente = 2;
  73.     estadoActual = matrizTransicion3(estadoActual,estadoSiguiente);
  74.     }
  75.     if(estadoActual.equals(Estados.q03))
  76.       return true;
  77.     else
  78.       return false;
  79.    }
  80.  
  81.    public Estados matrizTransicion(Estados estadoActual,int estadoSiguiente){
  82.     int estado;
  83.     Estados posicion,matriz[][] = {{Estados.q01,Estados.q02,Estados.q02},
  84.                           {Estados.q01,Estados.q01,Estados.q02},
  85.                           {Estados.q02,Estados.q02,Estados.q02}};
  86.     estado = estadoActual.ordinal();
  87.     posicion = matriz[estado][estadoSiguiente];
  88.     return posicion;
  89.    }
  90.  
  91.    public Estados matrizTransicion2(Estados estadoActual,int estadoSiguiente){
  92.     int estado;
  93.     Estados posicion,matriz[][] = {{Estados.q01,Estados.q02},
  94.                                       {Estados.q01,Estados.q02},
  95.                                       {Estados.q02,Estados.q02}};
  96.     estado = estadoActual.ordinal();
  97.     posicion = matriz[estado][estadoSiguiente];
  98.     return posicion;
  99.    }
  100.  
  101.    public Estados matrizTransicion3(Estados estadoActual,int estadoSiguiente){
  102.     int estado;
  103.     Estados posicion,matriz[][] = {{Estados.q01,Estados.q05,Estados.q04},
  104.       {Estados.q01,Estados.q02,Estados.q04},
  105.       {Estados.q03,Estados.q04,Estados.q04},
  106.       {Estados.q03,Estados.q04,Estados.q04},
  107.       {Estados.q04,Estados.q04,Estados.q04},
  108.       {Estados.q03,Estados.q04,Estados.q04}};
  109.     estado = estadoActual.ordinal();
  110.     posicion = matriz[estado][estadoSiguiente];
  111.     return posicion;
  112.    }
  113.  
  114.    public boolean esLetra(char caracter) {
  115.     if((caracter >= 'A' && caracter <= 'Z')||(caracter >= 'a' && caracter <= 'z'))
  116.       return true;
  117.     else
  118.       return false;
  119.    }
  120.  
  121.    public boolean esDigito(char caracter) {
  122.     if((caracter >= '0' && caracter <= '9'))
  123.       return true;
  124.     else
  125.       return false;
  126.    }
  127.  
  128.    public void AutomataFinitoDeterminista(String token) {
  129.     if(palabraReservada(token))
  130.       System.out.println("El token " + token + " es una palabra reservada");
  131.     else if(esDecimalEntero(token))
  132.       System.out.println("El token " + token + " es un numero decimal entero");
  133.     else if(esIdentificador(token))
  134.       System.out.println("El token " + token + " es un identificador");
  135.     else if(esDecimalReal(token))
  136.       System.out.println("El token " + token + " es un numero decimal real");
  137.    }
  138. }
  139.  
  140. public class AutomataFinito {
  141.  
  142. public static void main(String[] args) {
  143. String token;
  144. char otroToken;
  145. AnalizadorLexico analizador = new AnalizadorLexico();
  146. Scanner teclado = new Scanner(System.in);
  147. do
  148. {
  149. System.out.print("Dame el token: ");
  150. token = teclado.nextLine();
  151. analizador.AutomataFinitoDeterminista(token);
  152. System.out.print("Desea ingresar otro token?(S/N) ");
  153. otroToken = teclado.nextLine().charAt(0);
  154. }while(otroToken == 'S' || otroToken == 's');
  155. teclado.close();
  156. }
  157. }

gracias


En línea

jhoriloro

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: analizador sintactico
« Respuesta #1 en: 26 Mayo 2017, 01:54 am »

lo pudo  hacer


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Consutla Analizador Sintactico
.NET (C#, VB.NET, ASP)
Choclito 0 3,328 Último mensaje 12 Marzo 2010, 01:38 am
por Choclito
[Ayuda-C] Programación de un analizador léxico-sintáctico
Programación C/C++
Miky Gonzalez 2 6,676 Último mensaje 6 Agosto 2013, 23:16 pm
por Alien-Z
Arbol Sintactico
Java
m@o_614 0 5,180 Último mensaje 18 Noviembre 2014, 04:13 am
por m@o_614
Analizador lexico/sintactico
Scripting
roadd 4 3,756 Último mensaje 5 Mayo 2015, 22:00 pm
por roadd
analizador lexico / sintactico python
Programación General
javidarks 7 15,537 Último mensaje 1 Agosto 2021, 10:12 am
por fzp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines