+
+ private static final Character[] openingPars = {'(','[','{','<','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
+ private static final Character[] closingPars = {')',']','}','>','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
+
+ private static HashSet<Character> openingParsSet = new HashSet<Character>(Arrays.asList(openingPars));
+ private static HashSet<Character> closingParsSet = new HashSet<Character>(Arrays.asList(closingPars));
+ private static Hashtable<Character,Character> closingToOpening = new Hashtable<Character,Character>()
+ // Initializing final data structure
+ {
+ private static final long serialVersionUID = 1L;
+ {
+ for(int i=0;i<openingPars.length;i++)
+ {
+ System.out.println(closingPars[i]+"->"+openingPars[i]);
+ put(closingPars[i],openingPars[i]);
+ }
+ }};
+
+ private static boolean isOpeningParenthesis(char c)
+ {
+ return openingParsSet.contains(c);
+ }
+
+ private static boolean isClosingParenthesis(char c)
+ {
+ return closingParsSet.contains(c);
+ }
+
+ private static char matchingOpeningParenthesis(char closingParenthesis) throws WUSSParseException
+ {
+ if (!isClosingParenthesis(closingParenthesis))
+ {
+ throw new WUSSParseException("Querying matching opening parenthesis for non-closing parenthesis character "+closingParenthesis, -1);
+ }
+
+ return closingToOpening.get(closingParenthesis);
+ }
+