From 9d84c52140edb34cc21bcbe4bd905ee7164300d0 Mon Sep 17 00:00:00 2001 From: Erez Shinan Date: Fri, 9 Feb 2018 10:19:31 +0200 Subject: [PATCH] Better error message for reduce collisions in lalr --- lark/parsers/grammar_analysis.py | 3 +++ lark/parsers/lalr_analysis.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) 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()}