Beispiel #1
0
 def test_intersect(self):
     cfg = CFG([Variable("S"), Variable("A")],
               [Terminal("a"), Terminal("b")], [
                   CFGRule(Variable("S"),
                           [Variable("A"), Variable("A")]),
                   CFGRule(Variable("S"), [Terminal("a")]),
                   CFGRule(Variable("A"), [Terminal("b")])
               ], Variable("S"))
     regex = RegexTree(Node("a"))
     fsm = regex.to_fsm()
     fsm.close()
     cfg_temp = cfg.intersect(fsm)
     self.assertFalse(cfg_temp.is_empty())
     regex = RegexTree(Node("b"))
     fsm = regex.to_fsm()
     fsm.close()
     cfg_temp = cfg.intersect(fsm)
     self.assertFalse(cfg_temp.is_empty())
     regex = RegexTree(Node("b,b"))
     fsm = regex.to_fsm()
     fsm.close()
     cfg_temp = cfg.intersect(fsm)
     self.assertFalse(cfg_temp.is_empty())
     regex = RegexTree(Node("b,a"))
     fsm = regex.to_fsm()
     fsm.close()
     cfg_temp = cfg.intersect(fsm)
     self.assertTrue(cfg_temp.is_empty())
Beispiel #2
0
 def test_paper(self):
     cfg = CFG([Variable("S"), Variable("C")], [
         Terminal("a"),
         Terminal("b"),
         Terminal("c"),
         Terminal("q"),
         Terminal("am"),
         Terminal("bm"),
         Terminal("cm"),
         Terminal("qm")
     ], [
         CFGRule(
             Variable("S"),
             [Variable("C"), Terminal("q"),
              Variable("C")]),
         CFGRule(
             Variable("C"),
             [Terminal("a"), Variable("C"),
              Terminal("am")]),
         CFGRule(
             Variable("C"),
             [Terminal("b"), Variable("C"),
              Terminal("bm")]),
         CFGRule(
             Variable("C"),
             [Terminal("c"), Variable("C"),
              Terminal("cm")]),
         CFGRule(
             Variable("C"),
             [Terminal("q"), Variable("C"),
              Terminal("qm")]),
         CFGRule(Variable("C"),
                 [Variable("C"), Variable("C")]),
         CFGRule(Variable("C"), [])
     ], Variable("S"))
     regex = RegexTree(Node("(a,b)|(bm,c)|(cm,am,q)"))
     fsm = regex.to_fsm()
     fsm.close()
     cfg_temp = cfg.intersect(fsm)
     self.assertFalse(cfg_temp.is_empty())
     regex = RegexTree(Node("(a,b)|(b,c)|(cm,am,q)"))
     fsm = regex.to_fsm()
     fsm.close()
     cfg_temp = cfg.intersect(fsm)
     self.assertTrue(cfg_temp.is_empty())