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

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

[elpa] externals/parser-generator 1b8f025 016/434: More work on validati


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 1b8f025 016/434: More work on validating a grammar structure
Date: Mon, 29 Nov 2021 15:58:59 -0500 (EST)

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

    More work on validating a grammar structure
---
 parser.el           | 33 +++++++++++++++++++++++++++++++++
 test/parser-test.el |  7 +++++++
 2 files changed, 40 insertions(+)

diff --git a/parser.el b/parser.el
index ca57f8f..f834667 100644
--- a/parser.el
+++ b/parser.el
@@ -134,6 +134,39 @@
                   (stringp (nth 3 G))
                   (symbolp (nth 3 G))))))
       (setq valid-p nil))
+    (when valid-p
+
+      ;; Check every non-terminal
+      (let ((non-terminals (nth 0 G)))
+        (let ((non-terminal-count (length non-terminals))
+              (non-terminal-index 0))
+          (while (and
+                  valid-p
+                  (< non-terminal-index non-terminal-count))
+            (let ((non-terminal (nth non-terminal-index non-terminals)))
+              (unless (or
+                       (symbolp non-terminal)
+                       (stringp non-terminal))
+                (setq valid-p nil)))
+            (setq non-terminal-index (1+ non-terminal-index)))))
+
+      ;; Check every terminal
+      (let ((terminals (nth 1 G)))
+        (let ((terminal-count (length terminals))
+              (terminal-index 0))
+          (while (and
+                  valid-p
+                  (< terminal-index terminal-count))
+            (let ((terminal (nth terminal-index terminals)))
+              (unless (or
+                       (symbolp terminal)
+                       (stringp terminal))
+                (setq valid-p nil)))
+            (setq terminal-index (1+ terminal-index)))))
+
+      ;; TODO Check every production
+      ;; TODO Check start
+      )
     valid-p))
 
 (defun parser--valid-look-ahead-number-p (k)
diff --git a/test/parser-test.el b/test/parser-test.el
index d12a4e5..b7686da 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -270,11 +270,18 @@
 
   (message "Passed tests for (parser--valid-look-ahead-number-p)"))
 
+(defun parser-test--valid-sentential-form-p ()
+  "Test `parser--valid-sentential-form-p'."
+  (message "Starting tests  for (parser--valid-sentential-form-p)")
+
+  (message "Passed tests for (parser--valid-sentential-form-p)"))
+
 (defun parser-test ()
   "Run test."
   (parser-test--valid-look-ahead-number-p)
   (parser-test--valid-grammar-p)
   (parser-test--distinct)
+  (parser-test--valid-sentential-form-p)
   (parser-test--first)
   (parser-test--empty-free-first)
   ;; (parser-test--v-set)



reply via email to

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