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

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

[elpa] externals/parser-generator 1199586dad 11/82: More work on generat


From: Christian Johansson
Subject: [elpa] externals/parser-generator 1199586dad 11/82: More work on generating LL item
Date: Thu, 12 May 2022 13:28:13 -0400 (EDT)

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

    More work on generating LL item
---
 parser-generator-ll.el | 54 +++++++++++++++++++++++++++++++++-----------------
 1 file changed, 36 insertions(+), 18 deletions(-)

diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index 5e5fde8122..4cb6f5e268 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -48,7 +48,8 @@
 
   (let ((tables (make-hash-table :test 'equal))
         (table-count 0)
-        (distinct-table-p (make-hash-table :test 'equal))
+        (distinct-table-number (make-hash-table :test 'equal))
+        (distinct-item-p (make-hash-table :test 'equal))
         (stack)
         (stack-item)
         (k (max 1 parser-generator--look-ahead-number)))
@@ -169,29 +170,46 @@
                     look-ahead
                     production-rhs
                     production-number))
+                  (item-hash-key
+                   (format
+                    "%S-%S-%S"
+                    production-lhs
+                    dot-look-ahead
+                    look-ahead))
                   (table-hash-key
                    (format
                     "%S-%S"
                     production-lhs
                     dot-look-ahead)))
-              (if (gethash table-hash-key distinct-table-p)
-                  (let ((existing-table-key
-                         (gethash table-hash-key distinct-table-p)))
-                    (puthash
-                     existing-table-key
-                     (push
-                      table
-                      (gethash existing-table-key tables))
-                     tables))
+              (unless (gethash item-hash-key distinct-item-p)
                 (puthash
-                 table-hash-key
-                 table-count
-                 distinct-table-p)
-                (puthash
-                 table-count
-                 (list table)
-                 tables)
-                (setq table-count (1+ table-count))))))
+                 item-hash-key
+                 t
+                 distinct-item-p)
+                (let ((existing-table-number
+                       (gethash
+                        table-hash-key
+                        distinct-table-number)))
+                  (if existing-table-number
+                      (puthash
+                       existing-table-number
+                       (push
+                        table
+                        (gethash
+                         existing-table-number
+                         tables))
+                       tables)
+                    (puthash
+                     table-hash-key
+                     table-count
+                     distinct-table-number)
+                    (puthash
+                     table-count
+                     (list table)
+                     tables)
+                    (setq
+                     table-count
+                     (1+ table-count))))))))
 
         (parser-generator--debug
          (message "\nproduction-lhs: %S" production-lhs)



reply via email to

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