コード例 #1
0
        void CrossToBigs(TAlternativeParserGrpCrossItem ACrossItem, TAlternativeParserItemBig ABig)
        {
            TAlternativeParserGrpItemBase     Base;
            TAlternativeParserGrpCrossItemOut Cross;
            TAlternativeParserItemBig         mHeadBig = new TAlternativeParserItemBig();

            mHeadBig.OwnerBig = ABig;
            ABig.MainList.Append(mHeadBig);

            TAlternativeParserItemBig mBig = new TAlternativeParserItemBig();

            for (int i = 0; i <= ACrossItem.CountBasis - 1; i++)
            {
                FillItemGrp(ACrossItem.GetItemsBasis(i), ref mBig);
            }
            mBig.Check    = true;
            mBig.OwnerBig = mHeadBig;
            mBig.NumAlt   = 0;
            mBig.Cross    = true;
            mHeadBig.AddBig(mBig);
            for (int i = 0; i <= ACrossItem.CountOut - 1; i++)
            {
                mBig       = new TAlternativeParserItemBig();
                Cross      = ACrossItem.GetItemsOut(i);
                mBig.Check = true;
                mBig.Cross = true;
                for (int j = 0; j <= Cross.Count - 1; j++)
                {
                    FillItemGrp(Cross.GetItems(j), ref mBig);
                }
                mBig.NumAlt   = i + 1;
                mBig.OwnerBig = mHeadBig;
                mHeadBig.AddBig(mBig);
            }
        }
コード例 #2
0
        void MakeBig(ref TAlternativeParserItemBig ABig, bool AByPass)
        {
            int                       m_n = 0;
            bool                      b_basis, b_main, b_tail, b_go, b_parent, b_cbm, b_valid = false;
            TTreeListTFS              TFS;
            TAlternateTreeList        AItem;
            TAlternativeParserItemBig NewBig;
            TMainTreeList             m_Tree = ABig.MainTreeList;

            TDynamicArray D      = new TDynamicArray();
            TDynamicArray Mass   = new TDynamicArray();
            bool          m_whl  = true;
            bool          m_hook = false;

            while (m_whl)
            {
                m_whl = false;
                f_Grp.Clear();
                for (int i = 0; i <= ABig.BasisCount - 1; i++)
                {
                    TFS = ABig.GetBasisItems(i);
                    m_Tree.FindAlternate(TFS.BaseWorkShape, D);
                    b_go = false;
                    if (D.Count > 0)
                    {
                        for (int j = 0; j <= D.Count - 1; j++)
                        {
                            AItem    = (TAlternateTreeList)(D.GetItems(j));
                            b_basis  = ABig.CompareBasisAndAlternateTreeList(AItem);
                            b_main   = AItem.MainAlternative;
                            b_tail   = ABig.IsTailAlternateTreeList(AItem);
                            b_parent = ABig.ParentTFE != null;
                            if (!b_basis && !b_main)
                            {
                                Mass.Clear();
                                ABig.GetTreeListTFSFromBasis(AItem, Mass, ref b_valid);
                                if (!b_valid)
                                {
                                    continue;
                                }
                                b_cbm = ABig.CompareBasisAndMassiv(Mass);
                                b_go  = (AByPass || !b_cbm || b_parent);
                                if (b_go)
                                {
                                    CreateParserGrpItemList(Mass, AItem);
                                }
                            }
                            if (b_tail && !b_main && !b_go)
                            {
                                m_n++;
                                NewBig        = new TAlternativeParserItemBig();
                                NewBig.NumAlt = m_n;
                                NewBig.FillBasisAlternateTreeList(AItem);
                                NewBig.OwnerBig = ABig;
                                ABig.AddBig(NewBig);
                            }
                        }
                    }
                    f_Grp.AddTfs(TFS);
                }

                if (ABig.BadBasis && !m_hook)
                {
                    ABig.HookBasisBig();
                    m_hook = true;
                    m_whl  = true;
                }
            }
            f_Grp.Make();
            FillBigFromGrp(ref ABig);
            D    = null;
            Mass = null;
        }