import java.util.*;
/*
* Reconnaître la correction d'une expression parenthésée à l'aide d'une pile.
* L'idée est de garde en mémoire la suite des parenthèses ouvrantes et lorsqu'on rencontre
* une parenthèse fermante correcte de vérifier que la dernière parenthèse ouvrante non encore
* traitée correspond.
* Attention : le code suivant comporte des bugs, sauriez-vous les chasser ? Les bugs concernent
* la mauvaise détection de certains mauvais cas... Songez à certaines opérations qui ne pourraient
* être faite de façon sûre.
*/
public class Parentheses {
public static void main(String []args) {
Stack<Character> pile = new Stack<Character>();
for (int i=0; i<args[0].length(); i++) {
char c = args[0].charAt(i);
char o = ' ';
switch(c) {
case '(':
case '{':
case '[':
pile.push(c);
break;
case ')':
o = pile.pop();
if (o!='(') {
System.err.println("Erreur ')' position "+i);
System.exit(0);
}
break;
case '}':
o = pile.pop();
if (o!='{') {
System.err.println("Erreur '}' position "+i);
System.exit(0);
}
break;
case ']':
o = pile.pop();
if (o!='[') {
System.err.println("Erreur ']' position "+i);
System.exit(0);
}
break;
}
}
if (pile.isEmpty())
System.out.println("C'est correct");
else
System.err.println("Des parenthèses n'ont pas été fermées");
}
}