void Taker <BehaviorTriggerSet> .Take(BehaviorTriggerSet item) { if (item.namedTriggers != null) { //stub } if (item.rootTrigger != null) { parent.actualTrigger = item.rootTrigger; foreach (var task in parent.tasks) { task(); } } parent.tasks.Clear(); }
void BehaviorAnalyzer.AnalyzeBehavior(GrammarBlock behaviorExpressionByGBlock, Taker <BehaviorTriggerSet> listener) { //ensure behaver { var metaDepVis = new MetaInfoDependentGrammarBlockVisitor { doDeepSeek = true, doDeepSeekModifier = true }; metaDepVis.metaToVis[StdMetaInfos.nominalBlock.word] = new EnsureBehaver { behaverGiver = stdGiver }; GrammarBlockUtils.VisitGrammarBlock(behaviorExpressionByGBlock, metaDepVis); } //cereate behavior trigger { var rootTrigger = new StdCompositeBehaviorTrigger(); var namedCBTrigger = new Dictionary <string, CompositeBehaviorTrigger>(); var processor = new SentenceBlockRecursiveProcessor { subSentenceBehaviorTaker = rootTrigger, behaverSetCheck = bSetCheck, namedCBTriggers = namedCBTrigger, support = new StdBehaviorReadySupport { assetMediator = assetMediator.assetMed } }; processor.GrammarBlockCommon(behaviorExpressionByGBlock); if (rootTrigger.bTriggers.Count > 0 || namedCBTrigger.Count > 0) { List <NameAndBTrigger> namedTriggers = null; if (namedCBTrigger.Count > 0) { namedTriggers = new List <NameAndBTrigger>(); foreach (var pair in namedCBTrigger) { namedTriggers.Add(new NameAndBTrigger { name = pair.Key, bTrigger = pair.Value }); } } var result = new BehaviorTriggerSet { rootTrigger = rootTrigger.bTriggers.Count > 0 ? rootTrigger : null, namedTriggers = namedTriggers }; listener.Take(result); } } }
void Taker <BehaviorTriggerSet> .Take(BehaviorTriggerSet item) { if (item.namedTriggers != null) { if (parent.actualTrigger == null) { parent.actualTrigger = parent.parent.triggerIntegrator.NewIntegrableBTrigger(); } foreach (var namedTrigger in item.namedTriggers) { parent.setting.triggers.Add(new NamedBTrigger { name = namedTrigger.name, bTrigger = namedTrigger.bTrigger }); parent.actualTrigger.AddSubTrigger(namedTrigger); } foreach (var task in parent.tasks) { task(); } parent.tasks.Clear(); } }