diff --git a/lark/parsers/grammar_analysis.py b/lark/parsers/grammar_analysis.py index 2c76eb0..9ad49ce 100644 --- a/lark/parsers/grammar_analysis.py +++ b/lark/parsers/grammar_analysis.py @@ -35,6 +35,9 @@ class RulePtr(object): def update_set(set1, set2): + if not set2: + return False + copy = set(set1) set1 |= set2 return set1 != copy diff --git a/lark/parsers/lalr_analysis.py b/lark/parsers/lalr_analysis.py index e876fcf..4af28f9 100644 --- a/lark/parsers/lalr_analysis.py +++ b/lark/parsers/lalr_analysis.py @@ -91,7 +91,7 @@ class LALR_Analyzer(GrammarAnalyzer): for k, v in lookahead.items(): if not len(v) == 1: - raise GrammarError("Collision in %s: %s" %(k, v)) + raise GrammarError("Collision in %s: %s" %(k, ', '.join(['\n * %s: %s' % x for x in v]))) self.states[state] = {k:v[0] for k, v in lookahead.items()}