public void MatchTest(string regex, bool caseSensitive, string input, bool match) { var expression = RegexParser.Parse(regex, 0); var mapper = new UnicodeCodepointMapper(false, false); var rxCodepoint = expression.ToInvariant(mapper, new UnicodeCharSetProvider(), caseSensitive); var nfa = NfaBuilder <Codepoint> .Build(rxCodepoint.Optimize()); var dfa = DfaBuilder <Codepoint> .Build(nfa, Codepoints.EOF); var state = dfa.StartState; foreach (var codepoint in input.ToCodepoints().Append(Codepoints.EOF)) { var nextStateId = state.GetTransition(codepoint); if (nextStateId == Dfa <Codepoint> .Reject) { Assert.False(match, "Regex has not matched input, but expected a match"); break; } if (nextStateId == Dfa <Codepoint> .Accept) { Assert.True(match, "Regex has matched input, but expected a non-match"); break; } state = dfa.GetState(nextStateId); Assert.NotNull(state); } }
public void CreateDiagram(string regex, bool caseSensitive) { var expression = RegexParser.Parse(regex, 0); var mapper = new UnicodeCodepointMapper(false, false); var rxCodepoint = expression.ToInvariant(mapper, new UnicodeCharSetProvider(), caseSensitive); var rxAccept = new RxAccept <Codepoint>(rxCodepoint, default(SymbolId), null); var nfa = NfaBuilder <Codepoint> .Build(rxAccept); WriteDiagram(this.output, nfa); }
public void CreateCodepointDiagram(string regex, bool caseSensitive) { var expression = RegexParser.Parse(regex, 0, false); var mapper = new UnicodeCodepointMapper(false, false); var rxCodepoint = expression.ToInvariant(mapper, new UnicodeCharSetProvider(), caseSensitive); var nfa = NfaBuilder <Codepoint> .Build(rxCodepoint.Optimize()); var dfa = DfaBuilder <Codepoint> .Build(nfa, Codepoints.EOF); NfaFactoryTest.WriteDiagram(this.output, nfa); WriteDiagram(this.output, dfa); }
public void Actions() { var symbolA = 1; var regexA = "a"; var r1 = RegexParser.Parse(regexA, symbolA); var symbolB = 2; var regexB = "b"; var r2 = RegexParser.Parse(regexB, symbolB); RegexExpression r = new RegexAlternation(r1, r2); var mapper = new UnicodeCodepointMapper(false, false); var rxCodepoint = r.ToInvariant(mapper, new UnicodeCharSetProvider(), true); var nfa = NfaBuilder <Codepoint> .Build(rxCodepoint.Optimize()); NfaFactoryTest.WriteDiagram(this.output, nfa); var dfa = DfaBuilder <Codepoint> .Build(nfa, Codepoints.EOF); WriteDiagram(this.output, dfa); var state = dfa.StartState; foreach (var codepoint in regexA.ToCodepoints().Append(Codepoints.EOF)) { var nextStateId = state.GetTransition(codepoint); Assert.NotEqual(Dfa <Codepoint> .Reject, nextStateId); if (nextStateId == Dfa <Codepoint> .Accept) { Assert.Equal(dfa.SymbolStates[state.Id], symbolA); break; } state = dfa.GetState(nextStateId); Assert.NotNull(state); } state = dfa.StartState; foreach (var codepoint in regexB.ToCodepoints().Append(Codepoints.EOF)) { var nextStateId = state.GetTransition(codepoint); Assert.NotEqual(Dfa <Codepoint> .Reject, nextStateId); if (nextStateId == Dfa <Codepoint> .Accept) { Assert.Equal(dfa.SymbolStates[state.Id], symbolB); break; } state = dfa.GetState(nextStateId); Assert.NotNull(state); } }