public static IParseTree <Symbol> Build(Source.IOrigin origin) { var sanitizedTokens = SanitizedTokens(origin); // Assume every list from tupple is of size 1 !!! var leafs = sanitizedTokens.Select(r => { Debug.Assert(r.Item2.Count() == 1); return(new ParseLeaf <Symbol>(r.Item1, new Symbol(r.Item2.First()))); }); var grammar = new Grammar <Symbol>( NicodemGrammarProductions.StartSymbol(), NicodemGrammarProductions.MakeProductionsDictionaryForGrammarConstructor()); var parser = new LlParser <Symbol>(grammar); var parseRes = parser.Parse(leafs); if (parseRes is OK <Symbol> ) { return((parseRes as OK <Symbol>).Tree); } else { var err = parseRes as Error <Symbol>; Console.WriteLine(ParserUtils <Symbol> .PrepareErrorMessage(err)); return(null); } }
public LexerResult Process(Source.IOrigin origin) { if (_engine != null) { return(_engine.Process(origin)); } // fallback var result = Process <BareOrigin, ILocation, BareLocation, BareFragment>(new BareOrigin(origin)); return(new LexerResult( from tuple in result.Tokens select new Tuple <IFragment, IEnumerable <int> >(tuple.Item1.Fragment, tuple.Item2), result.LastParsedLocation._location, result.FailedAtLocation._location )); }
public BareOrigin(Source.IOrigin origin) { _origin = origin; }
public IEnumerable <Tuple <IFragment, IEnumerable <int> > > ProcessBare(Source.IOrigin origin) { return(Process(origin).Tokens); }