def test_closure_0(): s1 = StateSet() s = State(Production(Nonterminal("Z"), [Nonterminal("S")]), 0) # first state Z ::= .S s1.add(s) closure = helper1.closure_0(s1) assert len(closure.elements) == 4 assert State(Production(Z, [S]), 0) in closure assert State(Production(S, [S, b]), 0) in closure assert State(Production(S, [b, A, a]), 0) in closure assert State(Production(S, [a]), 0) in closure s2 = StateSet() s = State(Production(F, [C, D, f]), 0) s2.add(s) closure = helper1.closure_0(s2) assert len(closure.elements) == 4 assert State(Production(F, [C, D, f]), 0) in closure assert State(Production(C, [D, A]), 0) in closure assert State(Production(D, [d]), 0) in closure assert State(Production(D, [Epsilon()]), 1) in closure s3 = StateSet() s = State(Production(C, [D, A]), 1) s3.add(s) closure = helper1.closure_0(s3) assert len(closure.elements) == 4 assert State(Production(C, [D, A]), 1) in closure assert State(Production(A, [a, S, c]), 0) in closure assert State(Production(A, [a, S, b]), 0) in closure assert State(Production(A, [a]), 0) in closure
def test_goto_0(): ss = StateSet([State(Production(Z, [S]), 0)]) closure = helper1.closure_0(ss) g1 = helper1.goto_0(closure, b) expected = helper1.closure_0(StateSet([State(Production(S, [b, A, a]), 1)])) assert expected.elements == g1.elements g2 = helper1.goto_0(closure, a) assert set([State(Production(S, [a]), 1)]) == g2.elements assert helper1.goto_0(closure, c) == StateSet() assert helper1.goto_0(closure, d) == StateSet() assert helper1.goto_0(closure, f) == StateSet()
def test_state_0(): # State 0 # Z ::= .S # S ::= .bAd s = StateSet() s.add(State(None_S, 0)) s.add(State(S_bAd, 0)) assert graph.state_sets[0] == s
def test_state_1(): # State 1 # Z ::= S. # S ::= S.b s = StateSet() s.add(move_dot(None_S, 1)) s.add(move_dot(S_Sb, 1)) assert graph.state_sets[1] == s
def test_closure_1(): s1 = StateSet() s1.add(LR1Element(Production(Z, [S]), 0, set([finish])), [finish]) closure = helper1.closure_1(s1) assert len(closure.elements) == 4 assert LR1Element(Production(Z, [S]), 0, set([finish])) in closure assert LR1Element(Production(S, [S, b]), 0, set([b, finish])) in closure assert LR1Element(Production(S, [b, A, a]), 0, set([b, finish])) in closure assert LR1Element(Production(S, [a]), 0, set([b, finish])) in closure s2 = StateSet() s2.add(LR1Element(Production(F, [C, D, f]), 0, set([finish])), [finish]) closure = helper1.closure_1(s2) assert len(closure.elements) == 4 assert LR1Element(Production(F, [C, D, f]), 0, set([finish])) in closure assert LR1Element(Production(C, [D, A]), 0, set([d, f])) in closure assert LR1Element(Production(D, [d]), 0, set([a])) in closure assert LR1Element(Production(D, [epsilon]), 1, set([a])) in closure
def test_state_2(): # State 2 # S ::= b.Ad # A ::= .c # A ::= . s = StateSet() s.add(State(S_bAd, 1)) s.add(State(A_c, 0)) s.add(State(A_None, 1)) assert graph.state_sets[2] == s
def test_state_0(): # State 0 # Z ::= .S # S ::= .Sb # S ::= .bAa s = StateSet() s.add(None_S) s.add(S_Sb) s.add(S_bAa) assert graph.state_sets[0] == s
def test_closure_recursion(): pytest.skip("what is this supposed to test?") s1 = StateSet() s1.add(LR1Element(Production(Z, [E]), 0, set([finish])), [finish]) closure = helper1.closure_1(s1) assert len(closure.elements) == 4 assert LR1Element(Production(Z, [E]), 0, set([finish])) in closure assert LR1Element(Production(E, [P]), 0, set([plus, finish])) in closure assert LR1Element(Production(E, [E, plus, P]), 0, set([plus, finish])) in closure assert LR1Element(Production(P, [a]), 0, set([plus, finish])) in closure
def test_state_2(): # State 2 # S ::= b.Aa # A ::= .aSc # A ::= .a # A ::= .aSb s = StateSet() s.add(move_dot(S_bAa, 1)) s.add(A_aSc) s.add(A_a) s.add(A_aSb) assert graph.state_sets[2] == s
def test_graph(): pytest.skip("conversion is not working yet") graph = StateGraph(p.start_symbol, p.rules, 1) graph.build() s0 = StateSet([ LR1Element(Production(None, [S]), 0, set([f])), LR1Element(Production(S, [b, A, c]), 0, set([f])), ]) s1 = StateSet([ LR1Element(Production(S, [b, A, c]), 1, set([f])), LR1Element(Production(A, [S]), 0, set([c])), LR1Element(Production(A, [a]), 0, set([c])), LR1Element(Production(S, [b, A, c]), 0, set([c])), ]) s2 = StateSet([ LR1Element(Production(S, [b, A, c]), 1, set([c])), LR1Element(Production(A, [S]), 0, set([c])), LR1Element(Production(A, [a]), 0, set([c])), LR1Element(Production(S, [b, A, c]), 0, set([c])), ]) s3 = StateSet([ LR1Element(Production(A, [a]), 1, set([c])), ]) s4 = StateSet([ LR1Element(Production(None, [S]), 1, set([f])), ]) s5 = StateSet([ LR1Element(Production(S, [b, A, c]), 2, set([f])), ]) s6 = StateSet([ LR1Element(Production(S, [b, A, c]), 2, set([c])), ]) s7 = StateSet([ LR1Element(Production(A, [S]), 1, set([c])), ]) s8 = StateSet([ LR1Element(Production(S, [b, A, c]), 3, set([f])), ]) s9 = StateSet([ LR1Element(Production(S, [b, A, c]), 3, set([c])), ]) assert len(graph.state_sets) == 10 assert s0 in graph.state_sets assert s1 in graph.state_sets assert s2 in graph.state_sets assert s3 in graph.state_sets assert s4 in graph.state_sets assert s6 in graph.state_sets assert s7 in graph.state_sets assert s8 in graph.state_sets assert s9 in graph.state_sets graph.convert_lalr() s0 = StateSet([ LR1Element(Production(None, [S]), 0, set([f])), LR1Element(Production(S, [b, A, c]), 0, set([f])), ]) s1 = StateSet([ LR1Element(Production(S, [b, A, c]), 1, set([f, c])), LR1Element(Production(A, [S]), 0, set([c])), LR1Element(Production(A, [a]), 0, set([c])), LR1Element(Production(S, [b, A, c]), 0, set([c])), ]) s2 = StateSet([ LR1Element(Production(A, [a]), 1, set([c])), ]) s3 = StateSet([ LR1Element(Production(None, [S]), 1, set([f])), ]) s4 = StateSet([ LR1Element(Production(S, [b, A, c]), 2, set([f, c])), ]) s5 = StateSet([ LR1Element(Production(A, [S]), 1, set([c])), ]) s6 = StateSet([ LR1Element(Production(S, [b, A, c]), 3, set([f, c])), ]) assert len(graph.state_sets) == 7 assert s0 in graph.state_sets assert s1 in graph.state_sets assert s2 in graph.state_sets assert s3 in graph.state_sets assert s4 in graph.state_sets assert s6 in graph.state_sets
def test_state_5(): # State 5 # A ::= c. s = StateSet() s.add(State(A_c, 1)) assert s in graph.state_sets
def test_state_6(): # State 6 # S ::= bAd. s = StateSet() s.add(State(S_bAd, 3)) assert s in graph.state_sets
def test_state_4(): # State 4 # S ::= bA.d s = StateSet() s.add(State(S_bAd, 2)) assert s in graph.state_sets
def test_state_1(): # State 1 # Z ::= S. s = StateSet() s.add(State(None_S, 1)) assert graph.state_sets[1] == s