コード例 #1
0
ファイル: test_incparser.py プロジェクト: willemneal/eco
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
コード例 #2
0
ファイル: test_incparser.py プロジェクト: willemneal/eco
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
コード例 #3
0
ファイル: test_incparser.py プロジェクト: willemneal/eco
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