branch: externals/parser-generator commit 1613e2e2b2e49257f845f21028cabb9f58292994 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Byte-compilation and unit tests working after refactor --- parser-lr.el | 25 +++++++++++++++++++------ test/parser-lr-test.el | 13 ++++++++----- test/parser-test.el | 41 ----------------------------------------- 3 files changed, 27 insertions(+), 52 deletions(-) diff --git a/parser-lr.el b/parser-lr.el index 5562ad8..0aa54d4 100644 --- a/parser-lr.el +++ b/parser-lr.el @@ -12,16 +12,29 @@ ;;; Variables: +(defvar parser-lr--action-tables + nil + "Action-tables for grammar.") (defvar parser-lr--goto-tables nil - "GOTO-tables for grammar.") + "Goto-tables for grammar.") (defvar parser-lr--items nil "Hash-table for distinct LR-items in grammar.") +;; Functions + + +(defun parser-lr--reset () + "Reset variables." + (setq parser-lr--action-tables nil) + (setq parser-lr--goto-tables nil) + (setq parser-lr--items nil)) + + ;; Main Algorithms ;; Algorithm 5.9, p. 389 @@ -30,8 +43,8 @@ (unless (or parser-lr--goto-tables parser-lr--items) - (setq parser--goto-table nil) - (setq parser--table-lr-items (make-hash-table :test 'equal)) + (setq parser-lr--goto-tables nil) + (setq parser-lr--items (make-hash-table :test 'equal)) (let ((lr-item-set-new-index 0) (goto-table) (unmarked-lr-item-sets) @@ -62,7 +75,7 @@ ;; (2) Mark a (puthash lr-items lr-item-set-index marked-lr-item-sets) - (puthash lr-item-set-index lr-items parser--table-lr-items) + (puthash lr-item-set-index lr-items parser-lr--items) (setq goto-table-table nil) ;; (2) By computing for each X in N u E, GOTO (a, X). (Algorithm 5.8 can be used here.) @@ -100,10 +113,10 @@ (setq goto-table-table (sort goto-table-table 'parser--sort-list)) (push `(,lr-item-set-index ,goto-table-table) goto-table))) - (setq parser--goto-table (sort goto-table 'parser--sort-list))) + (setq parser-lr--goto-tables (sort goto-table 'parser--sort-list))) (unless (parser-lr--items-valid-p - (parser--hash-values-to-list parser--table-lr-items t)) + (parser--hash-values-to-list parser-lr--items t)) (error "Inconsistent grammar!"))) t) diff --git a/test/parser-lr-test.el b/test/parser-lr-test.el index d2483f0..8988a3b 100644 --- a/test/parser-lr-test.el +++ b/test/parser-lr-test.el @@ -14,13 +14,14 @@ (message "Starting tests for (parser-lr--generate-goto-tables)") ;; Example 5.30, p. 389 + (parser-lr--reset) (parser--set-grammar '((Sp S) (a b) ((Sp S) (S (S a S b)) (S e)) Sp)) (parser--set-look-ahead-number 1) (parser-lr--generate-goto-tables) - ;; (message "GOTO-table: %s" parser--goto-table) - ;; (message "LR-items: %s" (parser--hash-to-list parser--table-lr-items)) + ;; (message "GOTO-table: %s" parser-lr--goto-tables) + ;; (message "LR-items: %s" (parser--hash-to-list parser-lr--items)) (should (equal @@ -32,7 +33,7 @@ (5 nil) (6 ((a 4) (b 7))) (7 nil)) - parser--goto-table)) + parser-lr--goto-tables)) (should (equal @@ -44,7 +45,7 @@ (5 ((S (S a S b) nil (a)) (S (S a S b) nil (e)))) (6 ((S (S) (a S b) (a)) (S (S) (a S b) (b)) (S (S a S) (b) (a)) (S (S a S) (b) (b)))) (7 ((S (S a S b) nil (a)) (S (S a S b) nil (b))))) - (parser--hash-to-list parser--table-lr-items))) + (parser--hash-to-list parser-lr--items))) (message "Passed LR-items for example 5.30") @@ -55,6 +56,7 @@ (message "Starting tests for (parser-lr--items-for-prefix)") ;; Example 5.29 p 387 + (parser-lr--reset) (parser--set-grammar '((Sp S) (a b) ((Sp S) (S (S a S b)) (S e)) Sp)) (parser--set-look-ahead-number 1) @@ -139,13 +141,14 @@ "Test `parser-lr--items-valid-p'." (message "Started tests for (parser-lr--items-valid-p)") + (parser-lr--reset) (parser--set-grammar '((Sp S) (a b) ((Sp S) (S (S a S b)) (S e)) Sp)) (parser--set-look-ahead-number 1) (parser-lr--generate-goto-tables) (should (equal t - (parser-lr--items-valid-p (parser--hash-values-to-list parser--table-lr-items t)))) + (parser-lr--items-valid-p (parser--hash-values-to-list parser-lr--items t)))) (message "Passed first") diff --git a/test/parser-test.el b/test/parser-test.el index a8467b3..bfe3f07 100644 --- a/test/parser-test.el +++ b/test/parser-test.el @@ -223,47 +223,6 @@ (message "Passed tests for (parser--empty-free-first)")) -(defun parser-test--generate-tables-for-lr () - "Test `parser--generate-tables-for-lr'." - (message "Starting tests for (parser--generate-tables-for-lr)") - - ;; Example 5.30, p. 389 - (parser--set-grammar '((Sp S) (a b) ((Sp S) (S (S a S b)) (S e)) Sp)) - (parser--set-look-ahead-number 1) - - (parser--generate-tables-for-lr) - - ;; (message "GOTO-table: %s" parser--goto-table) - ;; (message "LR-items: %s" (parser--hash-to-list parser--table-lr-items)) - - (should - (equal - '((0 ((S 1))) - (1 ((a 2))) - (2 ((S 3))) - (3 ((a 4) (b 5))) - (4 ((S 6))) - (5 nil) - (6 ((a 4) (b 7))) - (7 nil)) - parser--goto-table)) - - (should - (equal - '((0 ((S nil (S a S b) (a)) (S nil (S a S b) (e)) (S nil nil (a)) (S nil nil (e)) (Sp nil (S) (e)))) - (1 ((S (S) (a S b) (a)) (S (S) (a S b) (e)) (Sp (S) nil (e)))) - (2 ((S (S a) (S b) (a)) (S (S a) (S b) (e)) (S nil (S a S b) (a)) (S nil (S a S b) (b)) (S nil nil (a)) (S nil nil (b)))) - (3 ((S (S) (a S b) (a)) (S (S) (a S b) (b)) (S (S a S) (b) (a)) (S (S a S) (b) (e)))) - (4 ((S (S a) (S b) (a)) (S (S a) (S b) (b)) (S nil (S a S b) (a)) (S nil (S a S b) (b)) (S nil nil (a)) (S nil nil (b)))) - (5 ((S (S a S b) nil (a)) (S (S a S b) nil (e)))) - (6 ((S (S) (a S b) (a)) (S (S) (a S b) (b)) (S (S a S) (b) (a)) (S (S a S) (b) (b)))) - (7 ((S (S a S b) nil (a)) (S (S a S b) nil (b))))) - (parser--hash-to-list parser--table-lr-items))) - - (message "Passed LR-items for example 5.30") - - (message "Passed tests for (parser--generate-tables-for-lr)")) - (defun parser-test--valid-grammar-p () "Test function `parser--valid-grammar-p'." (message "Starting tests for (parser--valid-grammar-p)")