diff --git a/lark/parse_tree_builder.py b/lark/parse_tree_builder.py index 56dcb22..975121d 100644 --- a/lark/parse_tree_builder.py +++ b/lark/parse_tree_builder.py @@ -123,7 +123,7 @@ class ParseTreeBuilder: raise Exception("Rule %s is marked for expansion (it starts with an underscore) and isn't allowed to have aliases (alias=%s)" % (origin, alias)) wrapper_chain = filter(None, [ - expand1 and Expand1, + (expand1 and not alias) and Expand1, create_token and Factory(TokenWrapper, create_token), create_rule_handler(expansion, keep_all_tokens, filter_out), self.propagate_positions and PropagatePositions, diff --git a/tests/test_parser.py b/tests/test_parser.py index f70c12b..8a43a91 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -78,7 +78,13 @@ class TestParsers(unittest.TestCase): """) r = g.parse('x') - self.assertEqual( r.children[0].data, "b" ) + self.assertEqual( r.children[0].data, "c" ) + + g = Lark("""start: a + ?a: B -> c + B: "x" + """) + self.assertEqual( r.children[0].data, "c" ) g = Lark("""start: a