branch: externals/parser-generator commit 3e0243533912bae8091cae97801934c1b01ec910 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Passing complex 2 test --- parser.el | 4 ++-- test/parser-test.el | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/parser.el b/parser.el index 1d2dab2..b153d84 100644 --- a/parser.el +++ b/parser.el @@ -404,8 +404,8 @@ (parser--debug (message "sub-rhs-leading-terminals: %s" sub-rhs-leading-terminals)) (when (> (length sub-rhs-leading-terminals) k) (setq sub-rhs-leading-terminals (butlast sub-rhs-leading-terminals (- (length sub-rhs-leading-terminals) k)))) - (push `(,sub-rhs-leading-terminals ,alternative-all-leading-terminals-p ,(1+ input-tape-index)) stack))) - (setq sub-terminal-index (1+ sub-terminal-index)))))) + (push `(,sub-rhs-leading-terminals ,alternative-all-leading-terminals-p ,(1+ input-tape-index)) stack)))) + (setq sub-terminal-index (1+ sub-terminal-index))))) (parser--debug (message "Sub-terminal-set: %s" sub-terminal-set)) (when (or diff --git a/test/parser-test.el b/test/parser-test.el index ac865e8..1a2b2fc 100644 --- a/test/parser-test.el +++ b/test/parser-test.el @@ -35,6 +35,12 @@ (parser--first 'S))) (message "Passed first 1 with rudimentary grammar") + ;; (should + ;; (equal + ;; '((a a)) + ;; (parser--first '(S a)))) + ;; (message "Passed first 1b with rudimentary grammar") + (parser--set-grammar '((S) ("a" "b" "c") ((S ("a" "b" "c"))) S) 2) (should (equal @@ -106,10 +112,11 @@ (parser--first 'S))) (message "Passed first 2 with complex grammar") - (parser--set-grammar '((S A B C) ("a" "b" "c") ((S A B) (A (B "a") e) (B (C "b") C) (C "c" e)) S) 3) + (parser--set-grammar '((S A B C) (a b c) ((S A B) (A (B a) e) (B (C b) C) (C c e)) S) 3) + (message "FIRST = %s" (parser--first 'S)) (should (equal - '(("a") ("a" "b") ("a" "c") ("a" "c" "b") ("b") ("b" "a") ("b" "a" "b") ("b" "a" "c") "c" ("c" "a") ("c" "a" "b") ("c" "a" "c") ("c" "b") ("c" "b" "a") (e)) + '((a) (a b) (a c) (a c b) (b) (b a) (b a b) (b a c) c (c a) (c a b) (c a c) (c b) (c b a) (e)) (parser--first 'S))) (message "Passed first 3 with complex grammar")