void IncrementalGAnalyzer.Analyze(GAnlysInput input, IncrGAnalysisListener listener) { var recLis = new RecordingIncrGAnalysListener { baseListener = listener }; baseAnalyzer.Analyze(input, recLis); if (!recLis.didMatch) { listener.OnMatch(input, StbAfterLis.instance); } }
void GrammarAnalyzer.AnalyzeGrammar(GAnlysInput input, Taker <GrammarBlock> listener) { var result = new ExpansiveMutableGBlock { metaForCluster = StdMetaInfos.sentenceCluster }; Action <GrammarBlock> adder = (gBlock) => result.AddBlock(gBlock); var nextInput = input; while (true) { //prepare analyzePreparer.Init(); foreach (var morpheme in nextInput.followings) { analyzePreparer.FeedMorpheme(morpheme); if (morpheme.id == 2) { break; } } var easyLis = new EasyIncrGAnalysListener { }; incrGAnalyzer.Analyze(nextInput, easyLis); if (!easyLis.didMatch) { break; } nextInput = easyLis.nextInput; easyLis.listener.OnResultRequested(adder); } if (result.content != null) { listener.Take(result); } else { listener.None(); } }