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"); } }