import java.util.*;
public class Analyse {
public static void main(String []args) {
Stack<Character> pile = new Stack<Character>();
// La chaîne à analyser (est-ce bien parenthésé ?)
String s = "(({})";
// on prend les caractères de la chaîne un par un
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i); // le caractère c est celui d'indice i
if (c=='(' || c=='{') { // Si c'est une parenthèse ouvrante, on la place dans la pile
pile.push(c);
} else { // Si c'est une parenthèse fermante, alors il faut vérifier la correspondance
// avec la dernière parenthèse de la pile
char derniereParenthese = pile.pop();
// Si la fermante ne correspond pas à l'ouvrante ( --> ) et { --> }
// alors c'est une erreur
if (!(
(c==')' && derniereParenthese=='(') ||
(c=='}' && derniereParenthese=='{')
)
) {
System.err.println(s+" mauvais parenthésage en position "+i);
System.exit(1);
}
}
}
// à la fin c'est correct si il ne reste plus de parenthèse ouvrante sans la fermante correspondante
if (!pile.empty()) {
System.err.println(s+" manque de parenthèses fermantes "+pile);
System.exit(1);
}
System.out.println(s+ " est bien parenthésée");
System.exit(0);
}
}