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); }
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); }
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); } }
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); }
public TokenParser(NFATable nFATable) { this.nfaTable = nFATable; }