/// <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); }