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

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

[elpa] externals/parser-generator 7eb9a4a 156/434: Fixed issue with inde


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 7eb9a4a 156/434: Fixed issue with indexing productions when they have SDT
Date: Mon, 29 Nov 2021 15:59:31 -0500 (EST)

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

    Fixed issue with indexing productions when they have SDT
---
 parser-generator.el           | 36 ++++++++++++++++++++----------------
 test/parser-generator-test.el |  2 +-
 2 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/parser-generator.el b/parser-generator.el
index bb83211..7c24819 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -245,8 +245,7 @@
     (dolist (non-terminal non-terminals)
       (puthash non-terminal t parser-generator--table-non-terminal-p)))
 
-  (let ((productions (parser-generator--get-grammar-productions))
-        (purified-production))
+  (let ((productions (parser-generator--get-grammar-productions)))
     (setq parser-generator--table-productions-rhs (make-hash-table :test 
'equal))
     (dolist (p productions)
       (let ((lhs (car p))
@@ -279,22 +278,27 @@
               (unless (listp rhs-element)
                 (setq rhs-element (list rhs-element)))
 
-              (if (and
-                   (functionp rhs-element)
-                   (= rhs-element-index (1- rhs-length)))
-                  (progn
-                    (setq translation rhs-element)
-                    (parser-generator--debug
-                     (message "Translation %s: %s" production-index 
translation)))
-                (setq production (list lhs rhs-element))
+              (let ((sub-rhs-element-index 0)
+                    (sub-rhs-element-length (length rhs-element))
+                    (sub-rhs-element)
+                    (new-rhs))
+                (while (< sub-rhs-element-index sub-rhs-element-length)
+                  (setq sub-rhs-element (nth sub-rhs-element-index 
rhs-element))
+                  (if (functionp sub-rhs-element)
+                      (setq translation sub-rhs-element)
+                    (push sub-rhs-element new-rhs))
+                  (setq sub-rhs-element-index (1+ sub-rhs-element-index)))
+                (setq production (list lhs (nreverse new-rhs)))
                 (parser-generator--debug
                  (message "Production %s: %s" production-index production)))
-              (setq rhs-element-index (1+ rhs-element-index)))
-            (puthash production production-index 
parser-generator--table-productions-number)
-            (puthash production-index production 
parser-generator--table-productions-number-reverse)
-            (when translation
-              (puthash production-index translation 
parser-generator--table-translations))
-            (setq production-index (1+ production-index)))))))
+              (setq rhs-element-index (1+ rhs-element-index))
+              (puthash production production-index 
parser-generator--table-productions-number)
+              (puthash production-index production 
parser-generator--table-productions-number-reverse)
+              (when translation
+                (parser-generator--debug
+                 (message "Translation %s: %s" production-index translation))
+                (puthash production-index translation 
parser-generator--table-translations))
+              (setq production-index (1+ production-index))))))))
 
   (let ((look-aheads (parser-generator--get-grammar-look-aheads)))
     (setq parser-generator--table-look-aheads-p (make-hash-table :test 'equal))
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index b8a82c3..4ead2e0 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -378,7 +378,7 @@
            (parser-generator--valid-grammar-p '((A B C) ("a" "b" "c") ((A "a" 
(lambda(a) (message "Was here: %s" a)))) A))))
 
   (should (equal
-           t
+           nil
            (parser-generator--valid-grammar-p '((A B C) ("a" "b" "c") ((A "a" 
(lambda(a) (message "Was here: %s" a)) "b")) A))))
 
   (should (equal



reply via email to

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