def test_multiple_changes_at_once(): pytest.skip("deprecated") grammar = """ S ::= C S | C C ::= "a" | "b" """ lrp = IncParser(grammar, LR1) lrp.check("a a a") lrp.previous_version = lrp.get_ast() ast = lrp.previous_version #root # bos # S # C a # S # C a # ... C = ast.parent.children[1].children[1].children[0] assert C.symbol == Nonterminal("C") assert C.children[0].symbol == Terminal("a") # put insertion into this Node changed_node = C.children[0] changed_node.symbol.name = "b b a" apply_change(lrp, changed_node) lrp.previous_version.pprint() lrp.inc_parse() lrp.stack[1].pprint() assert False
def test_multiple_changes_3(): pytest.skip("deprecated") lrp = IncParser(grammar, LR1) lrp.check("1 + 2") lrp.previous_version = lrp.get_ast() ast = lrp.previous_version Viewer().show_tree(lrp.previous_version.parent.children[1]) i2 = ast.parent.children[1].children[1] assert i2.symbol == Terminal("+") i2.symbol.name = "*" apply_change(lrp, i2) lrp.inc_parse() lrp.stack[1].pprint() Viewer().show_tree(lrp.stack[1]) assert False
def test_deletion(): pytest.skip("deprecated") grammar = """ S ::= C S | C C ::= "a" | "b" """ lrp = IncParser(grammar, LR1) lrp.check("a a a") lrp.previous_version = lrp.get_ast() ast = lrp.previous_version Viewer().show_tree(lrp.previous_version.parent) C = ast.parent.children[1].children[1].children[0] assert C.symbol == Nonterminal("C") assert C.children[0].symbol == Terminal("a") # delete terminal node C.children.pop(0) apply_change(lrp, C) lrp.inc_parse() Viewer().show_tree(lrp.stack[1]) assert False