Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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();
            }
        }