Esempio n. 1
0
        private void LeoMemoization(EarleyItem earleyItem, int setNumber)
        {
            if (!Sets[setNumber].IsItemLeoEligible(earleyItem))
            {
                return;
            }

            Symbol  penult             = earleyItem.GetItemPenult();
            LeoItem predecessorLeoItem = FindLeoItemPredecessor(earleyItem);

            if (predecessorLeoItem != null)
            {
                Sets[predecessorLeoItem.GetOrignPosition()]
                .AddLeoItem(new LeoItem(
                                predecessorLeoItem.GetDottedRule(),
                                predecessorLeoItem.GetOrignPosition(),
                                penult
                                ));
            }
            else
            {
                Sets[earleyItem.GetOrignPosition()]
                .AddLeoItem(new LeoItem(
                                new DottedRule(earleyItem.GetRule(), earleyItem.GetRulePosition() + 1),
                                earleyItem.GetOrignPosition(),
                                penult
                                ));
            }
        }
Esempio n. 2
0
        internal bool IsItemPenultUnique(EarleyItem selectedEarleyItem)
        {
            List <EarleyItem> items = GetEarleyItemList();

            if (items.Find(el => el.Equals(selectedEarleyItem)) == null)
            {
                return(false);
            }

            Symbol penult = selectedEarleyItem.GetItemPenult();

            if (penult == null)
            {
                return(false);
            }

            for (int i = 0; i < items.Count; i++)
            {
                EarleyItem item = items[i];
                if (penult.Equals(item.GetItemPenult()) && !item.GetRule().Equals(selectedEarleyItem.GetRule()))
                {
                    return(false);
                }
            }
            return(true);
        }
Esempio n. 3
0
 internal bool IsItemLeoUnique(EarleyItem earleyItem)
 {
     return(earleyItem.GetItemPenult() != null && IsItemPenultUnique(earleyItem));
 }