Ejemplo n.º 1
0
        private static IDfaState CreateDfaFromRegexPattern(string pattern)
        {
            var regex = new RegexParser().Parse(pattern);
            var nfa   = new ThompsonConstructionAlgorithm().Transform(regex);
            var dfa   = new SubsetConstructionAlgorithm().Transform(nfa);

            return(dfa);
        }
Ejemplo n.º 2
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, 0);

            Assert.IsTrue(lexeme.Scan('a'));
        }
Ejemplo n.º 3
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");
        }
Ejemplo n.º 4
0
 public EbnfGrammarGenerator()
 {
     _thompsonConstructionAlgorithm = new ThompsonConstructionAlgorithm();
     _subsetConstructionAlgorithm   = new SubsetConstructionAlgorithm();
 }