Code/ExtensionMethods.cs
using System;
using System.Collections.Generic;
using System.Globalization;

namespace Expressive
{
    internal static class ExtensionMethods
    {
        internal static bool IsArithmeticOperator(this string source)
        {
            return string.Equals(source, "+", StringComparison.Ordinal) ||
                string.Equals(source, "-", StringComparison.Ordinal) || string.Equals(source, "\u2212", StringComparison.Ordinal) ||
                string.Equals(source, "/", StringComparison.Ordinal) || string.Equals(source, "\u00f7", StringComparison.Ordinal) ||
                string.Equals(source, "*", StringComparison.Ordinal) || string.Equals(source, "\u00d7", StringComparison.Ordinal) ||
                string.Equals(source, "+", StringComparison.Ordinal) ||
                string.Equals(source, "+", StringComparison.Ordinal) ||
                string.Equals(source, "+", StringComparison.Ordinal);
        }

        internal static bool IsNumeric(this string source, CultureInfo cultureInfo)
        {
            return double.TryParse(source, NumberStyles.Any, cultureInfo, out _);
        }

        internal static T PeekOrDefault<T>(this Queue<T> queue)
        {
            return (queue.Count > 0) ? queue.Peek() : default(T);
        }

        internal static string SubstringUpTo(this string source, int startIndex, char character)
        {
            if (startIndex != 0)
            {
                string inner = source.Substring(startIndex);

                return inner.Substring(0, inner.IndexOf(character) + 1);
            }

            return source.Substring(startIndex, source.IndexOf(character) + 1);
        }
    }
}