def test_backwards_lexing(self): lexer = IncrementalLexer(""" "::=":doublecolon "=":equal ":":singlecolon """) ast = AST() ast.init() bos = ast.parent.children[0] eos = ast.parent.children[1] text = TextNode(Terminal(":")) bos.insert_after(text) lexer.relex(text) assert bos.next_term.symbol.name == ":" assert bos.next_term.lookup == "singlecolon" assert text.lookahead == 1 text2 = TextNode(Terminal(":")) text.insert_after(text2) lexer.relex(text2) assert text2.lookahead == 1 assert bos.next_term.symbol.name == ":" assert bos.next_term.next_term.symbol.name == ":" text3 = TextNode(Terminal("=")) text2.insert_after(text3) lexer.relex(text3) assert bos.next_term.symbol.name == "::=" assert isinstance(bos.next_term.next_term, EOS)
def test_backwards_lexing(self): lexer = IncrementalLexer(""" "::=":doublecolon "=":equal ":":singlecolon """) ast = AST() ast.init() bos = ast.parent.children[0] eos = ast.parent.children[1] text = TextNode(Terminal(":")) bos.insert_after(text) lexer.relex(text) assert bos.next_term.symbol.name == ":" assert bos.next_term.lookup == "singlecolon" assert text.lookahead == 1 text2 = TextNode(Terminal(":")) text.insert_after(text2) lexer.relex(text2) assert text2.lookahead == 1 assert bos.next_term.symbol.name == ":" assert bos.next_term.next_term.symbol.name == ":" text3 = TextNode(Terminal("=")) text2.insert_after(text3) lexer.relex(text3) assert bos.next_term.symbol.name == "::=" assert isinstance(bos.next_term.next_term, EOS)
def test_lookahead(self): lexer = IncrementalLexer(""" "aaa":aaa "a":a "b":b """) ast = AST() ast.init() bos = ast.parent.children[0] eos = ast.parent.children[1] text = TextNode(Terminal("baab")) bos.insert_after(text) lexer.relex(text) assert ast.parent.children[1].symbol.name == "b" assert ast.parent.children[2].symbol.name == "a" assert ast.parent.children[3].symbol.name == "a" assert ast.parent.children[4].symbol.name == "b" ast.parent.children[1].symbol = None ast.parent.children[3].symbol.name = "aa" lexer.relex(ast.parent.children[3]) assert ast.parent.children[2].symbol.name == "aaa" assert ast.parent.children[3].symbol.name == "b"
def test_lookahead(self): lexer = IncrementalLexer(""" "aaa":aaa "a":a "b":b """) ast = AST() ast.init() bos = ast.parent.children[0] eos = ast.parent.children[1] text = TextNode(Terminal("baab")) bos.insert_after(text) lexer.relex(text) assert ast.parent.children[1].symbol.name == "b" assert ast.parent.children[2].symbol.name == "a" assert ast.parent.children[3].symbol.name == "a" assert ast.parent.children[4].symbol.name == "b" ast.parent.children[1].symbol = None ast.parent.children[3].symbol.name = "aa" lexer.relex(ast.parent.children[3]) assert ast.parent.children[2].symbol.name == "aaa" assert ast.parent.children[3].symbol.name == "b"