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

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

[elpa] externals/parser-generator f0de6698b9 29/82: Added todo item


From: Christian Johansson
Subject: [elpa] externals/parser-generator f0de6698b9 29/82: Added todo item
Date: Thu, 12 May 2022 13:28:15 -0400 (EDT)

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

    Added todo item
---
 parser-generator-ll.el           | 16 +++++++--
 parser-generator.el              |  2 +-
 test/parser-generator-ll-test.el | 71 ++++++++++++++++++++++++++++++++++++----
 3 files changed, 79 insertions(+), 10 deletions(-)

diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index 58d6d10576..82f4e383f7 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -59,7 +59,7 @@
            (list
             (list start)
             start-rhs
-            nil)
+            (list parser-generator--eof-identifier))
            stack))))
     (setq stack (nreverse stack))
     (parser-generator--debug
@@ -79,6 +79,10 @@
               (parser-generator--first parent-follow nil t t))
              (look-aheads)
              (sets))
+        (parser-generator--debug
+         (message "\nproduction-lhs: %S" production-lhs)
+         (message "production-rhs: %S" production-rhs)
+         (message "parent-follow: %S" parent-follow))
 
         (cond
          ((and first-rhs
@@ -106,6 +110,9 @@
              "Unexpected empty FIRST for production: %S and parent-follow: %S"
              production
              parent-follow)))
+        (parser-generator--debug
+         (message "look-aheads: %S" look-aheads))
+        ;; TODO merge-max-terminal-sets should do the right thing
 
         ;; For each non-terminal in the production right-hand side
         ;; push a new item to stack with a local-follow
@@ -116,6 +123,9 @@
             (let ((sub-symbol (nth sub-symbol-index production-rhs)))
               (when (parser-generator--valid-non-terminal-p
                      sub-symbol)
+                (parser-generator--debug
+                 (message
+                  "\nnon-terminal sub-symbol: %S" sub-symbol))
                 (let* ((follow-set
                         (nthcdr (1+ sub-symbol-index) production-rhs))
                        (merged-follow
@@ -127,7 +137,7 @@
                          sub-symbol)))
                   (parser-generator--debug
                    (message
-                    "\nfollow-set: %S for %S in %S"
+                    "follow-set: %S for %S in %S"
                     follow-set
                     (nth sub-symbol-index production-rhs)
                     production-rhs)
@@ -189,6 +199,8 @@
                  item-hash-key
                  t
                  distinct-item-p)
+                (parser-generator--debug
+                 (message "new table: %S" table))
                 (if (gethash
                      table-hash-key
                      tables)
diff --git a/parser-generator.el b/parser-generator.el
index d995fcbf7d..602391eb10 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -45,7 +45,7 @@
 
 (defvar
   parser-generator--debug
-  nil
+  t
   "Whether to print debug messages or not.")
 
 (defvar
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index 3a1d455f77..6f103ef8f8 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -33,27 +33,27 @@
    )
   (parser-generator-process-grammar)
   (let ((tables (parser-generator-ll--generate-tables)))
-    ;; (message "tables: %S" tables)
+    (message "tables: %S" tables)
     (should
      (equal
       tables
       '(
         (
-         ((A) (b a))
+         ((A) (b a)) ;; T A,{ba}
          (
           ((b b) (b) nil)
           ((b a) (e) nil)
           )
          )
         (
-         ((A) (a a))
+         ((A) (a a)) ;; T A,{aa}
          (
           ((a a) (e) nil)
           ((b a) (b) nil)
           )
          )
         (
-         ((S) nil)
+         ((S) ($)) ;; T0
          (
           ((a b) (a A a a) ((a a)))
           ((a a) (a A a a) ((a a)))
@@ -61,8 +61,66 @@
           )
          )
         )
+      )
+     ))
+
+  ;; TODO Pass Example 5.17 here
+  (parser-generator-set-eof-identifier '$)
+  (parser-generator-set-e-identifier 'e)
+  (parser-generator-set-look-ahead-number 2)
+  (parser-generator-set-grammar
+   '(
+     (S A)
+     (a b)
+     (
+      (S e (a b A))
+      (A (S a a) b)
+      )
+     S
+     )
+   )
+  (parser-generator-process-grammar)
+  (let* ((tables
+          (parser-generator-ll--generate-tables)))
+    (message "tables: %S" tables)
+    (should
+     (equal
+      tables
+      '(
+        (
+         ((S) nil) ;; T0
+         (
+          (($ $) (e) nil)
+          ((a b) (a b A) $)
+          )
+         )
+        (
+         ((A) nil) ;; T1
+         (
+          ((b $) (b) nil)
+          ((a a) (S a a) ((a a)))
+          ((a b) (S a a) ((a a)))
+          )
+         )
+        (
+         ((S) (a a)) ;; T2
+         (
+          ((a a) (e) nil)
+          ((a b) (a B a) ((a a)))
+          )
+         )
+        (
+         ((A) (a a)) ;; T3
+         (
+          ((a a) (S a a) ((a a)))
+          ((a b) (S a a) ((a a)))
+          ((b a) (b) nil)
+          )
+         )
+        )
       ))
-    tables)
+    )
+
 
   (message "Passed tests for (parser-generator-ll--generate-tables)"))
 
@@ -171,11 +229,10 @@
    )
   (parser-generator-process-grammar)
   (let* ((tables
-          (parser-generator-ll--generate-tables))
+          (parser-generator-ll--generate-tables)) ;; TODO Replace with 
hard-coded value here
          (parser-tables
           (parser-generator-ll--generate-parsing-table
            tables)))
-    (message "tables: %S" tables)
     (message "parser-tables: %S" parser-tables)
     (should
      (equal



reply via email to

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