public void RegexToDfaShouldConvertCharacterRegexToDfa() { var pattern = "a"; var regex = new RegexParser().Parse(pattern); var nfa = new ThompsonConstructionAlgorithm().Transform(regex); var dfa = new SubsetConstructionAlgorithm().Transform(nfa); Assert.IsNotNull(dfa); var lexerRule = new DfaLexerRule(dfa, "a"); var lexeme = new DfaLexemeFactory().Create(lexerRule); Assert.IsTrue(lexeme.Scan('a')); }
public void RegexToDfaShouldConvertOptionalCharacterClassToDfa() { var pattern = @"[-+]?[0-9]"; var regex = new RegexParser().Parse(pattern); var nfa = new ThompsonConstructionAlgorithm().Transform(regex); var dfa = new SubsetConstructionAlgorithm().Transform(nfa); Assert.IsNotNull(dfa); Assert.AreEqual(3, dfa.Transitions.Count); var lexerRule = new DfaLexerRule(dfa, pattern); AssertLexerRuleMatches(lexerRule, "+0"); AssertLexerRuleMatches(lexerRule, "-1"); AssertLexerRuleMatches(lexerRule, "9"); }
public EbnfGrammarGenerator() { _thompsonConstructionAlgorithm = new ThompsonConstructionAlgorithm(); _subsetConstructionAlgorithm = new SubsetConstructionAlgorithm(); }