Ejemplo n.º 1
0
        private static MiniSqlParserParser CreateParser(string inputStr
                                                        , DBMSType dbmsType
                                                        , bool forSqlAccessor)
        {
            var input              = new AntlrInputStream(inputStr);
            var lexer              = new MiniSqlParserLexer(input);
            var tokens             = new CommonTokenStream(lexer);
            var parser             = new MiniSqlParserParser(tokens);
            var astListener        = new MakeASTListener(tokens, dbmsType, forSqlAccessor);
            var errorListener      = new CumulativeErrorListener();
            var lexerErrorListener = new CumulativeLexerErrorListener();

            MiniSqlParserAST.SetDbmsType(lexer, parser, dbmsType);

            // 文法で曖昧な箇所は動的にしか発見できないらしい
            //parser.AddErrorListener(new DiagnosticErrorListener());
            //parser.Interpreter.PredictionMode = PredictionMode.LlExactAmbigDetection;

            lexer.RemoveErrorListeners();
            lexer.AddErrorListener(lexerErrorListener);

            parser.AddParseListener(astListener);
            parser.RemoveErrorListeners();
            parser.AddErrorListener(errorListener);

            return(parser);
        }