コード例 #1
0
        /// <summary>
        /// Run parsing according to parser grammar on given text
        /// TODO: Error reporting
        /// </summary>
        /// <param name="text">Text input for parsing</param>
        /// <returns>Parse source data</returns>
        public SourceData Parse(string text)
        {
            var w = Stopwatch.StartNew();

            //initialize
            _agenda.Clear();
            _interpretations.Clear();
            _nextWordContexts.Clear();
            _result = null;

            var inputTokens = _grammar.OutlineTokens(new[] { Token.Text(text, 0) });
            var tokenStream = new TokenStream(inputTokens);

            var sourceData   = new SourceData(text, tokenStream);
            var startContext = sourceData.StartContext;

            startContext.AddSelfEdgesFrom(_rootTransitions);

            _nextWordContexts.Add(startContext);

            while (_result == null)
            {
                if (!scan())
                {
                    break;
                }

                processAgenda();
            }

            w.Stop();
            Console.WriteLine("{0}ms", w.ElapsedMilliseconds);
            var root = buildOutput(_result);

            sourceData.Root = root;
            return(sourceData);
        }