branch: externals/parser-generator commit 446cbe94f38d44f223dd2fcd9a628c91c48b7d66 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Refactored unit tests and separated k=2 case --- test/parser-generator-lr-test.el | 59 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el index 629a052..a5654bc 100644 --- a/test/parser-generator-lr-test.el +++ b/test/parser-generator-lr-test.el @@ -439,6 +439,62 @@ (message "Passed tests for (parser-generator-lr--parse)")) +(defun parser-generator-lr-test-parse-k-2 () + "Test `parser-generator-lr-parse' with k = 2." + (message "Started tests for (parser-generator-lr-parse) k = 2") + + (setq + parser-generator-lex-analyzer--function + (lambda (index) + (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4) ("b" 4 . 5))) + (string-length (length string)) + (max-index index) + (tokens)) + (while (and + (< (1- index) string-length) + (< (1- index) max-index)) + (push (nth (1- index) string) tokens) + (setq index (1+ index))) + (nreverse tokens)))) + + (message "Starting test with look-ahead number = 2") + + (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b")) (S e)) Sp)) + (parser-generator-set-look-ahead-number 2) + (parser-generator-process-grammar) + (let ((lr-items (parser-generator-lr--generate-goto-tables))) + (parser-generator--debug + (message "lr-items: %s" (parser-generator--hash-values-to-list lr-items t))) + + ;; TODO Fix so that there is an accept path in look-ahead number 2 + + (parser-generator--debug + (message "goto-tables: %s" (parser-generator--hash-values-to-list parser-generator-lr--goto-tables t))) + (parser-generator-lr--generate-action-tables lr-items) + ;; TODO Should generate accept somewhere in this action-table + (parser-generator--debug + (message "action-tables: %s" (parser-generator--hash-values-to-list parser-generator-lr--action-tables t)))) + (setq + parser-generator-lex-analyzer--function + (lambda (index) + (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4))) + (string-length (length string)) + (max-index index) + (tokens)) + (while (and + (< (1- index) string-length) + (< (1- index) max-index)) + (push (nth (1- index) string) tokens) + (setq index (1+ index))) + (nreverse tokens)))) + (should + (equal + '(2 2 2 1 1) + (parser-generator-lr-parse))) + (message "Passed test with terminals as string with look-ahead-number 2") + + (message "Passed tests for (parser-generator-lr--parse-k-2)")) + (defun parser-generator-lr-test-translate () "Test `parser-generator-lr-translate'." (message "Started tests for (parser-generator-lr-translate)") @@ -605,7 +661,8 @@ (parser-generator-lr-test--generate-goto-tables) (parser-generator-lr-test--generate-action-tables) (parser-generator-lr-test-parse) - (parser-generator-lr-test-translate)) + (parser-generator-lr-test-translate) + (parser-generator-lr-test-parse-k-2)) (provide 'parser-generator-lr-test)