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.