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

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

[elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item


From: Christian Johansson
Subject: [elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item
Date: Thu, 12 May 2022 13:28:17 -0400 (EDT)

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

    Created TODO item
---
 parser-generator-ll.el           |  33 ++++++------
 parser-generator.el              |   2 +-
 test/parser-generator-ll-test.el | 110 ++++++++++++++++++++-------------------
 3 files changed, 74 insertions(+), 71 deletions(-)

diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index dec9f6b668..4046699a19 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -259,8 +259,7 @@
         ;; push a new item to stack with a local-follow
         ;; and a new left-hand-side
         (let ((sub-symbol-index 0)
-              (sub-symbol-length (length production-rhs))
-              (found-first-non-terminal-p))
+              (sub-symbol-length (length production-rhs)))
           (while (< sub-symbol-index sub-symbol-length)
             (let ((sub-symbol (nth sub-symbol-index production-rhs)))
               (when (parser-generator--valid-non-terminal-p
@@ -302,15 +301,14 @@
                    (message
                     "sub-symbol-rhss: %S"
                     sub-symbol-rhss))
+                  (push
+                   local-follow-set
+                   sets)
+                  (parser-generator--debug
+                   (message
+                    "pushed local follow set to sets: %S"
+                    local-follow-set))
                   (dolist (local-follow local-follow-set)
-                    (unless found-first-non-terminal-p
-                      (parser-generator--debug
-                       (message
-                        "pushed local follow to set: %S"
-                        local-follow))
-                      (push
-                       local-follow
-                       sets))
                     (dolist (sub-symbol-rhs sub-symbol-rhss)
                       (let* ((new-stack-item
                               (list
@@ -330,15 +328,17 @@
                            distinct-stack-item-p)
                           (push
                            new-stack-item
-                           stack)))))
-                  (unless found-first-non-terminal-p
-                    (setq
-                     found-first-non-terminal-p
-                     t)))))
+                           stack))))))))
             (setq
              sub-symbol-index
              (1+ sub-symbol-index))))
 
+        (setq sets (reverse sets))
+        (parser-generator--debug
+         (message
+          "\nsets: %S"
+          sets))
+
         ;; Add all distinct combinations of left-hand-side,
         ;; look-aheads and parent-follow to tables list here
         (when look-aheads
@@ -381,8 +381,7 @@
                   (puthash
                    table-hash-key
                    (list table)
-                   tables)
-                  )))))
+                   tables))))))
 
         (parser-generator--debug
          (message "\nproduction-lhs: %S" production-lhs)
diff --git a/parser-generator.el b/parser-generator.el
index 7ee5f722d6..e0b8500766 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 c06e25a076..2c566be67b 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -31,6 +31,7 @@
    )
   (parser-generator-process-grammar)
   (let ((tables (parser-generator-ll--generate-tables)))
+    ;; (message "tables: %S" tables)
     (should
      (equal
       tables
@@ -52,9 +53,9 @@
         (
          ((S) ($)) ;; T0
          (
-          ((a b) (a A a a) ((a a)))
-          ((a a) (a A a a) ((a a)))
-          ((b b) (b A b a) ((b a)))
+          ((a b) (a A a a) (((a a))))
+          ((a a) (a A a a) (((a a))))
+          ((b b) (b A b a) (((b a))))
           )
          )
         )
@@ -79,6 +80,7 @@
   (parser-generator-process-grammar)
   (let* ((tables
           (parser-generator-ll--generate-tables)))
+    ;; (message "tables: %S" tables)
     (should
      (equal
       tables
@@ -86,23 +88,23 @@
         (
          ((A) (a a)) ;; T3
          (
-          ((a b) (S a a) ((a a)))
-          ((a a) (S a a) ((a a)))
+          ((a b) (S a a) (((a a))))
+          ((a a) (S a a) (((a a))))
           ((b a) (b) nil)
           )
          )
         (
          ((S) (a a)) ;; T2
          (
-          ((a b) (a b A) ((a a)))
+          ((a b) (a b A) (((a a))))
           ((a a) (e) nil)
           )
          )
         (
          ((A) ($)) ;; T1
          (
-          ((a b) (S a a) ((a a)))
-          ((a a) (S a a) ((a a)))
+          ((a b) (S a a) (((a a))))
+          ((a a) (S a a) (((a a))))
           ((b $) (b) nil)
           )
          )
@@ -110,7 +112,7 @@
          ((S) ($)) ;; T0
          (
           (($ $) (e) nil)
-          ((a b) (a b A) (($)))
+          ((a b) (a b A) ((($))))
           )
          )
         )
@@ -144,20 +146,20 @@
          ((A) (a))
          (
           ((a) (a) nil)
-          ((b) (b S A) ((b) (a)))
+          ((b) (b S A) (((a) (b)) ((a))))
           )
          )
         (
          ((S) (a))
          (
-          ((a) (a A S) ((b) (a)))
+          ((a) (a A S) (((a) (b)) ((a))))
           ((b) (b) nil)
           )
          )
         (
          ((S) (b))
          (
-          ((a) (a A S) ((b) (a)))
+          ((a) (a A S) (((a) (b)) ((b))))
           ((b) (b) nil)
           )
          )
@@ -165,20 +167,19 @@
          ((A) (b))
          (
           ((a) (a) nil)
-          ((b) (b S A) ((b) (a)))
+          ((b) (b S A) (((a) (b)) ((b))))
           )
          )
         (
          ((S) ($))
          (
-          ((a) (a A S) ((b) (a)))
+          ((a) (a A S) (((a) (b)) (($))))
           ((b) (b) nil)
           )
          )
         )
-      )
      )
-    )
+    ))
   (message "Passed Example 5.5 p. 340")
 
   (parser-generator-set-eof-identifier '$)
@@ -203,59 +204,62 @@
     (message "tables: %S" tables)
     (should
      (equal
-      '(
+      '
+      (
+       (
+        ((E2) (")"))
         (
-         ((E2) (")"))
-         (
-          ((")") (e) nil)
-          (("+") ("+" T E2) (("+")))
-          )
+         ((")") (e) nil)
+         (("+") ("+" T E2) ((("+") (")")) ((")"))))
          )
+        )
+       (
+        ((E) (")"))
         (
-         ((E) (")"))
-         (
-          (("(") (T E2) (("+")))
-          (("a") (T E2) (("+")))
-          )
+         (("(") (T E2) ((("+") (")")) ((")"))))
+         (("a") (T E2) ((("+") (")")) ((")"))))
          )
+        )
+       (
+        ((F) ("*"))
         (
-         ((F) ("*"))
-         (
-          (("(") ("(" E ")") ((")")))
-          (("a") ("a") nil)
-          )
+         (("(") ("(" E ")") (((")"))))
+         (("a") ("a") nil)
          )
+        )
+       (
+        ((T2) ("+"))
         (
-         ((T2) ("+"))
-         (
-          (("*") ("*" F T2) (("*")))
-          (("+") (e) nil)
-          )
+         (("*") ("*" F T2) ((("*") ("+")) (("+"))))
+         (("+") (e) nil)
          )
+        )
+       (
+        ((T) ("+"))
         (
-         ((T) ("+"))
-         (
-          (("(") (F T2) (("*")))
-          (("a") (F T2) (("*")))
-          )
+         (("(") (F T2) ((("*") ("+")) (("+"))))
+         (("a") (F T2) ((("*") ("+")) (("+"))))
          )
+        )
+       (
+        ((E2) ($))
         (
-         ((E2) ($))
-         (
-          (($) (e) nil)
-          (("+") ("+" T E2) (("+")))
-          )
+         (($) (e) nil)
+         (("+") ("+" T E2) ((("+") ($)) (($))))
          )
+        )
+       (
+        ((E) ($))
         (
-         ((E) ($))
-         (
-          (("(") (T E2) (("+")))
-          (("a") (T E2) (("+")))
-          )
+         (("(") (T E2) ((("+") ($)) (($))))
+         (("a") (T E2) ((("+") ($)) (($))))
          )
         )
+       )
       tables)))
-  ;; TODO Verify above
+  ;; TODO Make above pass
+  ;; TODO There are issues calculating Y for a non-terminal
+  ;; were a non-terminal follows that has a alternative e-rule
   (message "Passed Example 5.12 p. 346-347")
 
   (message "Passed tests for (parser-generator-ll--generate-tables)"))



reply via email to

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