public IRenderableProduction Clone()
        {
            var clone = new TerminalProduction(Terminal)
            {
                Name             = Name,
                Scope            = Scope.Clone(),
                IsOccluder       = IsOccluder,
                ParentProduction = ParentProduction
            };

            return(clone);
        }
        //public RegistrarProduction Repeat(RepeatProduction repeater)
        //{
        //    if (!_finalFlag)
        //    {
        //        ChildProductions.Add(repeater);
        //        _finalFlag = true;
        //    }
        //    else
        //    {
        //        Debug.Log(string.Format("Encountered an illegal production definition: Registrar {0} already finalized, may not parse Repeat production.", Name));
        //    }

        //    return this;
        //}

        public RegistrarProduction Terminate(TerminalProduction terminal)
        {
            if (!_finalFlag)
            {
                var term = terminal.Clone();
                term.ParentProduction = this;
                ChildProductions.Add(term);
                _finalFlag = true;
            }
            else
            {
                Debug.Log(string.Format("Encountered an illegal production definition: Registrar {0} already finalized, may not parse Terminate production.", Name));
            }

            return(this);
        }