branch: externals/parser-generator commit 3807a72274a7573b2e63b5f97e4cd6089feff5fd Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Added failing unit test for LR-items k=2 --- parser-generator-lr.el | 7 +++++-- test/parser-generator-lr-test.el | 16 +++++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/parser-generator-lr.el b/parser-generator-lr.el index 275cc55..a050204 100644 --- a/parser-generator-lr.el +++ b/parser-generator-lr.el @@ -544,7 +544,10 @@ (defun parser-generator-lr--items-for-goto (previous-lr-item x) "Calculate LR-items for GOTO(PREVIOUS-LR-ITEM, X)." (let ((lr-new-item) - (lr-item-exists (make-hash-table :test 'equal))) + (lr-item-exists (make-hash-table :test 'equal)) + (eof-list (parser-generator--generate-list-of-symbol + parser-generator--look-ahead-number + parser-generator--eof-identifier))) (parser-generator--debug (message "x: %s" x)) (dolist (lr-item previous-lr-item) @@ -615,7 +618,7 @@ (parser-generator--first lr-item-suffix-rest))) (unless lr-item-suffix-rest-first - (setq lr-item-suffix-rest-first (list nil))) + (setq lr-item-suffix-rest-first (list eof-list))) ;; TODO Verify this (parser-generator--debug diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el index e257b4d..524300d 100644 --- a/test/parser-generator-lr-test.el +++ b/test/parser-generator-lr-test.el @@ -418,9 +418,19 @@ (parser-generator--debug (message "LR-items: %s" - (parser-generator--hash-values-to-list - lr-items - t))) + (parser-generator--hash-to-list + lr-items))) + + (should + (equal + '( + (0 (((R) nil (a b T) ($ $))((R) nil (a b T) (a b))((S) nil (R) ($ $))((S) nil (R S) ($ $))((Sp) nil (S) ($ $)))) + (1 (((R) (a) (b T) ($ $)) ((R) (a) (b T) (a b)))) + (2 (((R) (a b) (T) ($ $)) ((R) (a b) (T) (a b)) ((T) nil (a T) ($ $)) ((T) nil (a T) (a b)) ((T) nil (c) ($ $)) ((T) nil (c) (a b)) ((T) nil nil ($ $)) ((T) nil nil (a b))))) + (parser-generator--hash-to-list + lr-items))) + (message "Passed LR-items k = 2") + (parser-generator--debug (message "GOTO-tables: %s" (parser-generator--hash-to-list