Exemplo n.º 1
0
        private static void DisplayToken(IToken token)
        {
            var score     = TokenWeightResolver.Invoke(token);
            var tokenInfo = $"{token.GetType().Name}";
            var valueInfo = "[value = {0}]";
            var scoreInfo = $"[score = {score}]";

            valueInfo = token switch
            {
                LiteralToken literalToken => string.Format(valueInfo, $"'{literalToken.Value}'"),

                LiteralAmountToken literalAmountToken => string.Format(valueInfo, literalAmountToken.Amount),

                FractionalAmountToken fractionalAmountToken => string.Format(valueInfo, GetRepresentation(fractionalAmountToken)),

                RangeAmountToken rangeAmountToken => string.Format(valueInfo, GetRepresentation(rangeAmountToken)),

                UnitToken unitToken => string.Format(valueInfo, unitToken.Unit),

                FormToken formToken => string.Format(valueInfo, formToken.Form),

                IngredientToken ingredientToken => string.Format(valueInfo, ingredientToken.Ingredient),

                _ => string.Empty
            };

            var output = $"-> {tokenInfo}\n\t{valueInfo}\n\t{scoreInfo}";

            Console.WriteLine(output);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Visits a <see cref="RangeAmountToken"/>.
        /// </summary>
        /// <param name="token">A <see cref="RangeAmountToken"/> instance.</param>
        public void Visit(RangeAmountToken token)
        {
            // A range token has two nested tokens, so we visit the first and store
            // the value before visiting the second. This allows us to combine the two values.
            token.LowerBound.Accept(this);

            var lowerBoundAmount = _parseResult.Details.Amount;

            token.UpperBound.Accept(this);

            _parseResult.Details.Amount = $"{lowerBoundAmount}-{_parseResult.Details.Amount}";
        }
Exemplo n.º 3
0
        private static string GetRepresentation(RangeAmountToken range)
        {
            return((range.LowerBound, range.UpperBound) switch
            {
                (LiteralAmountToken lowerBound, LiteralAmountToken upperBound) =>
                $"{lowerBound.Amount}-{upperBound.Amount}",

                (FractionalAmountToken lowerBound, FractionalAmountToken upperBound) =>
                $"{GetRepresentation(lowerBound)}-{GetRepresentation(upperBound)}",

                _ => throw new InvalidOperationException($"Unexpected range lower bound token type: {range.LowerBound.Type}")
            });
 private bool Range(InputBuffer buffer, out RangeAmountToken range) =>
 ExecuteRules(GetRangeRules, buffer, out range);