branch: externals/parser-generator commit 440442463cb50415c3aa4756380570102426510f Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Added test for parsing context-sensitive attributes --- parser-generator.el | 4 ++-- test/parser-generator-test.el | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/parser-generator.el b/parser-generator.el index d8812e4..34a4b73 100644 --- a/parser-generator.el +++ b/parser-generator.el @@ -563,8 +563,8 @@ (progn (when (= sub-rhs-element-index - (1- sub-rhs-element-length) - (error "Expecting value for context-sensitive attribute!"))) + (1- sub-rhs-element-length)) + (error "Expecting value for context-sensitive attribute %S!" sub-rhs-element)) (let ((attribute-value (nth (1+ sub-rhs-element-index) diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el index bc311e9..7e9a996 100644 --- a/test/parser-generator-test.el +++ b/test/parser-generator-test.el @@ -469,6 +469,42 @@ (message "Passed tests for (parser-generator--empty-free-first)")) +(defun parser-generator-test--get-grammar-context-sensitive-attributes-by-production-number () + "Test `parser-generator--get-grammar-context-sensitive-attributes-by-production-number'." + (message "Starting tests for (parser-generator--get-grammar-context-sensitive-attributes-by-production-number)") + (setq + parser-generator--context-sensitive-attributes + '(%prec)) + (parser-generator-set-grammar '((A B C) ("a" "b" "c") ((A ("a" %prec 1) ("b" "c" %prec D))) A)) + (parser-generator-process-grammar) + + (should + (equal + '((%prec 1)) + (parser-generator--get-grammar-context-sensitive-attributes-by-production-number 0))) + (should + (equal + '((A) ("a")) + (parser-generator--get-grammar-production-by-number 0))) + (should + (equal + '((%prec D)) + (parser-generator--get-grammar-context-sensitive-attributes-by-production-number 1))) + (should + (equal + '((A) ("b" "c")) + (parser-generator--get-grammar-production-by-number 1))) + (should + (equal + nil + (parser-generator--get-grammar-context-sensitive-attributes-by-production-number 2))) + (should + (equal + nil + (parser-generator--get-grammar-production-by-number 2))) + + (message "Passed tests for (parser-generator--get-grammar-context-sensitive-attributes-by-production-number)")) + (defun parser-generator-test--valid-grammar-p () "Test function `parser-generator--valid-grammar-p'." (message "Starting tests for (parser-generator--valid-grammar-p)") @@ -917,6 +953,7 @@ (parser-generator-test--valid-context-sensitive-attribute-p) (parser-generator-test--valid-context-sensitive-attributes-p) (parser-generator-test--valid-grammar-p) + (parser-generator-test--get-grammar-context-sensitive-attributes-by-production-number) (parser-generator-test--valid-look-ahead-number-p) (parser-generator-test--valid-look-ahead-p) (parser-generator-test--valid-non-terminal-p)