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

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

[elpa] externals/parser-generator d7f43d7 066/434: Sorting lr-items for


From: ELPA Syncer
Subject: [elpa] externals/parser-generator d7f43d7 066/434: Sorting lr-items for prefix before return
Date: Mon, 29 Nov 2021 15:59:10 -0500 (EST)

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

    Sorting lr-items for prefix before return
---
 README.md           | 14 +++++++-------
 parser.el           | 12 ++++++++++--
 test/parser-test.el | 26 +++++++++++++-------------
 3 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/README.md b/README.md
index 7e3ef9b..15da72d 100644
--- a/README.md
+++ b/README.md
@@ -149,11 +149,11 @@ Calculate the set of LR(k) items valid for any viable 
prefix S.
 (parser--set-look-ahead-number 1)
 (should
   (equal
-    '((S nil nil (a))
-    (S nil (S a S b) (a))
-    (S nil nil (e))
-    (S nil (S a S b) (e))
-    (Sp nil (S) (e)))
+    '((S nil (S a S b) (a))
+      (S nil (S a S b) (e))
+      (S nil nil (a))
+      (S nil nil (e))
+      (Sp nil (S) (e)))
     (parser--lr-items-for-prefix 'e)))
 ```
 
@@ -163,9 +163,9 @@ Calculate the set of LR(k) items valid for any viable 
prefix S.
 (parser--set-look-ahead-number 1)
 (should
   (equal
-    '((Sp (S) nil (e))
+    '((S (S) (a S b) (a))
       (S (S) (a S b) (e))
-      (S (S) (a S b) (a)))
+      (Sp (S) nil (e)))
     (parser--lr-items-for-prefix 'S)))
 ```
 
diff --git a/parser.el b/parser.el
index 6a0ef52..5c4807d 100644
--- a/parser.el
+++ b/parser.el
@@ -149,6 +149,14 @@
             (< index length))
       (let ((a-element (nth index a))
             (b-element (nth index b)))
+        (while (and
+                a-element
+                (listp a-element))
+          (setq a-element (car a-element)))
+        (while (and
+                b-element
+                (listp b-element))
+          (setq b-element (car b-element)))
         (if (string-greaterp a-element b-element)
             (setq continue nil)
           (when (string-greaterp b-element a-element)
@@ -688,7 +696,7 @@
                             (setq rhs-rest-first '((e))))
                           (let ((sub-production (parser--get-grammar-rhs 
rhs-first)))
                             (parser--debug
-                               (message "sub-production: %s" sub-production))
+                             (message "sub-production: %s" sub-production))
 
                             ;; For each production with B as LHS
                             (dolist (sub-rhs sub-production)
@@ -786,7 +794,7 @@
 
       (parser--debug
        (message "γ: %s" γ))
-      (gethash γ lr-items))))
+      (sort (gethash γ lr-items) 'parser--sort-list))))
 
 
 (provide 'parser)
diff --git a/test/parser-test.el b/test/parser-test.el
index 4404665..bf3ccee 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -233,30 +233,30 @@
 
   (should
    (equal
-    '((S nil nil (a))
-    (S nil (S a S b) (a))
-    (S nil nil (e))
-    (S nil (S a S b) (e))
-    (Sp nil (S) (e)))
+    '((S nil (S a S b) (a))
+      (S nil (S a S b) (e))
+      (S nil nil (a))
+      (S nil nil (e))
+      (Sp nil (S) (e)))
     (parser--lr-items-for-prefix 'e)))
   (message "Passed V(e)")
 
   (should
    (equal
-    '((Sp (S) nil (e))
+    '((S (S) (a S b) (a))
       (S (S) (a S b) (e))
-      (S (S) (a S b) (a)))
+      (Sp (S) nil (e)))
     (parser--lr-items-for-prefix 'S)))
   (message "Passed V(S)")
 
   (should
    (equal
-    '((S nil (e) (a))
-    (S nil (S a S b) (a))
-    (S nil (e) (b))
-    (S nil (S a S b) (b))
-    (S (S a) (S b) (a))
-    (S (S a) (S b) (e)))
+    '((S (S a) (S b) (a))
+      (S (S a) (S b) (e))
+      (S nil (S a S b) (a))
+      (S nil (S a S b) (b))
+      (S nil (e) (a))
+      (S nil (e) (b)))
     (parser--lr-items-for-prefix '(S a))))
   (message "Passed V(Sa)")
 



reply via email to

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