Exemplo n.º 1
0
        private static void TraversePlay()
        {
            var g = new Grammar(new List <Production> {
                CFGParser.Production("<A> → <B>"),
                CFGParser.Production("<B> → <A>"),
                CFGParser.Production("<B> → 'x'"),
            }, Nonterminal.Of("A"));

            g = IdentityActions.Annotate(g);

            var earley2  = new EarleyParser2(g);
            var sentence = Sentence.FromWords("x");
            var sppf2    = earley2.ParseGetForest(sentence);

            DotRunner.Run(DotBuilder.GetRawDot(sppf2), "infinite");

            var t2 = new Traversal(sppf2, g);
            var r2 = t2.Traverse();
            //foreach (var option in r2) {
            //	var s2 = (Sentence)option.Payload;
            //	if (!sentence.SequenceEqual(s2)) {
            //		throw new Exception();
            //	}
            //}
        }
Exemplo n.º 2
0
        private static void DevelopAnnotations()
        {
            var sw    = Stopwatch.StartNew();
            var input = Sentence.FromLetters(Grammars.Properties.Resources.Arithmetic_annotated);
            var inputWithoutLayout = Ebnf.RemoveLayout(input, out _);
            var grammar            = Ebnf.GrammarSyntax();
            var parser             = new EarleyParser2(grammar);
            var sppf = parser.ParseGetForest(inputWithoutLayout);

            if (sppf == null)
            {
                throw new Exception();
            }
            var ms1 = sw.Elapsed.TotalMilliseconds;

            Console.WriteLine("Parse: {0:0.#}ms", ms1);
            DotRunner.Run(DotBuilder.GetRawDot(sppf), "annotations");

            var traversal     = new Traversal(sppf, grammar);
            var resCollection = traversal.Traverse();

            if (resCollection.Count() > 1)
            {
                throw new Exception("ambiguous");
            }
            var res = resCollection.Single();

            Console.WriteLine(res);
        }
Exemplo n.º 3
0
        private static void VisitorPlay()
        {
            var gp = AdditionGrammar(argList => string.Format("({0} + {1})", argList[0].Payload, argList[2].Payload));

            //var actions2 = new Dictionary<Production, IParserAction> {
            //	[p1] = new ParserAction<long>((argList) => (long)(argList[0].Payload) + (long)(argList[2].Payload)),
            //};
            //var termAction2 = new ParserAction<long>(x => Convert.ToInt64(x[0].Payload));
            //foreach (var num in nums) {
            //	actions2[num] = termAction2;
            //}

            var ep = new EarleyParser2(gp);

            var inputString = AdditionInput(5);
            var input       = Sentence.FromWords(inputString);
            var sppf        = ep.ParseGetForest(input);

            var rawdot = DotBuilder.GetRawDot(sppf);

            DotRunner.Run(rawdot, "newSppf");

            Console.WriteLine(sppf.ToString());
            Console.WriteLine();

            Console.WriteLine("Starting Traversal...");
            var trav       = new Traversal(sppf, gp);
            var resultList = trav.Traverse();

            Console.WriteLine("-----------------");
            foreach (var result in resultList)
            {
                Console.WriteLine(result.Payload);
            }

            //Console.WriteLine("-----------------");
            //foreach (var result in new Traversal(sppf, input, gp).Traverse()) {
            //	Console.WriteLine(result.Payload);
            //}
        }
Exemplo n.º 4
0
        public static void CheckTraversal(Grammar g, Sentence sentence, CFGLib.Parsers.Sppf.SppfNode sppf)
        {
            if (sppf == null)
            {
                return;
            }
            var t = new Traversal(sppf, g);
            TraverseResultCollection r = null;

            r = t.Traverse();
            foreach (var option in r)
            {
                if (!(option.Payload is Sentence))
                {
                }
                var sgen = (Sentence)option.Payload;
                if (!sentence.SequenceEqual(sgen))
                {
                    throw new Exception();
                }
            }
        }
Exemplo n.º 5
0
        public static Sentence RemoveLayout(Sentence input, out SppfNode sppf)
        {
            var layoutGrammar = Ebnf.GrammarLayout();
            var earley        = new EarleyParser2(layoutGrammar);

            sppf = earley.ParseGetForest(input);
            if (sppf == null)
            {
                throw new Exception();
            }

            var traversal = new Traversal(sppf, layoutGrammar);
            var result    = traversal.Traverse();

            if (result.Count() != 1)
            {
                throw new Exception();
            }
            var inputNoLayout = new Sentence((List <Terminal>)result.First().Payload);

            return(inputNoLayout);
        }