branch: externals/parser-generator commit 1b8f02569b077b56a0a18a8cf518c28bd1dd7092 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@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)