IList <Statement> ParseStatements(string text)
        {
            // The parser internally works in Unicode.
            byte[] buffer = Encoding.Unicode.GetBytes(text);
            using (Stream stream = new MemoryStream(buffer))
            {
                ANTLRInputStream input = new ANTLRLowerCaseInputStream(stream, Encoding.Unicode);

                Lexer lexer = new TransactSqlLexer(input);

                CommentedTokenStream tokens = new CommentedTokenStream(lexer);
                SetupCommentHandling(tokens);

                TransactSqlParser parser = new TransactSqlParser(tokens);
                IList <Statement> statements;

                using (StringWriter errorWriter = new StringWriter())
                {
                    parser.TraceDestination = errorWriter;

                    statements = parser.sql();
                    PrintParseErrors(errorWriter.ToString());
                }

                return(statements);
            }
        }
 void SetupCommentHandling(CommentedTokenStream tokens)
 {
     _commentedNodes.Clear();
     tokens.PrecedingComments += HandlePrecedingComments;
 }