Ejemplo n.º 1
0
        public void NFAtoDFA()
        {
            var nfa = new NFATable();
            var a   = nfa.CreateNode();
            var b   = nfa.CreateNode();
            var c   = nfa.CreateNode();

            c.IsFinal      = true;
            nfa.StartState = a;

            nfa.AddTransition(a, a, "1");
            nfa.AddTransition(a, b);
            nfa.AddTransition(a, b, "0");
            nfa.AddTransition(a, c, "0");

            nfa.AddTransition(b, b, "1");
            nfa.AddTransition(b, c);

            nfa.AddTransition(c, c, "1");
            nfa.AddTransition(c, c, "0");

            var dfa = nfa.ToDFATable();

            Assert.AreEqual(dfa.Nodes.Count(), 3);
            Assert.AreEqual(dfa.Transitions.Count(), 6);

            var nodes = dfa.Nodes.ToArray();

            Assert.IsTrue(nodes[0].IsFinal);
            Assert.IsTrue(nodes[1].IsFinal);
            Assert.IsTrue(nodes[2].IsFinal);
        }
Ejemplo n.º 2
0
        public NFATable RemoveTrapStates()
        {
            var nfa = new NFATable(this);

            var removeNodes = new List <Node>();

            foreach (var node in nfa.Nodes.Where(n => !n.IsFinal))
            {
                bool?isTrap = null;

                foreach (var transition in nfa.GetTransitionsFor(node))
                {
                    if (isTrap == null)
                    {
                        isTrap = true;
                    }
                    if (transition.Destination != node)
                    {
                        isTrap = false;
                        break;
                    }
                }

                if (isTrap == true)
                {
                    removeNodes.Add(node);
                }
            }
            foreach (var node in removeNodes)
            {
                nfa.RemoveNode(node);
            }

            return(nfa);
        }
Ejemplo n.º 3
0
        public void StartState_NotNull_AfterAssignment()
        {
            var nfa = new NFATable();
            var a   = nfa.CreateNode();

            nfa.StartState = a;

            Assert.AreEqual(nfa.StartState, a);
        }
        public TokenParserTableGenerator(LexicalConfigurationFile configurationFile)
        {
            this.ConfigurationFile = configurationFile;
            this.NFATable          = this.ConstructLexerTable();

            this._section.AddSection(this._subtokens_section);
            this._section.AddSection(this._tokens_section);
            foreach (var entry in this._token_parts.OrderBy(val => val.Key))
            {
                this._tokens_section.AddSection(entry.Value);
            }
        }
Ejemplo n.º 5
0
        public void ConstructNFA()
        {
            var nfa = new NFATable();
            var a   = nfa.CreateNode();
            var b   = nfa.CreateNode();

            nfa.AddTransition(a, b);

            Assert.IsTrue(nfa.Nodes.Contains(a));
            Assert.IsTrue(nfa.Nodes.Contains(b));
            Assert.AreEqual(nfa.Nodes.Count(), 2);

            Assert.IsTrue(nfa.Transitions.Any(transition => transition.Source == a && transition.Destination == b));
            Assert.AreEqual(nfa.Transitions.Count(), 1);
        }
Ejemplo n.º 6
0
 public TokenParser(NFATable nFATable)
 {
     this.nfaTable = nFATable;
 }