J'écris un analyseur, et je travaille actuellement sur différents jetons correspondant, et je vais avoir un peu de mal avec correspondance. J'ai un fichier de test:analyseur Java et regex
while a != b
if a > b
a := a - b
if a <= b
b := b - a
elihw
Et une partie de mon code:
private static Scanner sc = new Scanner(System.in);
private static Pattern tokenPattern = Pattern.compile("[ ]+");
private static Pattern idPattern = Pattern.compile("[a-zA-Z]+");
....main(...) {
sc.useDelimiter(tokenPattern);
statement();
}
public static void statement() {
System.out.println("Statement");
String token = null;
while (sc.hasNext()) {
if (sc.hasNext(idPattern)) {
token = sc.next();
System.out.print(" (" + token + ") ");
}
else {
token = sc.next();
System.out.print(token + ' ');
}
}
}
Quand je lance cette méthode, il correspond à des chaînes avant les opérateurs, mais pas les uns après. Les parenths sont là juste pour marquer ceux qui correspondent. Par exemple, la ligne
a := a - b
produira sortie:
(a) := (a) - b
Je ne peux pas comprendre pourquoi le b ne correspond pas.
Aussi si quelqu'un pouvait m'aider avec une regex qui correspond aux opérateurs ce serait génial. J'ai essayé beaucoup de variations de choses comme ceci:
[\+\-\*\\]
[\\+\\-\\*\\\]
[+][-][*][/]
Mais ne peux pas sembler avoir raison.
Vous faites ce mal. Vous devez écrire un scanner approprié, pas seulement une collection de regex. Jetez un oeil à JFlex. – EJP
Cela irait à l'encontre de l'objectif de cet exercice. – user2467567
ajouté Déclaration du scanner – user2467567