branch: externals/parser-generator commit 3a0d4cd5f74b41aaa17b301509829d0450c6488b Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Added translation test for LRk=2 --- test/parser-generator-lr-test.el | 39 ++++++++++++++++++++++++++++++++++++++- test/parser-generator-test.el | 6 ++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el index 69ae4c6..f2a3f33 100644 --- a/test/parser-generator-lr-test.el +++ b/test/parser-generator-lr-test.el @@ -680,7 +680,44 @@ (kill-buffer)) - ;; TODO Test translate here + (let ((buffer (generate-new-buffer "*a*"))) + (switch-to-buffer buffer) + (kill-region (point-min) (point-max)) + (insert "abac") + + (parser-generator-set-grammar + '((Sp S R T) ("a" "b" "c") ((Sp S) (S (R S) (R)) (R ("a" "b" T (lambda(args) (list "begin" (nth 2 args) "end")))) (T ("a" T (lambda() "test")) ("c") (e))) Sp)) + (parser-generator-set-look-ahead-number 2) + (parser-generator-process-grammar) + (parser-generator-lr-generate-parser-tables) + + ;; Setup lex-analyzer + (setq + parser-generator-lex-analyzer--function + (lambda (index) + (with-current-buffer buffer + (when (<= (+ index 1) (point-max)) + (let ((start index) + (end (+ index 1))) + (let ((token (buffer-substring-no-properties start end))) + `(,token ,start . ,end))))))) + (setq + parser-generator-lex-analyzer--get-function + (lambda (token) + (with-current-buffer buffer + (let ((start (car (cdr token))) + (end (cdr (cdr token)))) + (when (<= end (point-max)) + (buffer-substring-no-properties start end)))))) + + (should + (equal + '("begin" "test" "end") + (parser-generator-lr-translate))) + + (message "Passed translation k=2") + + (kill-buffer)) (message "Passed tests for (parser-generator-lr--parse-k-2)")) diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el index 4a880b4..3b4b143 100644 --- a/test/parser-generator-test.el +++ b/test/parser-generator-test.el @@ -502,6 +502,12 @@ t (parser-generator--valid-grammar-p '((A B C) ("a" "b" "c") ((A ("a" (lambda(a) (message "Was here: %s" a))))) A)))) + (should + (equal + t + (parser-generator--valid-grammar-p + '((A B C) ("a" "b" "c") ((A ("a" (lambda(args) (message "a: %s" args))) ("b" (lambda(args) (message "b: %s" args))) ("c" (lambda(args) (message "c: %s" args))))) A)))) + (message "Passed tests for (parser-generator--valid-grammar-p)")) (defun parser-generator-test--valid-look-ahead-number-p ()