private static Expression Prefix(Lexemes lexemes, IUnitRegistry unitRegistry)
        {
            IUnit unit;
            Prefix prefix;
            if (lexemes.AcceptTokenFrom(unitRegistry, out prefix))
            {
                if (lexemes.AcceptTokenFrom(unitRegistry, out unit))
                {
                    return Unit(prefix, unit);
                }

                lexemes.MoveToPrevious();
            }

            if (lexemes.AcceptTokenFrom(unitRegistry, out unit))
            {
                return Unit(null, unit);
            }

            string variable;
            if (lexemes.AcceptTokenFrom(VariableRegex, out variable))
            {
                return new VariableExpression(variable);
            }

            throw CreateParseException(UnitError.PrefixUnitOrUnitOrVariableNotFound, lexemes.Current);
        }
        private static Expression Prefix(Lexemes lexemes, IUnitRegistry unitRegistry)
        {
            IUnit  unit;
            Prefix prefix;

            if (lexemes.AcceptTokenFrom(unitRegistry, out prefix))
            {
                if (lexemes.AcceptTokenFrom(unitRegistry, out unit))
                {
                    return(Unit(prefix, unit));
                }

                lexemes.MoveToPrevious();
            }

            if (lexemes.AcceptTokenFrom(unitRegistry, out unit))
            {
                return(Unit(null, unit));
            }

            string variable;

            if (lexemes.AcceptTokenFrom(VariableRegex, out variable))
            {
                return(new VariableExpression(variable));
            }

            throw CreateParseException(UnitError.PrefixUnitOrUnitOrVariableNotFound, lexemes.Current);
        }