/// <summary>
 /// Creates a new Context given the arguments.
 /// </summary>
 /// <typeparam name="TContext"></typeparam>
 /// <param name="context"></param>
 /// <param name="stack"></param>
 /// <param name="callbacks"></param>
 /// <returns></returns>
 public static DescriptorStackContext <TContext> CreateContext <TContext>(TContext context
                                                                          , AbstractSyntaxTreeStack <ProtoDescriptor> stack, params TryReduceDescriptorStackCallback[] callbacks)
     where TContext : RuleContext
 => new DescriptorStackContext <TContext>(context, stack, callbacks);
 /// <summary>
 /// Protected Constructor.
 /// </summary>
 /// <param name="stack"></param>
 protected DescriptorStackContext(AbstractSyntaxTreeStack <ProtoDescriptor> stack)
 {
     PrivateStack = stack;
     StartCount   = stack.Count;
 }