emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/parser-generator c2d2d0d 239/434: Fixed FIRST calculati


From: ELPA Syncer
Subject: [elpa] externals/parser-generator c2d2d0d 239/434: Fixed FIRST calculating when building lr-item sets
Date: Mon, 29 Nov 2021 15:59:49 -0500 (EST)

branch: externals/parser-generator
commit c2d2d0d3e1f8c514861629a19d2bc130c47256b9
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>

    Fixed FIRST calculating when building lr-item sets
---
 parser-generator-lr.el | 57 +++++++++++++++++++++++++++++++++++---------------
 1 file changed, 40 insertions(+), 17 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 21e166f..13cd8be 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -400,13 +400,19 @@
                   (< b-index set-length))
             (unless (= a-index b-index)
               (setq b (nth b-index set))
+              (parser-generator--debug
+               (message "b: %s" b))
+
               (setq b-suffix (nth 2 b))
               (setq b-follow (nth 3 b))
-              (setq b-suffix-follow (append b-suffix b-follow))
-              (setq b-suffix-follow-eff (parser-generator--e-free-first 
b-suffix-follow))
+              (setq
+               b-suffix-follow
+               (append b-suffix b-follow))
+              (setq
+               b-suffix-follow-eff
+               (parser-generator--e-free-first b-suffix-follow))
 
               (parser-generator--debug
-               (message "b: %s" b)
                (message "b-suffix: %s" b-suffix)
                (message "b-follow: %s" b-follow)
                (message "b-suffix-follow: %s" b-suffix-follow)
@@ -658,32 +664,49 @@
                   (let ((lr-item-suffix-rest-first
                          (parser-generator--first
                           lr-item-suffix-rest)))
+                    (parser-generator--debug
+                     (message
+                      "lr-item-suffix-rest-first (before): %s"
+                      lr-item-suffix-rest-first))
+
                     (unless lr-item-suffix-rest-first
                       (setq
                        lr-item-suffix-rest-first
                        (list eof-list)))
 
                     ;; When |FIRST| < k add EOF symbols
-                    (when (
-                           <
-                           (length lr-item-suffix-rest-first)
-                           parser-generator--look-ahead-number)
-                      (setq
-                       lr-item-suffix-rest-first
-                       (reverse lr-item-suffix-rest-first))
-                      (while (<
-                              (length lr-item-suffix-rest-first)
-                              parser-generator--look-ahead-number)
+                    (let ((new-first))
+                      (dolist
+                          (first-item
+                           lr-item-suffix-rest-first)
+                        (when (
+                               <
+                               (length first-item)
+                               parser-generator--look-ahead-number)
+                          (setq
+                           first-item
+                           (reverse
+                            first-item))
+                          (while (<
+                                  (length first-item)
+                                  parser-generator--look-ahead-number)
+                            (push
+                             parser-generator--eof-identifier
+                             first-item))
+                          (setq
+                           first-item
+                           (reverse first-item)))
                         (push
-                         parser-generator--eof-identifier
-                         lr-item-suffix-rest-first))
+                         first-item
+                         new-first))
                       (setq
                        lr-item-suffix-rest-first
-                       (reverse lr-item-suffix-rest-first)))
+                       (reverse
+                        new-first)))
 
                     (parser-generator--debug
                      (message
-                      "lr-item-suffix-rest-first: %s"
+                      "lr-item-suffix-rest-first (after): %s"
                       lr-item-suffix-rest-first))
                     (let ((sub-production
                            (parser-generator--get-grammar-rhs



reply via email to

[Prev in Thread] Current Thread [Next in Thread]