branch: externals/parser-generator commit 8c467b1bb18cf01fb7a07c2828d4b544475f58de Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Added another test for merge max terminal sets --- parser-generator.el | 38 ++++++++++++++++---------------------- test/parser-generator-test.el | 11 ++++++++++- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/parser-generator.el b/parser-generator.el index c8cb20166a..c55cdeaceb 100644 --- a/parser-generator.el +++ b/parser-generator.el @@ -1317,28 +1317,22 @@ (b-element) (b-index 0) (b-length (length b))) - (let ((continue t)) - (while (and - (< a-index a-length) - (< merge-count k) - continue) - (setq a-element (nth a-index a)) - (if (parser-generator--valid-e-p a-element) - (setq continue nil) - (push a-element merged) - (setq a-index (1+ a-index)) - (setq merge-count (1+ merge-count))))) - (let ((continue t)) - (while (and - (< b-index b-length) - (< merge-count k) - continue) - (setq b-element (nth b-index b)) - (if (parser-generator--valid-e-p b-element) - (setq continue nil) - (push b-element merged) - (setq b-index (1+ b-index)) - (setq merge-count (1+ merge-count))))) + (while (and + (< a-index a-length) + (< merge-count k)) + (setq a-element (nth a-index a)) + (unless (parser-generator--valid-e-p a-element) + (push a-element merged) + (setq merge-count (1+ merge-count))) + (setq a-index (1+ a-index))) + (while (and + (< b-index b-length) + (< merge-count k)) + (setq b-element (nth b-index b)) + (unless (parser-generator--valid-e-p b-element) + (push b-element merged) + (setq merge-count (1+ merge-count))) + (setq b-index (1+ b-index))) (nreverse merged))) ;; p. 357 diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el index f30622327c..931053399e 100644 --- a/test/parser-generator-test.el +++ b/test/parser-generator-test.el @@ -981,7 +981,16 @@ '((a b b) (e)) '((b) (b a b))))) - ;; TODO Example 5.14 p. 350 here + ;; Example 5.14 p. 350 + (parser-generator-set-e-identifier 'e) + (parser-generator-set-look-ahead-number 2) + (should + (equal + '((a a) (a b) (b b)) + (parser-generator--merge-max-terminal-sets + '((a b) (a e a) (b b) (b e b)) + nil))) + (message "Passed tests for (parser-generator--merge-max-terminal-sets)"))