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

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

[elpa] externals/parser-generator a96ab3a 222/434: More debugging LR k >


From: ELPA Syncer
Subject: [elpa] externals/parser-generator a96ab3a 222/434: More debugging LR k > 1
Date: Mon, 29 Nov 2021 15:59:45 -0500 (EST)

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

    More debugging LR k > 1
---
 parser-generator-lr.el           | 22 ++++++++++-----
 parser-generator.el              |  2 +-
 test/parser-generator-lr-test.el | 58 +++++++++++++++++++++++++++++++++++-----
 3 files changed, 68 insertions(+), 14 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index cf51d4a..f606f98 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -712,6 +712,9 @@
               (push (car look-ahead-item) look-ahead)
             (push look-ahead-item look-ahead)))
 
+        (parser-generator--debug
+         (message "look-ahead: %s" look-ahead))
+
         (let ((table-index
                (car pushdown-list)))
           (let ((action-table
@@ -787,15 +790,21 @@
                               searching-match
                               (< goto-index goto-table-length))
                         (let ((goto-item (nth goto-index goto-table)))
-                          (let ((goto-item-look-ahead (list (car goto-item)))
+                          (let ((goto-item-symbol (list (car goto-item)))
                                 (goto-item-next-index (car (cdr goto-item))))
-                            (push goto-item-look-ahead possible-look-aheads)
+                            (push goto-item-symbol possible-look-aheads)
+
+                            (parser-generator--debug
+                             (message "goto-item: %s" goto-item)
+                             (message "goto-item-symbol: %s" goto-item-symbol))
 
-                            (when (equal goto-item-look-ahead a)
+                            (when (equal goto-item-symbol a)
                               (setq next-index goto-item-next-index)
                               (setq searching-match nil))))
 
                         (setq goto-index (1+ goto-index)))
+                      (parser-generator--debug
+                             (message "next-index: %s" next-index))
 
                       (unless next-index
                         (error
@@ -804,6 +813,7 @@
                          table-index
                          possible-look-aheads))
 
+                      ;; Maybe push both tokens here?
                       (push (car a-full) pushdown-list)
                       (push next-index pushdown-list)
                       (parser-generator-lex-analyzer--pop-token)))))
@@ -913,14 +923,14 @@
                                     searching-match
                                     (< goto-index goto-table-length))
                               (let ((goto-item (nth goto-index goto-table)))
-                                (let ((goto-item-look-ahead (list (car 
goto-item)))
+                                (let ((goto-item-symbol (list (car goto-item)))
                                       (goto-item-next-index (car (cdr 
goto-item))))
                                   (parser-generator--debug
                                    (message "goto-item: %s" goto-item)
-                                   (message "goto-item-look-ahead: %s" 
goto-item-look-ahead))
+                                   (message "goto-item-symbol: %s" 
goto-item-symbol))
 
                                   (when (equal
-                                         goto-item-look-ahead
+                                         goto-item-symbol
                                          production-lhs)
                                     (setq next-index goto-item-next-index)
                                     (setq searching-match nil))))
diff --git a/parser-generator.el b/parser-generator.el
index c47252c..87ee3e3 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -11,7 +11,7 @@
 
 
 (defvar parser-generator--debug
-  nil
+  t
   "Whether to print debug messages or not.")
 
 (defvar parser-generator--e-identifier
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index f4357e9..4aeeb64 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -409,18 +409,62 @@
   (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b")) 
(S e)) Sp))
   (parser-generator-set-look-ahead-number 2)
   (parser-generator-process-grammar)
+
   (let ((lr-items (parser-generator-lr--generate-goto-tables)))
     (parser-generator--debug
-     (message "lr-items: %s" (parser-generator--hash-values-to-list lr-items 
t)))
+     (message "all lr-items: %s" (parser-generator--hash-values-to-list 
lr-items t)))
 
-    ;; TODO Fix so that there is an accept path in look-ahead number 2
+    (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-generator--hash-to-list
+       parser-generator-lr--goto-tables)))
+    (message "Passed GOTO-tables k = 2")
+
+    ;; TODO Validate lr-items here
+    
+    ;; (should
+    ;;  (equal
+    ;;   '((0 (((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))))
+    ;;     (1 (((S) (S) ("a" S "b") ("a")) ((S) (S) ("a" S "b") (e)) ((Sp) (S) 
nil (e))))
+    ;;     (2 (((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 nil ("a")) ((S) nil 
nil ("b"))))
+    ;;     (3 (((S) (S) ("a" S "b") ("a")) ((S) (S) ("a" S "b") ("b")) ((S) (S 
"a" S) ("b") ("a")) ((S) (S "a" S) ("b") (e))))
+    ;;     (4 (((S) (S "a") (S "b") ("a")) ((S) (S "a") (S "b") ("b")) ((S) 
nil (S "a" S "b") ("a")) ((S) nil (S "a" S "b") ("b")) ((S) nil nil ("a")) ((S) 
nil nil ("b"))))
+    ;;     (5 (((S) (S "a" S "b") nil ("a")) ((S) (S "a" S "b") nil (e))))
+    ;;     (6 (((S) (S) ("a" S "b") ("a")) ((S) (S) ("a" S "b") ("b")) ((S) (S 
"a" S) ("b") ("a")) ((S) (S "a" S) ("b") ("b"))))
+    ;;     (7 (((S) (S "a" S "b") nil ("a")) ((S) (S "a" S "b") nil ("b")))))
+    ;;   (parser-generator--hash-to-list
+    ;;    lr-items)))
+    ;; (message "Passed LR-items k = 2")
 
-    (parser-generator--debug
-     (message "goto-tables: %s" (parser-generator--hash-values-to-list 
parser-generator-lr--goto-tables t)))
     (parser-generator-lr--generate-action-tables lr-items)
-    ;; TODO Should generate accept somewhere in this action-table
     (parser-generator--debug
-     (message "action-tables: %s" (parser-generator--hash-values-to-list 
parser-generator-lr--action-tables t))))
+     (message "action-tables: %s" (parser-generator--hash-values-to-list 
parser-generator-lr--action-tables t)))
+
+    ;; TODO Validate action-table here
+
+    ;; (should
+    ;;  (equal
+    ;;   '((0 (((a) reduce 2) ((e) reduce 2)))
+    ;;     (1 (((a) shift) ((e) accept)))
+    ;;     (2 (((a) reduce 2) ((b) reduce 2)))
+    ;;     (3 (((a) shift) ((b) shift)))
+    ;;     (4 (((a) reduce 2) ((b) reduce 2)))
+    ;;     (5 (((a) reduce 1) ((e) reduce 1)))
+    ;;     (6 (((a) shift) ((b) shift)))
+    ;;     (7 (((a) reduce 1) ((b) reduce 1))))
+    ;;   (parser-generator--hash-to-list
+    ;;    parser-generator-lr--action-tables)))
+    ;; (message "Passed ACTION-tables k = 2")
+
+    )
   (setq
    parser-generator-lex-analyzer--function
    (lambda (index)
@@ -629,7 +673,7 @@
   (parser-generator-lr-test--generate-action-tables)
   (parser-generator-lr-test-parse)
   (parser-generator-lr-test-translate)
-  ;; (parser-generator-lr-test-parse-k-2)
+  (parser-generator-lr-test-parse-k-2)
   )
 
 



reply via email to

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