branch: externals/parser-generator commit e1f3fb404272168b72ad67586d1b2ff633a55126 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
More work on FIRST --- parser-generator.el | 12 ++++++++++-- test/parser-generator-test.el | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/parser-generator.el b/parser-generator.el index a1ae0b8114..876cd44f5e 100644 --- a/parser-generator.el +++ b/parser-generator.el @@ -1346,13 +1346,15 @@ (let ((leading-terminals-count (length leading-terminals)) (leading-symbols-count - (length leading-symbols))) + (length leading-symbols)) + (keep-iterating t)) (parser-generator--debug (message "leading-terminals-count: %s" leading-terminals-count)) (while (and + keep-iterating (< input-tape-index input-tape-length) (< leading-terminals-count k)) (let ((rhs-element (nth input-tape-index input-tape)) @@ -1416,6 +1418,9 @@ (list rhs-element)) (setq expanded-all + nil) + (setq + keep-iterating nil)) (if sub-terminal-sets @@ -1531,7 +1536,10 @@ nil) (setq unexpanded-non-terminal - (list rhs-element)))) + (list rhs-element)) + (setq + keep-iterating + nil))) ((equal rhs-type 'E-IDENTIFIER) (setq diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el index 5713e0b557..aded3527c5 100644 --- a/test/parser-generator-test.el +++ b/test/parser-generator-test.el @@ -202,7 +202,7 @@ (parser-generator--generate-f-sets) (should (equal - '(t ((e a))) + '(t ((e a) (e))) (gethash (list 'S) parser-generator--f-sets)))