コード例 #1
0
        IEnumerable <Expression> ParseInput(ITextCursor textCursor, CancellationToken cancellationToken, bool stop_on_first)
        {
            IRequestContext context = textCursor.Context;
            var             res     = new List <Expression>();

            foreach (var commandProcessor in CommandProcessors.ToList())
            {
                // Gets all the syntaxes that are of the same culture of the context or are culture invariant
                var syntaxes = commandProcessor.Syntaxes.Where(
                    s => s.Culture.Equals(context.Culture) || s.Culture.Equals(CultureInfo.InvariantCulture));

                foreach (var syntax in syntaxes)
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    textCursor.RightToLeftParsing = syntax.RightToLeftParsing;
                    textCursor.Reset();

                    if (SyntaxParser.TryParse(textCursor, syntax, context, out Expression expression))
                    {
                        res.Add(expression);
                        if (stop_on_first)
                        {
                            return(res);
                        }
                    }
                }
            }
            return(res);
        }
コード例 #2
0
        private async Task <List <ParsedInput> > ParseInput(string inputText, IRequestContext context, CancellationToken cancellationToken)
        {
            var parsedInputs       = new List <ParsedInput>();
            var processedInputText = inputText;
            var textPreprocessors  = TextPreprocessors.ToList().OrderBy(p => p.Priority);

            foreach (var preprocessor in textPreprocessors)
            {
                cancellationToken.ThrowIfCancellationRequested();
                processedInputText =
                    await
                    preprocessor.ProcessTextAsync(processedInputText, context, cancellationToken)
                    .ConfigureAwait(false);
            }

            var textCursor = new TextCursor(processedInputText, context);

            foreach (var commandProcessor in CommandProcessors.ToList())
            {
                // Gets all the syntaxes that are of the same culture of the context or are culture invariant
                var syntaxes =
                    commandProcessor.Syntaxes.Where(
                        s => s.Culture.Equals(context.Culture) || s.Culture.Equals(CultureInfo.InvariantCulture));

                foreach (var syntax in syntaxes)
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    textCursor.RightToLeftParsing = syntax.RightToLeftParsing;
                    textCursor.Reset();

                    Expression expression;
                    if (SyntaxParser.TryParse(textCursor, syntax, context, out expression))
                    {
                        var commandParsedQuery = new ParsedInput(expression, commandProcessor);
                        parsedInputs.Add(commandParsedQuery);
                        break;
                    }
                }
            }
            return(parsedInputs);
        }