From 39b0d769141d3f8e579b5a4711bd22b579657801 Mon Sep 17 00:00:00 2001 From: Erez Shinan Date: Sun, 21 Jul 2019 09:46:08 +0200 Subject: [PATCH] Minor optimization in LALR (thanks to @Raekye) --- lark/parsers/grammar_analysis.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lark/parsers/grammar_analysis.py b/lark/parsers/grammar_analysis.py index a31f308..8fc0806 100644 --- a/lark/parsers/grammar_analysis.py +++ b/lark/parsers/grammar_analysis.py @@ -82,9 +82,10 @@ def calculate_sets(rules): changed = True for i, sym in enumerate(rule.expansion): - if set(rule.expansion[:i]) <= NULLABLE: - if update_set(FIRST[rule.origin], FIRST[sym]): - changed = True + if set(rule.expansion[:i]) > NULLABLE: + break + if update_set(FIRST[rule.origin], FIRST[sym]): + changed = True # Calculate FOLLOW changed = True