public static bool IsReduce(Precedence rulePrecedence, Precedence shiftPrecedence)
        {
            if (rulePrecedence == null)
            {
                throw new ArgumentNullException("rulePrecedence");
            }

            if (shiftPrecedence == null)
            {
                throw new ArgumentNullException("shiftPrecedence");
            }

            if (rulePrecedence.Value == shiftPrecedence.Value)
            {
                return rulePrecedence.Assoc == Associativity.Left;
            }

            return rulePrecedence.Value > shiftPrecedence.Value;
        }