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

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

[elpa] externals/parser-generator 412fd2a 273/434: Passing generation of


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 412fd2a 273/434: Passing generation of GOTO-table for LR(0) grammar
Date: Mon, 29 Nov 2021 15:59:56 -0500 (EST)

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

    Passing generation of GOTO-table for LR(0) grammar
---
 parser-generator-lr.el           |   3 +-
 test/parser-generator-lr-test.el | 114 ++++++++++++++++-----------------------
 2 files changed, 49 insertions(+), 68 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 64ae584..088a30a 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -192,7 +192,8 @@
                    ((eq state 'error)
                     (unless found-action
                       (error
-                       "Failed to find any action in set %s"
+                       "Failed to find any action in set %d: %s"
+                       lr-item-index
                        lr-items))
                     (setq continue-loop nil)))
                   (setq lr-item-index (1+ lr-item-index)))))))
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index e664dea..39938cb 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -815,99 +815,79 @@
        lr-items)))
     (message "Passed LR-items k = 0")
 
-    ;; TODO Replace all below
-
     (parser-generator--debug
-     (message "GOTO-tables k = 0: %s"
-              (parser-generator--hash-to-list
-               parser-generator-lr--goto-tables
-               t)))
-
-    ;; state |  a  |  b  |  c  |  $  |  S  |  R  |  T
-    ;; -------+-----+-----+-----+-----+-----+-----+-----
-    ;;    1   |  2  |     |     |     |  10 |  8  |
-    ;; -------+-----+-----+-----+-----+-----+-----+-----
-    ;;    2   |     |  3  |     |     |     |     |
-    ;; -------+-----+-----+-----+-----+-----+-----+-----
-    ;;    3   |  4  |     |  5  |     |     |     |  7
-    ;; -------+-----+-----+-----+-----+-----+-----+-----
-    ;;    4   |  4  |     |  5  |     |     |     |  6
-    ;; -------+-----+-----+-----+-----+-----+-----+-----
-    ;;    5   |     |     |     |     |     |     |
-    ;; -------+-----+-----+-----+-----+-----+-----+-----
-    ;;    6   |     |     |     |     |     |     |
-    ;; -------+-----+-----+-----+-----+-----+-----+-----
-    ;;    7   |     |     |     |     |     |     |
-    ;; -------+-----+-----+-----+-----+-----+-----+-----
-    ;;    8   |  2  |     |     |     |  9  |  8  |
-    ;; -------+-----+-----+-----+-----+-----+-----+-----
-    ;;    9   |     |     |     |     |     |     |
-    ;; -------+-----+-----+-----+-----+-----+-----+-----
+     (message
+      "GOTO-tables k = 0: %s"
+      (parser-generator--hash-to-list
+       parser-generator-lr--goto-tables
+       t)))
+
+    ;;         *       +       0       1       E       B
+    ;; 0                       1       2       3       4
+    ;; 1                                                
+    ;; 2                                                
+    ;; 3       5       6                                
+    ;; 4                                                
+    ;; 5                       1       2               7
+    ;; 6                       1       2               8
+    ;; 7                                                
+    ;; 8                                                 
 
     (should
      (equal
-      '((0 ((R 1) (S 2) (a 3)))
-        (1 ((R 1) (S 9) (a 3)))
+      '((0 (("0" 1) ("1" 2) (B 3) (E 4))) ;; 3-4
+        (1 nil)
         (2 nil)
-        (3 ((b 4)))
-        (4 ((T 5) (a 6) (c 7)))
-        (5 nil)
-        (6 ((T 8) (a 6) (c 7)))
+        (3 nil)
+        (4 (("*" 5) ("+" 6))) ;; 5-6
+        (5 (("0" 1) ("1" 2) (B 8))) ;;7-8
+        (6 (("0" 1) ("1" 2) (B 7))) ;; 7-8
         (7 nil)
         (8 nil))
       (parser-generator--hash-to-list
        parser-generator-lr--goto-tables)))
     (message "Passed GOTO-tables k = 2")
 
-    ;; state | aa | ab | ac | a$ | ba | bb | bc | b$ | ca | cb | cc | c$ | $$ 
-    ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
-    ;;   1   |    | S  |    |    |    |    |    |    |    |    |    |    |
-    ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
-    ;;   2   |    |    |    |    | S  |    | S  | S  |    |    |    |    |
-    ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
-    ;;   3   | S  | R  | S  | S  |    |    |    |    | S  |    |    | S  | R
-    ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
-    ;;   4   | S  | R  | S  | S  |    |    |    |    | S  |    |    | S  | R
-    ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
-    ;;   5   |    | R  |    |    |    |    |    |    |    |    |    |    | R
-    ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
-    ;;   6   |    | R  |    |    |    |    |    |    |    |    |    |    | R
-    ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
-    ;;   7   |    | R  |    |    |    |    |    |    |    |    |    |    | R
-    ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
-    ;;   8   |    | S  |    |    |    |    |    |    |    |    |    |    | R
-    ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
-    ;;   9   |    |    |    |    |    |    |    |    |    |    |    |    | R
-    ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
-    ;;   10  |    |    |    |    |    |    |    |    |    |    |    |    | A
+    ;;         *       +       0       1       $
+    ;; 0                       s1      s2      
+    ;; 1       r4      r4      r4      r4      r4
+    ;; 2       r5      r5      r5      r5      r5
+    ;; 3       s5      s6                      acc
+    ;; 4       r3      r3      r3      r3      r3
+    ;; 5                       s1      s2      
+    ;; 6                       s1      s2      
+    ;; 7       r1      r1      r1      r1      r1
+    ;; 8       r2      r2      r2      r2      r2
 
     (parser-generator-lr--generate-action-tables
      lr-items)
     (parser-generator--debug
      (message
-      "Action-tables k = 2: %s"
-      (parser-generator--hash-to-list parser-generator-lr--action-tables)))
+      "Action-tables k = 0: %s"
+      (parser-generator--hash-to-list
+       parser-generator-lr--action-tables)))
 
     (should
      (equal
       '(
-        (0 (((a b) shift)))
-        (1 ((($ $) reduce 2) ((a b) shift)))
-        (2 ((($ $) accept)))
-        (3 (((b $) shift) ((b c) shift) ((b a) shift)))
-        (4 ((($ $) reduce 6) ((a b) reduce 6) ((a $) shift) ((a c) shift) ((a 
a) shift) ((c a) shift) ((c $) shift)))
-        (5 ((($ $) reduce 3) ((a b) reduce 3)))
-        (6 ((($ $) reduce 6) ((a b) reduce 6) ((a $) shift) ((a c) shift) ((a 
a) shift) ((c a) shift) ((c $) shift)))
-        (7 ((($ $) reduce 5) ((a b) reduce 5)))
-        (8 ((($ $) reduce 4) ((a b) reduce 4)))
-        (9 ((($ $) reduce 1)))
+        (0 ((("0") shift) (("1") shift)))
+        (1 ((("*") reduce 3) (("+" reduce 3)) (("0") reduce 3) (("1") reduce 
3) (($) reduce 3)))
+        (2 ((("*") reduce 6) (("+") reduce 6) (("0") reduce 6) (("1") reduce 
6) (($) reduce 6)))
+        (3 ((("*") reduce 4) (("+") reduce 4) (("0") reduce 4) (("1") reduce 
4) (($) accept)))
+        (4 ((("*") shift) (("+") shift) (($) accept)))
+        (5 ((("0") shift) (("1") shift)))
+        (6 ((("0") shift) (("1") shift)))
+        (7 ((("*") reduce 2) (("+") reduce 2) (("0") reduce 2) (("1") reduce 
2) (($) reduce 1)))
+        (8 ((("*") reduce 1) (("+") reduce 1) (("0") reduce 1) (("1") reduce 
1) (($) reduce 2)))
         )
       (parser-generator--hash-to-list
        parser-generator-lr--action-tables)))
-    (message "Passed ACTION-tables k = 2")
+    (message "Passed ACTION-tables k = 0")
 
     )
 
+  ;; TODO Replace below with parse of k=0
+
   (let ((buffer (generate-new-buffer "*a*")))
     (switch-to-buffer buffer)
     (kill-region (point-min) (point-max))



reply via email to

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