示例#1
0
文件: Extensions.cs 项目: igitur/CQL
        /// <summary>
        /// Converts lexer processings into a set of resulting tokens.
        /// </summary>
        /// <param name="this"></param>
        /// <returns></returns>
        public static IEnumerable <IToken> ToList(this CQLLexer @this)
        {
            return(tokensByLexer.GetValue(@this, lexer =>
            {
                var res = new LinkedList <IToken>();
                IToken next;
                //try
                {
                    do
                    {
                        next = lexer.NextToken();
                        if (next.Channel == 0)
                        {
                            if (next.Type < 0)
                            {
                                next = new CommonToken(new Tuple <ITokenSource, ICharStream>(next.TokenSource, next.InputStream), TokenType_Caret, 0, next.StartIndex, next.StopIndex);
                            }
                            res.AddLast(next);
                        }
                    } while (next.Type >= 0);
                }

                /*catch (NoViableAltException)
                 * {
                 *  res.AddLast(new CommonToken(CQLLexer.Eof));
                 * }*/
                return res;
            }));
        }
示例#2
0
        /// <summary>
        /// Given the code, let the suggester provide next tokens (suggestions).
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public IEnumerable <Suggestion> GetSuggestions(string code)
        {
            var collector  = new HashSet <Suggestion>();
            var charStream = new AntlrInputStream(code);
            var lexer      = new CQLLexer(charStream);

            Process(atn.states[0], new MyTokenStream(lexer.ToList()), collector, new ParserStack(), new HashSet <int>());
            return(collector);
        }
示例#3
0
        /// <summary>
        /// Parses a user query (without validating it). You practically only get the syntax tree.
        /// </summary>
        /// <param name="text"></param>
        /// <param name="errorListener"></param>
        /// <returns></returns>
        public static Query ParseForSyntaxOnly(string text, IErrorListener errorListener = null)
        {
            var inputStream       = new AntlrInputStream(text);
            var speakLexer        = new CQLLexer(inputStream);
            var commonTokenStream = new CommonTokenStream(speakLexer);
            var parser            = new CQLParser(commonTokenStream);

            AddErrorListener(parser, errorListener);
            var parseContext = parser.query();
            var visitor      = new QueryVisitor();

            return(visitor.Visit(parseContext));
        }