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

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

[elpa] externals/parser-generator 7fe7318 087/434: Passed test for disti


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 7fe7318 087/434: Passed test for distinct LR-items for grammar
Date: Mon, 29 Nov 2021 15:59:14 -0500 (EST)

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

    Passed test for distinct LR-items for grammar
---
 parser.el           | 22 ++++++++++++++++++----
 test/parser-test.el | 36 ++++++++++++++++++++++++------------
 2 files changed, 42 insertions(+), 16 deletions(-)

diff --git a/parser.el b/parser.el
index a98d05e..2325f68 100644
--- a/parser.el
+++ b/parser.el
@@ -115,6 +115,19 @@
       (error "No grammar G defined!")))
   (nth 1 G))
 
+(defun parser--hash-to-list (hash-table &optional un-sorted)
+  "Return a list that represent the HASH-TABLE.  Each element is a list: (list 
key value), optionally UN-SORTED."
+  (let (result)
+    (if (hash-table-p hash-table)
+        (progn
+          (maphash
+           (lambda (k v) (push (list k v) result))
+           hash-table)
+          (if un-sorted
+              (nreverse result)
+            (sort (nreverse result) (lambda (a b) (< (car a) (car b))))))
+      nil)))
+
 (defun parser--load-symbols ()
   "Load terminals and non-terminals in grammar."
   (let ((terminals (parser--get-grammar-terminals)))
@@ -687,9 +700,10 @@
           (setq popped-item (pop unmarked-lr-items))
           (setq lr-item-index (car popped-item))
           (setq lr-item (car (cdr popped-item)))
-          (message "lr-item-index: %s" lr-item-index)
-          (message "lr-item: %s" lr-item)
-          (message "popped-item: %s" popped-item)
+          (parser--debug
+           (message "lr-item-index: %s" lr-item-index)
+           (message "lr-item: %s" lr-item)
+           (message "popped-item: %s" popped-item))
           (puthash lr-item lr-item-index marked-lr-items)
           (puthash lr-item-index lr-item parser--table-lr-items)
           (setq goto-table-table nil)
@@ -725,7 +739,7 @@
           (push `(,lr-item-index ,goto-table-table) goto-table)))
       (setq parser--goto-table (nreverse goto-table))))
 
-  parser--goto-table)
+  parser--table-lr-items)
 
 ;; Algorithm 5.8, p. 386
 (defun parser--lr-items-for-prefix (γ)
diff --git a/test/parser-test.el b/test/parser-test.el
index 8effcf3..2250b7a 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -230,19 +230,31 @@
   ;; Example 5.30, p. 389
   (parser--set-grammar '((Sp S) (a b) ((Sp S) (S (S a S b)) (S e)) Sp))
   (parser--set-look-ahead-number 1)
-  (message "GOTO-table: %s" (parser--lr-items-for-grammar))
 
-  (should
-   (equal
-    '((0 (S 1))
-      (1 (a 2))
-      (2 (S 3))
-      (3 (a 4) (b 5))
-      (4 (S 6))
-      (5 nil)
-      (6 (a 4) (b 7))
-      (7 nil))
-    (parser--lr-items-for-grammar)))
+  ;; (message "GOTO-table: %s" (parser--lr-items-for-grammar))
+  ;; (message "LR-items: %s" (parser--hash-to-list 
(parser--lr-items-for-grammar)))
+
+  (should
+   (equal
+    '((0 (S nil (S a S b) (a)))
+      (1 (Sp (S) nil (e)))
+      (2 (S (S) (a S b) (e)))
+      (3 (S (S a) (S b) (e)))
+      (4 (S nil (S a S b) (a)))
+      (5 (S nil (S a S b) (b)))
+      (6 (S nil nil (b)))
+      (7 (S (S) (a S b) (b)))
+      (8 (S (S a) (S b) (b)))
+      (9 (S nil (S a S b) (a)))
+      (10 (S (S) (a S b) (a)))
+      (11 (S (S a) (S b) (a)))
+      (12 (S (S a S) (b) (a)))
+      (13 (S (S a S b) nil (a)))
+      (14 (S (S a S) (b) (b)))
+      (15 (S (S a S b) nil (b)))
+      (16 (S (S a S) (b) (e)))
+      (17 (S (S a S b) nil (e))))
+    (parser--hash-to-list (parser--lr-items-for-grammar))))
   (message "Passed LR-items for example 5.30")
 
   (message "Passed tests for (parser--lr-items-for-grammar)"))



reply via email to

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