Ejemplo n.º 1
0
        public void ShouldBuildSequencePredicate()
        {
            Terminal a, b, c;
            Sequence predicate;
            ISituationGraph <char>       graph;
            LexicalRule                  rule;
            SituationGraphFactory <char> situationGraphFactory;

            situationGraphFactory = new SituationGraphFactory <char>(new SituationGraphSegmentFactory <char>());

            a = new Terminal('a');
            b = new Terminal('b');
            c = new Terminal('c');

            predicate = new Sequence();
            predicate.Items.Add(a);
            predicate.Items.Add(b);
            predicate.Items.Add(c);

            rule = new LexicalRule()
            {
                Name = "A", Predicate = predicate
            };
            graph = situationGraphFactory.BuildSituationGraph(rule.AsEnumerable());
            Assert.IsTrue(graph.Contains(a));
            Assert.IsTrue(graph.Contains(b));
            Assert.IsTrue(graph.Contains(c));
        }
Ejemplo n.º 2
0
        public void ShouldBuildInputPredicate()
        {
            ISituationPredicate <char> predicate;
            ISituationGraph <char>     graph;
            LexicalRule rule;
            SituationGraphFactory <char> situationGraphFactory;

            situationGraphFactory = new SituationGraphFactory <char>(new SituationGraphSegmentFactory <char>());

            predicate = new Terminal('a');
            rule      = new LexicalRule()
            {
                Name = "A", Predicate = (LexicalPredicate)predicate
            };
            graph = situationGraphFactory.BuildSituationGraph(rule.AsEnumerable());
            Assert.IsTrue(graph.Contains(predicate));

            predicate = new NonTerminal("A");
            rule      = new LexicalRule()
            {
                Name = "A", Predicate = (LexicalPredicate)predicate
            };
            graph = situationGraphFactory.BuildSituationGraph(rule.AsEnumerable());
            Assert.IsTrue(graph.Contains(predicate));


            predicate = new AnyTerminal();
            rule      = new LexicalRule()
            {
                Name = "A", Predicate = (LexicalPredicate)predicate
            };
            graph = situationGraphFactory.BuildSituationGraph(rule.AsEnumerable());
            Assert.IsTrue(graph.Contains(predicate));
        }
Ejemplo n.º 3
0
        public void ShouldCreateNextSituationsUsingLettersRange()
        {
            Terminal    a, c;
            AnyTerminal b;
            Sequence    predicate;
            SituationGraphFactory <char> situationGraphFactory;
            ISituationGraph <char>       graph;

            ISituation <char>[] items;
            LexicalRule         rule;
            Situation <char>    situation;
            SituationCollectionFactory <char> factory;

            a = new Terminal('a');
            b = new AnyTerminal();
            c = new Terminal('c');

            predicate = new Sequence();
            predicate.Items.Add(a);
            predicate.Items.Add(b);
            predicate.Items.Add(c);
            predicate.Items.Add(new Reduce());

            rule = new LexicalRule()
            {
                Name = "A", Predicate = predicate
            };
            situationGraphFactory = new SituationGraphFactory <char>(new SituationGraphSegmentFactory <char>());
            graph   = situationGraphFactory.BuildSituationGraph(rule.AsEnumerable());
            factory = new SituationCollectionFactory <char>(graph);

            situation = new Situation <char>(rule, a, new MockedReduceInput());
            items     = factory.CreateNextSituations(situation.AsEnumerable(), new TerminalInput('b')).ToArray();
            Assert.AreEqual(0, items.Length);

            situation = new Situation <char>(rule, a, new MockedReduceInput());
            items     = factory.CreateNextSituations(situation.AsEnumerable(), new TerminalInput('a')).ToArray();
            Assert.AreEqual(1, items.Length);
            Assert.AreEqual(b, items[0].Predicate);

            situation = new Situation <char>(rule, b, new MockedReduceInput());
            items     = factory.CreateNextSituations(situation.AsEnumerable(), new TerminalInput('b')).ToArray();
            Assert.AreEqual(1, items.Length);
            Assert.AreEqual(c, items[0].Predicate);

            situation = new Situation <char>(rule, b, new MockedReduceInput());
            items     = factory.CreateNextSituations(situation.AsEnumerable(), new TerminalRangeInput(char.MinValue, char.MaxValue)).ToArray();
            Assert.AreEqual(1, items.Length);
            Assert.AreEqual(c, items[0].Predicate);

            situation = new Situation <char>(rule, c, new MockedReduceInput());
            items     = factory.CreateNextSituations(situation.AsEnumerable(), new TerminalInput('c')).ToArray();
            Assert.AreEqual(1, items.Length);
            Assert.IsTrue(items[0].Predicate.Equals(new Reduce()));
        }
Ejemplo n.º 4
0
        public void ShouldBuildAnyLetterPredicate()
        {
            LexicalPredicate             predicate;
            ISituationGraph <char>       graph;
            LexicalRule                  rule;
            SituationGraphFactory <char> situationGraphFactory;

            situationGraphFactory = new SituationGraphFactory <char>(new SituationGraphSegmentFactory <char>());


            predicate = new AnyTerminal();
            rule      = new LexicalRule()
            {
                Name = "A", Predicate = new Sequence(predicate, new Reduce())
            };
            graph = situationGraphFactory.BuildSituationGraph(rule.AsEnumerable());
            Assert.AreEqual(3, graph.Nodes.Count());
        }
Ejemplo n.º 5
0
        public void ShouldBuildAutomatonTableFromExtendedSequence()
        {
            AutomatonTableFactory <char> factory;
            IAutomatonTable <char>       automatonTable;
            LexicalRule          rule;
            Sequence             predicate;
            AutomatonTableParser parser;

            factory = new AutomatonTableFactory <char>( );

            predicate = new Sequence();
            predicate.Items.Add(new Terminal('a'));
            predicate.Items.Add(new Terminal('b'));
            predicate.Items.Add(new Terminal('c'));

            rule = new LexicalRule()
            {
                Name = "rule", IsAxiom = true
            };
            rule.Predicate = new ZeroOrMore()
            {
                Item = predicate
            };

            automatonTable = factory.BuildAutomatonTable(SituationCollectionFactoryHelper.BuildSituationCollectionFactory(rule.AsEnumerable()), new DistinctInputFactory(new RangeValueProvider()));
            Assert.IsNotNull(automatonTable);

            parser = new AutomatonTableParser(automatonTable);

            Assert.AreEqual(1, parser.ActionCount);
            Assert.IsTrue(parser.Parse(new TerminalInput('a')));
            Assert.AreEqual(1, parser.ActionCount);
            Assert.IsTrue(parser.Parse(new TerminalInput('b')));
            Assert.AreEqual(1, parser.ActionCount);
            Assert.IsTrue(parser.Parse(new TerminalInput('c')));
            Assert.AreEqual(1, parser.ActionCount);
            Assert.IsTrue(parser.Parse(new TerminalInput('a')));
        }