branch: externals/parser-generator
commit 1b8f02569b077b56a0a18a8cf518c28bd1dd7092
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
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)