branch: externals/parser-generator commit 4aeed225d41d62b71a9cf0070c6780613fec3025 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Passed tests for e-free first function --- parser-generator.el | 8 ++++++++ test/parser-generator-test.el | 13 +++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/parser-generator.el b/parser-generator.el index 1873343..295995e 100644 --- a/parser-generator.el +++ b/parser-generator.el @@ -1076,6 +1076,14 @@ (setq first (append first (car symbol-f-set)))))))) (setq input-tape-index (1+ input-tape-index))) (when (> first-length 0) + + ;; If length exceeds k, strip trailing symbols + (when (> (length first) k) + (setq first (reverse first)) + (while (> (length first) k) + (pop first)) + (setq first (reverse first))) + ;; When length of terminals list is below K ;; fill up with e-identifiers (when (and diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el index cf24b73..c67a583 100644 --- a/test/parser-generator-test.el +++ b/test/parser-generator-test.el @@ -327,7 +327,6 @@ (parser-generator-set-grammar '((S A B C) (a b c) ((S (A B)) (A (B a) e) (B (C b) C) (C c e)) S)) (parser-generator-set-look-ahead-number 2) (parser-generator-process-grammar) - (should (equal '((c a) (c b)) @@ -358,15 +357,25 @@ (equal '((a b)) (parser-generator--e-free-first '(a b)))) + (message "Passed empty-free-first 2 with terminals") (should (equal '((a e)) (parser-generator--e-free-first '(a e)))) + (message "Passed empty-free-first 2 with trailing e-identifier 1") + (should + (equal + nil + (parser-generator--e-free-first 'S))) + (should + (equal + nil + (parser-generator--e-free-first '(e a)))) (should (equal '((a a) (a e)) (parser-generator--e-free-first '(a S)))) - (message "Passed empty-free-first 2 with trailing e-identifier") + (message "Passed empty-free-first 2 with trailing e-identifier 2") (message "Passed tests for (parser-generator--empty-free-first)"))