From bb0b9aa729197ed7a1c53755700d90a8a359574a Mon Sep 17 00:00:00 2001 From: Erez Shinan Date: Thu, 22 Feb 2018 10:10:57 +0200 Subject: [PATCH] BUGFIX: Token and Derivation get compared in _compare_drv (Issue #91) --- lark/parsers/resolve_ambig.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lark/parsers/resolve_ambig.py b/lark/parsers/resolve_ambig.py index f60a3f0..9c859b5 100644 --- a/lark/parsers/resolve_ambig.py +++ b/lark/parsers/resolve_ambig.py @@ -30,11 +30,15 @@ def _compare_priority(tree1, tree2): tree1.iter_subtrees() def _compare_drv(tree1, tree2): - try: - rule1, rule2 = tree1.rule, tree2.rule - except AttributeError: - # Probably non-trees, or user trees that weren't created by the parse (better way to distinguish?) + rule1 = getattr(tree1, 'rule', None) + rule2 = getattr(tree2, 'rule', None) + + if None == rule1 == rule2: return compare(tree1, tree2) + elif rule1 is None: + return -1 + elif rule2 is None: + return 1 assert tree1.data != '_ambig' assert tree2.data != '_ambig'