Exemplo n.º 1
0
 def _test_search2(self):
     
     re = "/a+b*c+d/\n/abc/"
         
     delay_dfa = DELAY_DFA()
 
     parser = pcre_parser()
     parser.set_text(re)
     delay_dfa.create_by_parser(parser)
 
     delay_dfa.compute()
     self.assertTrue(delay_dfa.get_compute())
 
     aut = b_dfa()
 
     parser = pcre_parser()
     parser.set_text(re)
     aut.create_by_parser(parser)
     aut.compute()
 
     self.assertEqual(delay_dfa.search("abcd"), aut.search("abcd"))
     self.assertEqual(delay_dfa.search("abcd abc"), aut.search("abcd abc"))
     self.assertEqual(delay_dfa.search("abc"), aut.search("abc"))
     self.assertEqual(delay_dfa.search("acd"), aut.search("acd"))
     self.assertEqual(delay_dfa.search("abd"), aut.search("abd"))
Exemplo n.º 2
0
    def _test_compute1(self):

        delay_dfa = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text("/^abcd/")
        delay_dfa.create_by_parser(parser)

        delay_dfa.compute()
        self.assertTrue(delay_dfa.get_compute())

        dfa = b_dfa()
        dfa.create_by_parser(parser)
        dfa.compute()

        a = delay_dfa.get_automaton()
        b = dfa.get_automaton()

        l = len(b.alphabet.keys())
        b.add_symbols(DEF_SYMBOLS("default", l))

        self.assertEqual(a.states.keys(), b.states.keys())
        self.assertEqual(a.start, b.start)
        self.assertEqual(a.final, b.final)
        self.assertEqual(a.alphabet, b.alphabet)
        self.assertEqual(a.transitions, b.transitions)
        self.assertTrue(a.Flags["Delay DFA"])
Exemplo n.º 3
0
    def _test_compute2(self):

        delay_dfa = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text("/^(a|b)+/")
        delay_dfa.create_by_parser(parser)

        delay_dfa.compute()
        self.assertTrue(delay_dfa.get_compute())

        a = delay_dfa.get_automaton()
        b = nfa_data()

        b.add_symbols(b_Sym_char("a", "a", 0))
        b.add_symbols(b_Sym_char("b", "b", 1))
        b.add_symbols(DEF_SYMBOLS("default", 2))

        b.add_states(b_State(0, set()))
        b.add_states(b_State(1, set([0])))
        b.start = 0
        b.final = set([1])

        b.add_transitions((0, 0, 1))
        b.add_transitions((0, 1, 1))
        b.add_transitions((1, 2, 0))

        self.assertEqual(a.states.keys(), b.states.keys())
        self.assertEqual(a.start, b.start)
        self.assertEqual(a.final, b.final)
        self.assertEqual(a.alphabet, b.alphabet)
        self.assertEqual(a.transitions, b.transitions)
        self.assertTrue(a.Flags["Delay DFA"])
Exemplo n.º 4
0
    def _test_compute3(self):
        # Get test directory
        tdir = aux_func.getPatternMatchDir() + "/algorithms/delay_dfa/"

        delay_dfa = DELAY_DFA()

        nfaData = nfa_data().load_from_file(tdir +
                                            "test_data/text_ddfa.nfa_data")

        delay_dfa.create_from_nfa_data(nfaData)
        delay_dfa.determinise()
        delay_dfa.compute(False)
        self.assertTrue(delay_dfa.get_compute())

        a = delay_dfa.get_automaton()
        b = nfa_data()

        b.add_symbols(b_Sym_char("a", "a", 0))
        b.add_symbols(b_Sym_char("b", "b", 1))
        b.add_symbols(b_Sym_char("c", "c", 2))
        b.add_symbols(b_Sym_char("d", "d", 3))
        b.add_symbols(DEF_SYMBOLS("default", 4))

        b.add_states(b_State(0, set()))
        b.add_states(b_State(1, set([0])))
        b.add_states(b_State(2, set()))
        b.add_states(b_State(3, set([0])))
        b.add_states(b_State(4, set([0])))
        b.start = 0
        b.final = set([1, 3, 4])

        b.add_transitions((0, 2, 0))
        b.add_transitions((0, 0, 1))
        b.add_transitions((0, 1, 2))
        b.add_transitions((0, 3, 3))
        b.add_transitions((1, 4, 0))
        b.add_transitions((2, 2, 4))
        b.add_transitions((2, 4, 0))
        b.add_transitions((3, 4, 0))
        b.add_transitions((4, 4, 0))

        self.assertEqual(a.states.keys(), b.states.keys())
        self.assertEqual(a.start, b.start)
        self.assertEqual(a.final, b.final)
        self.assertEqual(a.alphabet, b.alphabet)
        self.assertEqual(a.transitions, b.transitions)
        self.assertTrue(a.Flags["Delay DFA"])
Exemplo n.º 5
0
 def _test_compute2(self):
     
     delay_dfa = DELAY_DFA()
     
     parser = pcre_parser()
     parser.set_text("/^(a|b)+/")
     delay_dfa.create_by_parser(parser)
     
     delay_dfa.compute()
     self.assertTrue(delay_dfa.get_compute())
     
     a = delay_dfa.get_automaton()
     b = nfa_data()
     
     b.add_symbols(b_Sym_char("a","a",0))
     b.add_symbols(b_Sym_char("b","b",1))
     b.add_symbols(DEF_SYMBOLS("default", 2))
     
     b.add_states(b_State(0,set()))
     b.add_states(b_State(1,set([0])))
     b.start = 0
     b.final = set([1])
     
     b.add_transitions( (0,0,1) )
     b.add_transitions( (0,1,1) )
     b.add_transitions( (1,2,0) )
     
     self.assertEqual(a.states.keys(), b.states.keys())
     self.assertEqual(a.start, b.start)
     self.assertEqual(a.final, b.final)
     self.assertEqual(a.alphabet, b.alphabet)
     self.assertEqual(a.transitions, b.transitions)
     self.assertTrue(a.Flags["Delay DFA"])
Exemplo n.º 6
0
 def _test_compute1(self):
     
     delay_dfa = DELAY_DFA()
     
     parser = pcre_parser()
     parser.set_text("/^abcd/")
     delay_dfa.create_by_parser(parser)
     
     delay_dfa.compute()
     self.assertTrue(delay_dfa.get_compute())
     
     dfa = b_dfa()
     dfa.create_by_parser(parser)
     dfa.compute()
     
     a = delay_dfa.get_automaton()
     b = dfa.get_automaton()
     
     l = len(b.alphabet.keys())
     b.add_symbols(DEF_SYMBOLS("default", l))
     
     self.assertEqual(a.states.keys(), b.states.keys())
     self.assertEqual(a.start, b.start)
     self.assertEqual(a.final, b.final)
     self.assertEqual(a.alphabet, b.alphabet)
     self.assertEqual(a.transitions, b.transitions)
     self.assertTrue(a.Flags["Delay DFA"])
Exemplo n.º 7
0
def get_ddfa(ruleset):
    """
        Generate number of states, transitions and consumed memory for DDFA.
    """
    # Create parser - use default parser
    po = parser.parser()
    # Parse input file
    po.load_file(ruleset)
    # Create Delay  DFA object
    DelayDfa = DELAY_DFA()
    # Make automaton from RE which was in input file
    DelayDfa.create_by_parser(po)
    # Make Delay DFA
    # Resolve alphabet
    DelayDfa.resolve_alphabet()
    # Create Delay DFA
    DelayDfa.compute()
    # Return experimental results
    return ["Delay DFA", DelayDfa.get_state_num(), DelayDfa.get_trans_num(), DelayDfa.report_memory_optimal(), DelayDfa.report_memory_naive()]
Exemplo n.º 8
0
 def _test_compute3(self):
     # Get test directory 
     tdir = aux_func.getPatternMatchDir() + "/algorithms/delay_dfa/"
     
     delay_dfa = DELAY_DFA()
     
     nfaData = nfa_data().load_from_file(tdir + "test_data/text_ddfa.nfa_data")
     
     delay_dfa.create_from_nfa_data(nfaData)
     delay_dfa.determinise()
     delay_dfa.compute(False)
     self.assertTrue(delay_dfa.get_compute())
     
     a = delay_dfa.get_automaton()
     b = nfa_data()
     
     b.add_symbols(b_Sym_char("a","a",0))
     b.add_symbols(b_Sym_char("b","b",1))
     b.add_symbols(b_Sym_char("c","c",2))
     b.add_symbols(b_Sym_char("d","d",3))
     b.add_symbols(DEF_SYMBOLS("default", 4))
     
     b.add_states(b_State(0,set()))
     b.add_states(b_State(1,set([0])))
     b.add_states(b_State(2,set()))
     b.add_states(b_State(3,set([0])))
     b.add_states(b_State(4,set([0])))
     b.start = 0
     b.final = set([1,3,4])
     
     b.add_transitions( (0,2,0) )
     b.add_transitions( (0,0,1) )
     b.add_transitions( (0,1,2) )
     b.add_transitions( (0,3,3) )
     b.add_transitions( (1,4,0) )
     b.add_transitions( (2,2,4) )
     b.add_transitions( (2,4,0) )
     b.add_transitions( (3,4,0) )
     b.add_transitions( (4,4,0) )
     
     self.assertEqual(a.states.keys(), b.states.keys())
     self.assertEqual(a.start, b.start)
     self.assertEqual(a.final, b.final)
     self.assertEqual(a.alphabet, b.alphabet)
     self.assertEqual(a.transitions, b.transitions)
     self.assertTrue(a.Flags["Delay DFA"])
Exemplo n.º 9
0
    def _test_search1(self):

        re = "/a+b*c.*a|bc+/"

        delay_dfa = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text(re)
        delay_dfa.create_by_parser(parser)

        delay_dfa.compute()
        self.assertTrue(delay_dfa.get_compute())

        aut = b_dfa()

        parser = pcre_parser()
        parser.set_text(re)
        aut.create_by_parser(parser)

        self.assertEqual(delay_dfa.search("ac123ac"), aut.search("ac123ac"))
        self.assertEqual(delay_dfa.search("aacac"), aut.search("aacac"))
        self.assertEqual(delay_dfa.search("abbb"), aut.search("abbb"))
Exemplo n.º 10
0
 def _test_search1(self):
     
     re = "/a+b*c.*a|bc+/"
         
     delay_dfa = DELAY_DFA()
 
     parser = pcre_parser()
     parser.set_text(re)
     delay_dfa.create_by_parser(parser)
 
     delay_dfa.compute()
     self.assertTrue(delay_dfa.get_compute())
 
     aut = b_dfa()
 
     parser = pcre_parser()
     parser.set_text(re)
     aut.create_by_parser(parser)
 
     self.assertEqual(delay_dfa.search("ac123ac"), aut.search("ac123ac"))
     self.assertEqual(delay_dfa.search("aacac"), aut.search("aacac"))
     self.assertEqual(delay_dfa.search("abbb"), aut.search("abbb"))
Exemplo n.º 11
0
def get_ddfa(ruleset):
    """
        Generate number of states, transitions and consumed memory for DDFA.
    """
    # Create parser - use default parser
    po = parser.parser()
    # Parse input file
    po.load_file(ruleset)
    # Create Delay  DFA object
    DelayDfa = DELAY_DFA()
    # Make automaton from RE which was in input file
    DelayDfa.create_by_parser(po)
    # Make Delay DFA
    # Resolve alphabet
    DelayDfa.resolve_alphabet()
    # Create Delay DFA
    DelayDfa.compute()
    # Return experimental results
    return [
        "Delay DFA",
        DelayDfa.get_state_num(),
        DelayDfa.get_trans_num(),
        DelayDfa.report_memory_optimal(),
        DelayDfa.report_memory_naive()
    ]
Exemplo n.º 12
0
 def test_get_default_trans_num(self):
     """get_default_trans_num"""
     
     #Tests with regular expressions from test_compute
     
     delay_dfa1 = DELAY_DFA()
     
     parser = pcre_parser()
     parser.set_text("/^abcd/")
     delay_dfa1.create_by_parser(parser)
     
     delay_dfa1.compute()
     self.assertTrue(delay_dfa1.get_compute())
     
     delay_dfa2 = DELAY_DFA()
     
     parser = pcre_parser()
     parser.set_text("/^(a|b)+/")
     delay_dfa2.create_by_parser(parser)
     
     delay_dfa2.compute()
     self.assertTrue(delay_dfa2.get_compute())
     
     delay_dfa3 = DELAY_DFA()
     
     # Get test directory 
     tdir = aux_func.getPatternMatchDir() + "/algorithms/delay_dfa/"
     
     nfaData = nfa_data().load_from_file(tdir + "test_data/text_ddfa.nfa_data")
     
     delay_dfa3.create_from_nfa_data(nfaData)
     delay_dfa3.determinise()
     delay_dfa3.compute(False)
     self.assertTrue(delay_dfa3.get_compute())
     
     self.assertEqual(delay_dfa1.get_default_trans_num(),0)
     self.assertEqual(delay_dfa2.get_default_trans_num(),1)
     self.assertEqual(delay_dfa3.get_default_trans_num(),4)
Exemplo n.º 13
0
 def test_set_bound(self):
     """set_bound()"""
     
     #Tests manual control of the number of consecutive default 
     #transitions in larger automaton
     
     re = "/a+b*c+/\n/b+c*d+/\n/c+d*e/"
         
     delay_dfa = DELAY_DFA()
 
     parser = pcre_parser()
     parser.set_text(re)
     delay_dfa.create_by_parser(parser)
 
     delay_dfa.set_bound(0)
     delay_dfa.compute()
     self.assertTrue(delay_dfa.get_compute())
     
     a = delay_dfa.get_automaton()
     lenght1 = self._get_length_default_path(a)
     
     delay_dfa = DELAY_DFA()
 
     parser = pcre_parser()
     parser.set_text(re)
     delay_dfa.create_by_parser(parser)
 
     delay_dfa.set_bound(1)
     delay_dfa.compute()
     self.assertTrue(delay_dfa.get_compute())
     
     a = delay_dfa.get_automaton()
     lenght2 = self._get_length_default_path(a)
     
     delay_dfa = DELAY_DFA()
 
     parser = pcre_parser()
     parser.set_text(re)
     delay_dfa.create_by_parser(parser)
 
     delay_dfa.set_bound(2)
     delay_dfa.compute()
     self.assertTrue(delay_dfa.get_compute())
     
     a = delay_dfa.get_automaton()
     lenght3 = self._get_length_default_path(a)
     
     delay_dfa = DELAY_DFA()
 
     parser = pcre_parser()
     parser.set_text(re)
     delay_dfa.create_by_parser(parser)
 
     delay_dfa.set_bound(3)
     delay_dfa.compute()
     self.assertTrue(delay_dfa.get_compute())
     
     a = delay_dfa.get_automaton()
     lenght4 = self._get_length_default_path(a)
     
     self.assertEqual(lenght1, 3)
     self.assertEqual(lenght2, 1)
     self.assertEqual(lenght3, 2)
     self.assertEqual(lenght4, 3)
Exemplo n.º 14
0
 def _test_search3(self):
     
     re = "/a+b*c+/\n/b+c*d+/\n/c+d*e/"
         
     delay_dfa = DELAY_DFA()
 
     parser = pcre_parser()
     parser.set_text(re)
     delay_dfa.create_by_parser(parser)
 
     delay_dfa.compute()
     self.assertTrue(delay_dfa.get_compute())
 
     aut = b_dfa()
 
     parser = pcre_parser()
     parser.set_text(re)
     aut.create_by_parser(parser)
     aut.compute()
 
     self.assertEqual(delay_dfa.search("abcd"), aut.search("abcd"))
     self.assertEqual(delay_dfa.search("abcd abc"), aut.search("abcd abc"))
     self.assertEqual(delay_dfa.search("gabc"), aut.search("gabc"))
     self.assertEqual(delay_dfa.search("ac bd ce"), aut.search("ac bd ce"))
     self.assertEqual(delay_dfa.search("ab123a bcd cde"), aut.search("ab123a bcd cde"))
     self.assertEqual(delay_dfa.search("bce"), aut.search("bce"))
     self.assertEqual(delay_dfa.search("abe"), aut.search("abe"))
Exemplo n.º 15
0
    def _test_search2(self):

        re = "/a+b*c+d/\n/abc/"

        delay_dfa = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text(re)
        delay_dfa.create_by_parser(parser)

        delay_dfa.compute()
        self.assertTrue(delay_dfa.get_compute())

        aut = b_dfa()

        parser = pcre_parser()
        parser.set_text(re)
        aut.create_by_parser(parser)
        aut.compute()

        self.assertEqual(delay_dfa.search("abcd"), aut.search("abcd"))
        self.assertEqual(delay_dfa.search("abcd abc"), aut.search("abcd abc"))
        self.assertEqual(delay_dfa.search("abc"), aut.search("abc"))
        self.assertEqual(delay_dfa.search("acd"), aut.search("acd"))
        self.assertEqual(delay_dfa.search("abd"), aut.search("abd"))
Exemplo n.º 16
0
    def _test_search3(self):

        re = "/a+b*c+/\n/b+c*d+/\n/c+d*e/"

        delay_dfa = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text(re)
        delay_dfa.create_by_parser(parser)

        delay_dfa.compute()
        self.assertTrue(delay_dfa.get_compute())

        aut = b_dfa()

        parser = pcre_parser()
        parser.set_text(re)
        aut.create_by_parser(parser)
        aut.compute()

        self.assertEqual(delay_dfa.search("abcd"), aut.search("abcd"))
        self.assertEqual(delay_dfa.search("abcd abc"), aut.search("abcd abc"))
        self.assertEqual(delay_dfa.search("gabc"), aut.search("gabc"))
        self.assertEqual(delay_dfa.search("ac bd ce"), aut.search("ac bd ce"))
        self.assertEqual(delay_dfa.search("ab123a bcd cde"),
                         aut.search("ab123a bcd cde"))
        self.assertEqual(delay_dfa.search("bce"), aut.search("bce"))
        self.assertEqual(delay_dfa.search("abe"), aut.search("abe"))
Exemplo n.º 17
0
    def test_set_bound(self):
        """set_bound()"""

        #Tests manual control of the number of consecutive default
        #transitions in larger automaton

        re = "/a+b*c+/\n/b+c*d+/\n/c+d*e/"

        delay_dfa = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text(re)
        delay_dfa.create_by_parser(parser)

        delay_dfa.set_bound(0)
        delay_dfa.compute()
        self.assertTrue(delay_dfa.get_compute())

        a = delay_dfa.get_automaton()
        lenght1 = self._get_length_default_path(a)

        delay_dfa = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text(re)
        delay_dfa.create_by_parser(parser)

        delay_dfa.set_bound(1)
        delay_dfa.compute()
        self.assertTrue(delay_dfa.get_compute())

        a = delay_dfa.get_automaton()
        lenght2 = self._get_length_default_path(a)

        delay_dfa = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text(re)
        delay_dfa.create_by_parser(parser)

        delay_dfa.set_bound(2)
        delay_dfa.compute()
        self.assertTrue(delay_dfa.get_compute())

        a = delay_dfa.get_automaton()
        lenght3 = self._get_length_default_path(a)

        delay_dfa = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text(re)
        delay_dfa.create_by_parser(parser)

        delay_dfa.set_bound(3)
        delay_dfa.compute()
        self.assertTrue(delay_dfa.get_compute())

        a = delay_dfa.get_automaton()
        lenght4 = self._get_length_default_path(a)

        self.assertEqual(lenght1, 3)
        self.assertEqual(lenght2, 1)
        self.assertEqual(lenght3, 2)
        self.assertEqual(lenght4, 3)
Exemplo n.º 18
0
    def test_get_default_trans_num(self):
        """get_default_trans_num"""

        #Tests with regular expressions from test_compute

        delay_dfa1 = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text("/^abcd/")
        delay_dfa1.create_by_parser(parser)

        delay_dfa1.compute()
        self.assertTrue(delay_dfa1.get_compute())

        delay_dfa2 = DELAY_DFA()

        parser = pcre_parser()
        parser.set_text("/^(a|b)+/")
        delay_dfa2.create_by_parser(parser)

        delay_dfa2.compute()
        self.assertTrue(delay_dfa2.get_compute())

        delay_dfa3 = DELAY_DFA()

        # Get test directory
        tdir = aux_func.getPatternMatchDir() + "/algorithms/delay_dfa/"

        nfaData = nfa_data().load_from_file(tdir +
                                            "test_data/text_ddfa.nfa_data")

        delay_dfa3.create_from_nfa_data(nfaData)
        delay_dfa3.determinise()
        delay_dfa3.compute(False)
        self.assertTrue(delay_dfa3.get_compute())

        self.assertEqual(delay_dfa1.get_default_trans_num(), 0)
        self.assertEqual(delay_dfa2.get_default_trans_num(), 1)
        self.assertEqual(delay_dfa3.get_default_trans_num(), 4)