branch: externals/parser-generator commit 684526203ea2675c387144700d3add85b04681d1 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Passed GOTO-tables k=2 --- test/parser-generator-lr-test.el | 190 ++++++++++++++++++++------------------- 1 file changed, 97 insertions(+), 93 deletions(-) diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el index 1b35c2d..310ef17 100644 --- a/test/parser-generator-lr-test.el +++ b/test/parser-generator-lr-test.el @@ -421,62 +421,62 @@ (parser-generator--hash-to-list lr-items))) -;; (1) -;; S' -> .S [$$] // Go to 10 -;; S -> .R [$$] // Go to 8 -;; S -> .RS [$$] // Go to 8 -;; R -> .abT [$$] // Shift on ab, go to (2) -;; R -> .abT [ab] // Shift on ab, go to (2) - -;; (2) -;; R -> a.bT [$$] // Shift on ba, bc, b$, go to (3) -;; R -> a.bT [ab] // Shift on ba, bc, go to (3) - -;; (3) -;; R -> ab.T [$$] // Go to 7 -;; R -> ab.T [ab] // Go to 7 -;; T -> .aT [$$] // Shift on aa, ac, a$, go to (4) -;; T -> .c [$$] // Shift on c$, go to (5) -;; T -> . [$$] // Reduce on $$ -;; T -> .aT [ab] // Shift on aa, ac, go to (4) -;; T -> .c [ab] // Shift on ca, go to (5) -;; T -> . [ab] // Reduce on ab - -;; (4) -;; T -> a.T [$$] // Go to 6 -;; T -> a.T [ab] // Go to 6 -;; T -> . [$$] // Reduce on $$ -;; T -> .aT [$$] // Shift on aa, ac, a$, go to (4) -;; T -> .c [$$] // Shift on c$, go to (5) -;; T -> . [ab] // Reduce on ab -;; T -> .aT [ab] // Shift on aa, ac, go to (4) -;; T -> .c [ab] // Shift on ca, go to (5) - -;; (5) -;; T -> c. [$$] // Reduce on $$ -;; T -> c. [ab] // Reduce on ab - -;; (6) -;; T -> aT. [$$] // Reduce on $$ -;; T -> aT. [ab] // Reduce on ab - -;; (7) -;; R -> abT. [$$] // Reduce on $$ -;; R -> abT. [ab] // Reduce on ab - -;; (8) -;; S -> R. [$$] // Reduce on $$ -;; S -> R.S [$$] // Go to 9 -;; S -> .RS [$$] // Go to 8 -;; S -> .R [$$] // Go to 8 -;; R -> .abT [$$] // Shift on ab, go to (2) -;; R -> .abT [ab] // Shift on ab, go to (2) - -;; (9) -;; S -> RS. [$$] // Reduce on $$ - -;; (10) -;; S' -> S. [$$] // Accept on $$ + ;; (1) + ;; S' -> .S [$$] // Go to 10 + ;; S -> .R [$$] // Go to 8 + ;; S -> .RS [$$] // Go to 8 + ;; R -> .abT [$$] // Shift on ab, go to (2) + ;; R -> .abT [ab] // Shift on ab, go to (2) + + ;; (2) + ;; R -> a.bT [$$] // Shift on ba, bc, b$, go to (3) + ;; R -> a.bT [ab] // Shift on ba, bc, go to (3) + + ;; (3) + ;; R -> ab.T [$$] // Go to 7 + ;; R -> ab.T [ab] // Go to 7 + ;; T -> .aT [$$] // Shift on aa, ac, a$, go to (4) + ;; T -> .c [$$] // Shift on c$, go to (5) + ;; T -> . [$$] // Reduce on $$ + ;; T -> .aT [ab] // Shift on aa, ac, go to (4) + ;; T -> .c [ab] // Shift on ca, go to (5) + ;; T -> . [ab] // Reduce on ab + + ;; (4) + ;; T -> a.T [$$] // Go to 6 + ;; T -> a.T [ab] // Go to 6 + ;; T -> . [$$] // Reduce on $$ + ;; T -> .aT [$$] // Shift on aa, ac, a$, go to (4) + ;; T -> .c [$$] // Shift on c$, go to (5) + ;; T -> . [ab] // Reduce on ab + ;; T -> .aT [ab] // Shift on aa, ac, go to (4) + ;; T -> .c [ab] // Shift on ca, go to (5) + + ;; (5) + ;; T -> c. [$$] // Reduce on $$ + ;; T -> c. [ab] // Reduce on ab + + ;; (6) + ;; T -> aT. [$$] // Reduce on $$ + ;; T -> aT. [ab] // Reduce on ab + + ;; (7) + ;; R -> abT. [$$] // Reduce on $$ + ;; R -> abT. [ab] // Reduce on ab + + ;; (8) + ;; S -> R. [$$] // Reduce on $$ + ;; S -> R.S [$$] // Go to 9 + ;; S -> .RS [$$] // Go to 8 + ;; S -> .R [$$] // Go to 8 + ;; R -> .abT [$$] // Shift on ab, go to (2) + ;; R -> .abT [ab] // Shift on ab, go to (2) + + ;; (9) + ;; S -> RS. [$$] // Reduce on $$ + + ;; (10) + ;; S' -> S. [$$] // Accept on $$ (should (equal @@ -538,51 +538,55 @@ (message "Passed LR-items k = 2") (parser-generator--debug - (message "GOTO-tables: %s" + (message "GOTO-tables k = 2: %s" (parser-generator--hash-to-list parser-generator-lr--goto-tables t))) + ;; state | a | b | c | $ | S | R | T + ;; -------+-----+-----+-----+-----+-----+-----+----- + ;; 1 | 2 | | | | 10 | 8 | + ;; -------+-----+-----+-----+-----+-----+-----+----- + ;; 2 | | 3 | | | | | + ;; -------+-----+-----+-----+-----+-----+-----+----- + ;; 3 | 4 | | 5 | | | | 7 + ;; -------+-----+-----+-----+-----+-----+-----+----- + ;; 4 | 4 | | 5 | | | | 6 + ;; -------+-----+-----+-----+-----+-----+-----+----- + ;; 5 | | | | | | | + ;; -------+-----+-----+-----+-----+-----+-----+----- + ;; 6 | | | | | | | + ;; -------+-----+-----+-----+-----+-----+-----+----- + ;; 7 | | | | | | | + ;; -------+-----+-----+-----+-----+-----+-----+----- + ;; 8 | 2 | | | | 9 | 8 | + ;; -------+-----+-----+-----+-----+-----+-----+----- + ;; 9 | | | | | | | + ;; -------+-----+-----+-----+-----+-----+-----+----- + ;; 10 | | | | | | | + (should - (equal - '((0 ((R 2) (S 1) (a 3))) - (1 nil) - (2 ((R 10) (S 9) (a 11))) - (3 ((b 4))) - (4 ((T 5) (a 6) (c 7))) - (5 nil) - (6 ((T 8) (a 6) (c 7))) - (7 nil) - (8 nil) - (9 nil) - (10 ((R 10) (S 14) (a 11))) - (11 ((b 12))) - (12 ((T 13) (a 6) (c 7))) - (13 nil) - (14 nil)) - (parser-generator--hash-to-list - parser-generator-lr--goto-tables))) + (equal + '((0 ((R 1) (S 2) (a 3))) + (1 ((R 1) (S 9) (a 3))) + (2 nil) + (3 ((b 4))) + (4 ((T 5) (a 6) (c 7))) + (5 nil) + (6 ((T 8) (a 6) (c 7))) + (7 nil) + (8 nil) + (9 nil)) + (parser-generator--hash-to-list + parser-generator-lr--goto-tables))) (message "Passed GOTO-tables k = 2") - ;; TODO Validate lr-items here - - ;; (should - ;; (equal - ;; '((0 (((S) nil (S "a" S "b") ("a" e)) ((S) nil (S "a" S "b") ("a" "a")) ((S) nil (S "a" S "b") (e e)) ((S) nil nil ("a" e)) ((S) nil nil ("a" "a")) ((S) nil nil (e e)) ((Sp) nil (S) (e e)))) - ;; (1 (((S) (S) ("a" S "b") ("a" "a")) ((S) (S) ("a" S "b") ("a" e)) ((S) (S) ("a" S "b") (e e)) ((Sp) (S) nil (e e)))) - ;; (2 (((S) (S "a") (S "b") ("a" e)) ((S) (S "a") (S "b") ("a" "a")) ((S) (S "a") (S "b") (e e)) ((S) nil (S "a" S "b") ("a" e)) ((S) nil (S "a" S "b") ("a" "a")) ((S) nil (S "a" S "b") ("b" e)) ((S) nil nil ("a" e)) ((S) nil nil ("a" "a")) ((S) nil nil ("b" e)))) - ;; (3 (((S) (S) ("a" S "b") ("a" "a")) ((S) (S) ("a" S "b") ("a" e)) ((S) (S) ("a" S "b") ("b" e)) ((S) (S "a" S) ("b") ("a" "a")) ((S) (S "a" S) ("b") ("a" e)) ((S) (S "a" S) ("b") (e e)))) - ;; (4 (((S) (S "a") (S "b") ("a" e)) ((S) (S "a") (S "b") ("a" "a")) ((S) (S "a") (S "b") ("b" e)) ((S) nil (S "a" S "b") ("a" e)) ((S) nil (S "a" S "b") ("a" "a")) ((S) nil (S "a" S "b") ("b" e)) ((S) nil nil ("a" e)) ((S) nil nil ("a" "a")) ((S) nil nil ("b" e)))) - ;; (5 (((S) (S "a" S "b") nil ("a" e)) ((S) (S "a" S "b") nil ("a" "a")) ((S) (S "a" S "b") nil (e e)))) - ;; (6 (((S) (S) ("a" S "b") ("a" "a")) ((S) (S) ("a" S "b") ("a" e)) ((S) (S) ("a" S "b") ("b" e)) ((S) (S "a" S) ("b") ("a" "a")) ((S) (S "a" S) ("b") ("a" e)) ((S) (S "a" S) ("b") ("b" e)))) - ;; (7 (((S) (S "a" S "b") nil ("a" e)) ((S) (S "a" S "b") nil ("a" "a")) ((S) (S "a" S "b") nil ("b" e))))) - ;; (parser-generator--hash-to-list - ;; lr-items))) - ;; (message "Passed LR-items k = 2") - - (parser-generator-lr--generate-action-tables lr-items) + (parser-generator-lr--generate-action-tables + lr-items) (parser-generator--debug - (message "action-tables: %s" (parser-generator--hash-values-to-list parser-generator-lr--action-tables t))) + (message + "Action-tables k = 2: %s" + (parser-generator--hash-values-to-list parser-generator-lr--action-tables t))) ;; TODO Validate action-table here, should be able to reduce at look-ahead ("a" "b") as well