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

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

[elpa] externals/parser-generator 2181545d26 64/82: Implemented test for


From: Christian Johansson
Subject: [elpa] externals/parser-generator 2181545d26 64/82: Implemented test for validation of LL(1) grammar
Date: Thu, 12 May 2022 13:28:19 -0400 (EDT)

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

    Implemented test for validation of LL(1) grammar
---
 parser-generator-ll.el           | 27 ++++++++-----
 test/parser-generator-ll-test.el | 82 +++++++++++++++++++++++++++++++++++++++-
 2 files changed, 97 insertions(+), 12 deletions(-)

diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index fd40b6e8d4..b38843cdf2 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -122,10 +122,11 @@
              (look-ahead-list
               (parser-generator-lex-analyzer--peek-next-look-ahead))
              (look-ahead))
-        (message "\nstack: %S" stack)
-        (message "output: %S" output)
-        (message "state: %S" state)
-        (message "state-action-table: %S" state-action-table)
+        (parser-generator--debug
+         (message "\nstack: %S" stack)
+         (message "output: %S" output)
+         (message "state: %S" state)
+         (message "state-action-table: %S" state-action-table))
 
         (unless state-action-table
           (signal
@@ -138,7 +139,8 @@
 
         (if look-ahead-list
             (progn
-              (message "look-ahead-list: %S" look-ahead-list)
+              (parser-generator--debug
+               (message "look-ahead-list: %S" look-ahead-list))
               (dolist (look-ahead-list-item look-ahead-list)
                 (push (car look-ahead-list-item) look-ahead))
               (setq look-ahead (reverse look-ahead)))
@@ -146,7 +148,8 @@
            look-ahead
            eof-look-ahead))
 
-        (message "look-ahead: %S" look-ahead)
+        (parser-generator--debug
+         (message "look-ahead: %S" look-ahead))
 
         (unless (gethash
                  (format "%S" look-ahead)
@@ -172,19 +175,23 @@
                  (format "%S" look-ahead)
                  state-action-table))
                (action-type action))
-          (message "action: %S" action)
+          (parser-generator--debug
+           (message "action: %S" action))
           (when (listp action)
             (setq action-type (car action)))
-          (message "action-type: %S" action-type)
+          (parser-generator--debug
+           (message "action-type: %S" action-type))
           (cond
 
            ((equal action-type 'pop)
-            (message "pushed: %S" look-ahead)
+            (parser-generator--debug
+             (message "pushed: %S" look-ahead))
             (parser-generator-lex-analyzer--pop-token)
             (pop stack))
 
            ((equal action-type 'reduce)
-            (message "reduced: %S" (nth 1 action))
+            (parser-generator--debug
+             (message "reduced: %S" (nth 1 action)))
             (pop stack)
             (unless (equal (nth 1 action) e-reduction)
               (dolist (reduce-item (reverse (nth 1 action)))
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index 299124950e..e25bef4014 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -471,7 +471,45 @@
      parser-generator-ll--table
      t)))
 
-  ;; TODO Should test k = 1 here as well
+  (parser-generator-set-eof-identifier '$)
+  (parser-generator-set-e-identifier 'e)
+  (parser-generator-set-look-ahead-number 1)
+  (parser-generator-set-grammar
+   '(
+     (S A)
+     (a b)
+     (
+      (S (a A S) b)
+      (A a (b S A))
+      )
+     S
+     )
+   )
+  (parser-generator-process-grammar)
+  (parser-generator-ll-generate-table)
+  ;; (message "parsing-table: %S" (parser-generator--hash-to-list 
parser-generator-ll--table t))
+  (should
+   (equal
+    '(
+      ("S"
+       (
+        ("(b)" (reduce (b) 1))
+        ("(a)" (reduce (a A S) 0))
+        )
+       )
+      ("A"
+       (
+        ("(b)" (reduce (b S A) 3))
+        ("(a)" (reduce (a) 2))
+        )
+       )
+      ("b" (("(b)" pop)))
+      ("a" (("(a)" pop)))
+      ("$" (("($)" accept)))
+      )
+    (parser-generator--hash-to-list
+     parser-generator-ll--table
+     t)))
 
   (message "Passed tests for (parser-generator-ll-generate-table)"))
 
@@ -643,7 +681,47 @@
   "Test `parser-generator-ll--valid-grammar-k-eq-1-p'."
   (message "Started tests for (parser-generator-ll--valid-grammar-k-eq-1-p)")
 
-  ;; TODO Implement this
+  (parser-generator-set-eof-identifier '$)
+  (parser-generator-set-e-identifier 'e)
+  (parser-generator-set-look-ahead-number 1)
+  (parser-generator-set-grammar
+   '(
+     (S A B)
+     (a b)
+     (
+      (S (a A S) b B)
+      (A a (b S A))
+      (B a)
+      )
+     S
+     )
+   )
+  (parser-generator-process-grammar)
+  (should
+   (equal
+    nil
+    (parser-generator-ll--valid-grammar-k-eq-1-p)))
+
+  (parser-generator-set-eof-identifier '$)
+  (parser-generator-set-e-identifier 'e)
+  (parser-generator-set-look-ahead-number 1)
+  (parser-generator-set-grammar
+   '(
+     (S A B)
+     (a b c)
+     (
+      (S (a A S) b B)
+      (A a (b S A))
+      (B c)
+      )
+     S
+     )
+   )
+  (parser-generator-process-grammar)
+  (should
+   (equal
+    t
+    (parser-generator-ll--valid-grammar-k-eq-1-p)))
 
   (message "Passed tests for (parser-generator-ll--valid-grammar-k-eq-1-p)"))
 



reply via email to

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