• Viernes 29 de Marzo de 2024, 07:47

Autor Tema:  Analizador lexico  (Leído 4084 veces)

hackerdam

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Analizador lexico
« en: Lunes 29 de Febrero de 2016, 19:01 »
0
Hola, estoy haciendo un analizador lexico.
Identifica, dada sierta cadena, que tipo de texto es: palabra reservada, operador, identificador, etc.

El problema es que si en el texto  que uso como expresion regular escribo el caracter "-" no me lo identifica como operador, sino que parece que se lo salta.

Les paso mi codigo acontinuacion:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package analizadorlexico;

import java.util.regex.Matcher; //Encargada de leer el patron.
import java.util.regex.Pattern; //Encargada de definir el patron.


public class AnalizadorLexico {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       
        String patron = ("(while)|([a-zA-Z]+)|([>|<|+|-|*|/|=]+)|([0-9]+)|([(|)]+)|([{|}]+)|(;)"); //Expresión regular.
       
        String texto = "while (x=0) < (y=0) + - *";   //Esta es la expresion regular
       
        Pattern p = Pattern.compile(patron);    //esto compila nuestra expresion regular.
        Matcher matcher = p.matcher(texto);
       
        while(matcher.find()){
           
            String tokenTipo1 = matcher.group(1);
            if(tokenTipo1 != null)
                System.out.println("palabra reservada: " + tokenTipo1);
       
               
            String tokenTipo2 = matcher.group(2);
            if(tokenTipo2 != null){
                System.out.println("Variables: " + tokenTipo2);
            }
               
            String tokenTipo3 = matcher.group(3);
            if(tokenTipo3 != null){
                System.out.println("Operador: " + tokenTipo3);
            }
               
            String tokenTipo4 = matcher.group(4);
            if(tokenTipo4 != null){
                System.out.println("Numero: " + tokenTipo4);
            }
               
            String tokenTipo5 = matcher.group(5);
            if(tokenTipo5 != null){
                System.out.println("Parentesis: " + tokenTipo5);
            }
               
            String tokenTipo6 = matcher.group(6);
            if(tokenTipo6 != null){
                System.out.println("Llaves: " + tokenTipo6);
            }
               
            String tokenTipo7 = matcher.group(7);
            if(tokenTipo7 != null){
                System.out.println("Simbolo: " + tokenTipo7);
            }
           
            }
       
        } //permite encontrar las coincidencias
    }

A que creen que se daba?
Muchas gracias por su ayuda.

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re:Analizador lexico
« Respuesta #1 en: Viernes 11 de Marzo de 2016, 19:33 »
0
Hola, el problema es que el guión lo está tomando como un caracter propio que es utilizado para definir un rango de caracteres.
Lo que puedes hacer es usar un escape de la siguiente manera \'-

saludos,
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com