Nice sample extension, thanks... :)
In the parser beginning parenthesis in the sequence must match with appropriate one in the end...
Something like that:
if (current.IsWhiteSpaceOrZero() && firstChar != null)
return false;
if (current == ']' && firstChar != '[')
return false;
if (current == ')' && firstChar != '(')
return false;