Beispiel #1
0
        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'));
        }
Beispiel #2
0
 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();
 }