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

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

[elpa] externals/parser-generator 5c0bcd5f9a 36/82: Passing test for LL-


From: Christian Johansson
Subject: [elpa] externals/parser-generator 5c0bcd5f9a 36/82: Passing test for LL-table generation example 5.17
Date: Thu, 12 May 2022 13:28:15 -0400 (EDT)

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

    Passing test for LL-table generation example 5.17
---
 parser-generator-ll.el           | 23 +++++++++++++++------
 test/parser-generator-ll-test.el | 44 +++++++++++++++++-----------------------
 2 files changed, 36 insertions(+), 31 deletions(-)

diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index e8c1ff7f7e..c31b8ec216 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -142,10 +142,15 @@
                   "\nnon-terminal sub-symbol: %S" sub-symbol))
                 (let* ((follow-set
                         (nthcdr (1+ sub-symbol-index) production-rhs))
-                       (merged-follow
-                        (append follow-set parent-follow))
+                       (first-follow-set
+                        (parser-generator--first follow-set nil t t))
+                       (saturated-first-follow-set
+                        (parser-generator-generate-terminal-saturated-first-set
+                         first-follow-set))
                        (local-follow-set
-                        (parser-generator--first merged-follow nil t t))
+                        (parser-generator--merge-max-terminal-sets
+                         saturated-first-follow-set
+                         (list parent-follow)))
                        (sub-symbol-rhss
                         (parser-generator--get-grammar-rhs
                          sub-symbol)))
@@ -156,13 +161,19 @@
                   
                   (parser-generator--debug
                    (message
-                    "follow-set: %S for %S in %S"
+                    "\nfollow-set: %S for %S in %S"
                     follow-set
                     (nth sub-symbol-index production-rhs)
                     production-rhs)
                    (message
-                    "merged-follow: %S"
-                    follow-set)
+                    "first-follow-set: %S"
+                    first-follow-set)
+                   (message
+                    "saturated-first-follow-set: %S"
+                    saturated-first-follow-set)
+                   (message
+                    "parent-follow: %S"
+                    parent-follow)
                    (message
                     "local-follow-set: %S"
                     local-follow-set)
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index 8a3068dcca..fd6f70c598 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -16,8 +16,6 @@
   "Test `parser-generator-ll--generate-tables'."
   (message "Started tests for (parser-generator-ll--generate-tables)")
 
-  ;; Example 5.14 p. 350
-  ;; Example 5.15 p. 351
   (parser-generator-set-e-identifier 'e)
   (parser-generator-set-look-ahead-number 2)
   (parser-generator-set-grammar
@@ -63,9 +61,8 @@
         )
       )
      ))
-  (message "Passed Example 5.14 p. 350")
+  (message "Passed Example 5.14 p. 350 and 5.15 p. 351")
 
-  ;; TODO Pass Example 5.17 here
   (parser-generator-set-eof-identifier '$)
   (parser-generator-set-e-identifier 'e)
   (parser-generator-set-look-ahead-number 2)
@@ -83,45 +80,44 @@
   (parser-generator-process-grammar)
   (let* ((tables
           (parser-generator-ll--generate-tables)))
-    (message "tables: %S" tables)
     (should
      (equal
       tables
       '(
         (
-         ((S) ($)) ;; T0
-         (
-          (($ $) (e) nil)
-          ((a b) (a b A) $)
-          )
-         )
-        (
-         ((A) ($)) ;; T1
+         ((A) (a a)) ;; T3
          (
-          ((b $) (b) nil)
-          ((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 a) (e) nil)
-          ((a b) (a B a) ((a a)))
           )
          )
         (
-         ((A) (a a)) ;; T3
+         ((A) ($)) ;; T1
          (
-          ((a a) (S a a) ((a a)))
           ((a b) (S a a) ((a a)))
-          ((b a) (b) nil)
+          ((a a) (S a a) ((a a)))
+          ((b $) (b) nil)
+          )
+         )
+        (
+         ((S) ($)) ;; T0
+         (
+          (($ $) (e) nil)
+          ((a b) (a b A) (($)))
           )
          )
         )
       ))
     )
-  (message "Passed Example 5.17")
+  (message "Passed Example 5.17 p. 354")
 
 
   (message "Passed tests for (parser-generator-ll--generate-tables)"))
@@ -163,8 +159,6 @@
          (parser-tables
           (parser-generator-ll--generate-parsing-table
            tables)))
-    ;; (message "parser-tables: %S" parser-tables)
-
     (should
      (equal
       '(
@@ -212,9 +206,9 @@
          )
         )
       parser-tables)))
-  (message "Passed Example 5.16")
+  (message "Passed Example 5.16 p. 352")
 
-  ;; TODO Test Example 5.17 here
+  ;; TODO Make this pass
   (parser-generator-set-eof-identifier '$)
   (parser-generator-set-e-identifier 'e)
   (parser-generator-set-look-ahead-number 2)
@@ -248,7 +242,7 @@
          )
         )
       parser-tables)))
-  (message "Passed example 5.17")
+  (message "Passed example 5.17 p. 354")
 
   (message "Passed tests for (parser-generator-ll--generate-parsing-table)"))
 



reply via email to

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