Example #1
0
    def test_shouldAddIntoGrammar(self):
        class Tmp1(_R):
            rule = ([NFirst], ['a', 0])

        g = Grammar(terminals=['a', 0], nonterminals=[NFirst], rules=[Tmp1])
        g.add_rule(Tmp1)
        self.assertEqual(g.get_rule(Tmp1), Tmp1)
Example #2
0
 def setUp(self):
     self.g = Grammar(
         terminals=[
             0, 1, 2, 'a', 'b', 'c', TFirst, TSecond, TThird, TInstFirst,
             TInstSecond, TInstThird
         ],
         nonterminals=[NFirst, NSecond, NThird, NFourth, NFifth])
Example #3
0
 def test_getTermTuple(self):
     gr = Grammar()
     gr.add_term([TempClass, 0, 'asdf'])
     g = gr.get_term((0, 'asdf'))
     for i in g:
         self.assertTrue(i.s in [TempClass, 0, 'asdf'])
     self.assertEqual(g[0].s, 0)
     self.assertEqual(g[1].s, 'asdf')
Example #4
0
 def test_oldStartSymbolShouldStaySame(self):
     g = Grammar(nonterminals=[A, B], start_symbol=A)
     self.assertTrue(g.start_isSet())
     with self.assertRaises(NotNonterminalException):
         g.start_set('asdf')
     self.assertTrue(g.start_isSet())
     self.assertTrue(g.start_is(A))
     self.assertEqual(g.start_get(), A)
Example #5
0
 def test_equalGetTermAndTermMethods(self):
     gr = Grammar()
     ins = TempClass()
     gr.add_term(ins)
     self.assertEqual(gr.terms_count(), 1)
     self.assertEqual(gr.get_term(ins).s, ins)
     self.assertEqual(gr.term(ins).s, ins)
     self.assertEqual(gr.term(ins).s, gr.get_term(ins).s)
Example #6
0
    def test_shouldProcessInConstructor(self):
        class Tmp1(Rule):
            rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]),
                     ([NSecond], [NSecond, 'a'])]

        self.g = Grammar(
            terminals=[
                0, 1, 2, 'a', 'b', 'c', TFirst, TSecond, TThird, TInstFirst,
                TInstSecond, TInstThird
            ],
            nonterminals=[NFirst, NSecond, NThird, NFourth, NFifth],
            rules=[Tmp1])
        r = self.g.get_rule(Tmp1)
        self.assertIsInstance(r, list)
        self.assertEqual(len(r), 3)
        for rule in r:
            self.assertIn(rule.rule, Tmp1.rules)
 def test_shouldNotSetStartSymbol(self):
     g = Grammar(nonterminals=[A])
     self.assertFalse(g.start_isSet())
     with self.assertRaises(NonterminalDoesNotExistsException):
         g.start_set(B)
     self.assertFalse(g.start_isSet())
     self.assertFalse(g.start_is(B))
Example #8
0
 def test_shouldNotSetStartSymbol(self):
     g = Grammar(nonterminals=[A, B])
     self.assertFalse(g.start_isSet())
     with self.assertRaises(NotNonterminalException):
         g.start_set('asdf')
     self.assertFalse(g.start_isSet())
     self.assertFalse(g.start_is('asdf'))
Example #9
0
 def test_addThreeInString(self):
     gr = Grammar(terminals='ABC')
     self.assertTrue(gr.have_term('A'))
     self.assertTrue(gr.have_term('B'))
     self.assertTrue(gr.have_term('C'))
     self.assertTrue(gr.have_term(('A', 'B', 'C')))
     self.assertFalse(gr.have_term('D'))
Example #10
0
class IterationTest(TestCase):
    def __init__(self, *args):
        super().__init__(*args)
        self.g = Grammar()

    def setUp(self):
        g = Grammar()
        g.add_term([0, 1, 2, 'a', 'b', 'c'])
        g.add_nonterm([NFirst, NSecond, NThird, NFourth])
        self.g = g

    def test_oneRule(self):
        class Tmp(_R):
            rule = ([NFirst], ['a', 0])

        self.g.add_rule(Tmp)
        r = self.g.rules()
        self.assertEqual(len(r), 1)
        self.assertEqual(r[0], Tmp)

    def test_multipleRules(self):
        class Tmp1(_R):
            rule = ([NFirst], ['a', 0])

        class Tmp2(_R):
            rule = ([NSecond], ['a', 0, NFourth])

        class Tmp3(_R):
            rule = ([NThird], [0])

        self.g.add_rule([Tmp1, Tmp2, Tmp3])
        r = self.g.rules()
        self.assertEqual(len(r), 3)
        for i in [Tmp1, Tmp2, Tmp3]:
            self.assertIn(i, r)
Example #11
0
 def test_addThreeInTuple(self):
     gr = Grammar(terminals=('A', 'B', 'C'))
     self.assertTrue(gr.have_term('A'))
     self.assertTrue(gr.have_term('B'))
     self.assertTrue(gr.have_term('C'))
     self.assertTrue(gr.have_term(['A', 'B', 'C']))
     self.assertFalse(gr.have_term('D'))
Example #12
0
 def setUp(self):
     g = Grammar()
     g.add_term([0, 1, 2, 'a', 'b', 'c'])
     g.add_nonterm([NFirst, NSecond, NThird, NFourth])
     self.g = g
Example #13
0
class RulesTest(TestCase):
    def setUp(self):
        self.g = Grammar(
            terminals=[
                0, 1, 2, 'a', 'b', 'c', TFirst, TSecond, TThird, TInstFirst,
                TInstSecond, TInstThird
            ],
            nonterminals=[NFirst, NSecond, NThird, NFourth, NFifth])

    def test_oneInRules(self):
        class Tmp1(Rule):
            rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]),
                     ([NSecond], [NSecond, 'a'])]

        self.assertEqual([x.rule for x in self.g.add_rule(Tmp1)], Tmp1.rules)
        self.assertEqual(self.g.rules_count(), 3)
        self.assertTrue(self.g.have_rule(Tmp1))

    def test_oneInRulesIteration(self):
        class Tmp1(Rule):
            rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]),
                     ([NSecond], [NSecond, 'a'])]

        self.assertEqual([x.rule for x in self.g.add_rule(Tmp1)], Tmp1.rules)
        for rule in self.g.rule():
            self.assertIn(rule.rule, Tmp1.rules)

    def test_hashes(self):
        class Tmp1(Rule):
            rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]),
                     ([NSecond], [NSecond, 'a'])]

        class Tmp2(Rule):
            rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]),
                     ([NSecond], [NSecond, 'a'])]

        hash1 = hash(Tmp1)
        hash2 = hash(Tmp2)
        self.assertEqual(Tmp1, Tmp2)
        self.assertEqual(hash1, hash2)

    def test_haveMultiple(self):
        class Tmp1(Rule):
            rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]),
                     ([NSecond], [NSecond, 'a'])]

        class Tmp2(Rule):
            rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]),
                     ([NSecond], [NSecond, 'a'])]

        class Tmp3(Rule):
            rules = [([NFirst], [NSecond, 0])]

        class Tmp4(Rule):
            rules = [([NThird], [0, 1])]

        class Tmp5(Rule):
            rule = ([NFifth], [EPS])

        self.assertEqual([x.rule for x in self.g.add_rule(Tmp1)], Tmp1.rules)
        self.assertTrue(self.g.have_rule(Tmp2))
        self.assertTrue(self.g.have_rule(Tmp3))
        self.assertTrue(self.g.have_rule([Tmp3, Tmp4]))
        self.assertFalse(self.g.have_rule([Tmp3, Tmp5]))

    def test_shouldReturnArray(self):
        class Tmp1(Rule):
            rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]),
                     ([NSecond], [NSecond, 'a'])]

        self.assertEqual([x.rule for x in self.g.add_rule(Tmp1)], Tmp1.rules)
        r = self.g.get_rule(Tmp1)
        self.assertIsInstance(r, list)
        self.assertEqual(len(r), 3)
        for rule in r:
            self.assertIn(rule.rule, Tmp1.rules)

    def test_shouldProcessInConstructor(self):
        class Tmp1(Rule):
            rules = [([NFirst], [NSecond, 0]), ([NThird], [0, 1]),
                     ([NSecond], [NSecond, 'a'])]

        self.g = Grammar(
            terminals=[
                0, 1, 2, 'a', 'b', 'c', TFirst, TSecond, TThird, TInstFirst,
                TInstSecond, TInstThird
            ],
            nonterminals=[NFirst, NSecond, NThird, NFourth, NFifth],
            rules=[Tmp1])
        r = self.g.get_rule(Tmp1)
        self.assertIsInstance(r, list)
        self.assertEqual(len(r), 3)
        for rule in r:
            self.assertIn(rule.rule, Tmp1.rules)

    def test_unidefinedRules(self):
        class Tmp1(Rule):
            pass

        class Tmp2(Rule):
            pass

        h1 = hash(Tmp1)
        h2 = hash(Tmp2)
        self.assertNotEqual(h1, h2)
        self.assertNotEqual(Tmp1, Tmp2)
        Tmp1.rule = ([0], [0])
        Tmp2.rule = ([0], [0])
        h1 = hash(Tmp1)
        h2 = hash(Tmp2)
        self.assertEqual(h1, h2)
        self.assertEqual(Tmp1, Tmp2)
Example #14
0
 def test_ThreeTerminalGetTerm(self):
     gr = Grammar()
     gr.add_term([0, 'a', TempClass])
     s = set(term.s for term in gr.get_term())
     for i in [0, 'a', TempClass]:
         self.assertIn(i, s)
Example #15
0
 def test_ThreeTerminalTerms(self):
     gr = Grammar()
     gr.add_term([0, 'a', TempClass])
     s = set(term.s for term in gr.terms())
     for i in [0, 'a', TempClass]:
         self.assertTrue(i in s)
Example #16
0
 def test_oneTerminalGetTerm(self):
     gr = Grammar()
     gr.add_term('a')
     for i in gr.get_term():
         self.assertEqual(i.s, 'a')
Example #17
0
 def test_shouldAddMoreNonterminals(self):
     g = Grammar(nonterminals=[A, B, C])
     self.assertTrue(g.have_nonterm(A))
     self.assertTrue(g.have_nonterm([A, B, C]))
     self.assertFalse(g.have_nonterm(D))
Example #18
0
 def test_dontHaveNontermTuple(self):
     gr = Grammar()
     gr.add_term([TempClass, Second])
     self.assertFalse(gr.have_term((TempClass, Third)))
Example #19
0
 def test_haveNontermArray(self):
     gr = Grammar()
     gr.add_term([TempClass, Second, Third])
     self.assertTrue(gr.have_term([Second, TempClass]))
Example #20
0
 def test_haveNontermEmpty(self):
     gr = Grammar()
     self.assertFalse(gr.have_nonterm(TempClass))
     self.assertFalse(gr.have_nonterm(Second))
Example #21
0
 def __init__(self, *args):
     super().__init__(*args)
     self.g = Grammar()
Example #22
0
 def test_removeEmptyGrammar(self):
     gr = Grammar()
     self.assertEqual(gr.terms_count(), 0)
     gr.remove_term()
     self.assertEqual(gr.terms_count(), 0)
Example #23
0
 def test_haveNontermClass(self):
     gr = Grammar()
     gr.add_nonterm(TempClass)
     self.assertTrue(gr.have_nonterm(TempClass))
 def test_add_remove_add_one(self):
     gr = Grammar()
     self.assertEqual(gr.terms_count(), 0)
     self.assertFalse(gr.have_term(0))
     self.assertIsNone(gr.get_term(0))
     self.assertIsNone(gr.term(0))
     self.assertEqual(gr.add_term(0)[0].s, 0)
     self.assertEqual(gr.terms_count(), 1)
     self.assertIsNotNone(gr.get_term(0))
     self.assertIsNotNone(gr.term(0))
     self.assertTrue(isinstance(gr.term(0), Terminal))
     self.assertEqual(gr.term(0).symbol(), 0)
     self.assertEqual(gr.remove_term(0)[0].s, 0)
     self.assertEqual(gr.terms_count(), 0)
     self.assertFalse(gr.have_term(0))
     self.assertIsNone(gr.get_term(0))
     self.assertIsNone(gr.term(0))
Example #25
0
 def test_haveNontermTuple(self):
     gr = Grammar()
     gr.add_term([TempClass, Second, Third])
     self.assertTrue(gr.have_term((Third, TempClass)))
 def test_addTwoRemoveOneAndAddThird(self):
     gr = Grammar()
     self.assertEqual(gr.add_term(0)[0].s, 0)
     self.assertEqual(gr.add_term('asdf')[0].s, 'asdf')
     self.assertEqual(gr.terms_count(), 2)
     self.assertIsNotNone(gr.get_term(0))
     self.assertIsNotNone(gr.term(0))
     self.assertTrue(isinstance(gr.term(0), Terminal))
     self.assertEqual(gr.term(0).s, 0)
     self.assertIsNotNone(gr.get_term('asdf'))
     self.assertIsNotNone(gr.term('asdf'))
     self.assertTrue(isinstance(gr.term('asdf'), Terminal))
     self.assertEqual(gr.term('asdf').s, 'asdf')
     self.assertEqual(gr.remove_term('asdf')[0].s, 'asdf')
     self.assertEqual(gr.terms_count(), 1)
     self.assertIsNotNone(gr.get_term(0))
     self.assertIsNotNone(gr.term(0))
     self.assertTrue(isinstance(gr.term(0), Terminal))
     self.assertEqual(gr.term(0).s, 0)
     self.assertEqual(gr.add_term(TempClass)[0].s, TempClass)
     self.assertEqual(gr.terms_count(), 2)
     self.assertTrue(gr.have_term(0))
     self.assertFalse(gr.have_term('asdf'))
     self.assertTrue(gr.have_term(TempClass))
Example #27
0
 def test_shouldAddOneNonterminal(self):
     g = Grammar(nonterminals=[A])
     self.assertTrue(g.have_nonterm(A))
     self.assertFalse(g.have_nonterm(B))
     self.assertFalse(g.have_nonterm([A, B]))
 def test_addThreeRemoveTwoInArray(self):
     gr = Grammar()
     add = gr.add_term([0, 'asdf', TempClass])
     self.assertEqual(add[0].s, 0)
     self.assertEqual(add[1].s, 'asdf')
     self.assertEqual(add[2].s, TempClass)
     self.assertEqual(gr.terms_count(), 3)
     self.assertIsNotNone(gr.get_term(0))
     self.assertIsNotNone(gr.term(0))
     self.assertTrue(isinstance(gr.term(0), Terminal))
     self.assertEqual(gr.term(0).s, 0)
     self.assertIsNotNone(gr.get_term('asdf'))
     self.assertIsNotNone(gr.term('asdf'))
     self.assertTrue(isinstance(gr.term('asdf'), Terminal))
     self.assertEqual(gr.term('asdf').s, 'asdf')
     self.assertIsNotNone(gr.get_term(TempClass))
     self.assertIsNotNone(gr.term(TempClass))
     self.assertTrue(isinstance(gr.term(TempClass), Terminal))
     self.assertEqual(gr.term(TempClass).s, TempClass)
     rem = gr.remove_term([0, 'asdf'])
     self.assertEqual(rem[0].s, 0)
     self.assertEqual(rem[1].s, 'asdf')
     self.assertEqual(gr.terms_count(), 1)
     self.assertTrue(gr.have_term(TempClass))
     self.assertFalse(gr.have_term(0))
     self.assertFalse(gr.have_term('asdf'))
     self.assertEqual(gr.add_term(0)[0].s, 0)
     self.assertEqual(gr.terms_count(), 2)
     self.assertTrue(gr.have_term(TempClass))
     self.assertTrue(gr.have_term(0))
     self.assertFalse(gr.have_term('asdf'))
Example #29
0
 def test_shouldNotAddOneInvalidNonterminal(self):
     with self.assertRaises(NotNonterminalException):
         Grammar(nonterminals=[A, B, 1])
Example #30
0
 def test_oneTerminalTerms(self):
     gr = Grammar()
     gr.add_term('a')
     for i in gr.terms():
         self.assertEqual(i.s, 'a')