Example #1
0
        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);
            }
        }
Example #2
0
        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
                       ));
        }
Example #3
0
 public BareOrigin(Source.IOrigin origin)
 {
     _origin = origin;
 }
Example #4
0
 public IEnumerable <Tuple <IFragment, IEnumerable <int> > > ProcessBare(Source.IOrigin origin)
 {
     return(Process(origin).Tokens);
 }