Ejemplo n.º 1
0
        public static bool TryParseAll <T>(TokenListParser <ExpressionToken, T> parser, string source, out T value, out string error)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            var tokens = ExpressionTokenizer.TryTokenize(source);

            if (!tokens.HasValue)
            {
                value = default;
                error = tokens.ToString();
                return(false);
            }

            var result = parser.AtEnd()(tokens.Value);

            if (!result.HasValue)
            {
                value = default;
                error = result.ToString();
                return(false);
            }

            value = result.Value;
            error = null;
            return(true);
        }
Ejemplo n.º 2
0
        static void Main()
        {
            Console.Write(Prompt);
            var line = Console.ReadLine();

            while (line != null)
            {
                if (!string.IsNullOrWhiteSpace(line))
                {
                    try
                    {
                        var tokens = ExpressionTokenizer.TryTokenize(line);
                        if (!tokens.HasValue)
                        {
                            WriteSyntaxError(tokens.ToString(), tokens.ErrorPosition);
                        }
                        else if (!ExpressionParser.TryParse(tokens.Value, out var expr, out var error, out var errorPosition))
                        {
                            WriteSyntaxError(error, errorPosition);
                        }
                        else
                        {
                            var result = ExpressionEvaluator.Evaluate(expr);
                            Console.ForegroundColor = ConsoleColor.Cyan;
                            Console.WriteLine(result);
                        }
                    }
Ejemplo n.º 3
0
        public void ValidResultsAreComputed(string source, string result)
        {
            var tokens = ExpressionTokenizer.TryTokenize(source);

            Assert.True(tokens.HasValue, tokens.ToString());

            Assert.True(ExpressionParser.TryParse(tokens.Value, out var expr, out var err), err);
            var actual = ExpressionEvaluator.Evaluate(expr);

            Assert.Equal(result, actual.ToString());
        }