branch: externals/parser-generator commit bc2360459909f2351f89d57433a4271b25f9d4f1 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Fixed look-ahead, first and e-free-first with k = 0 --- parser-generator-lr.el | 2 +- parser-generator.el | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/parser-generator-lr.el b/parser-generator-lr.el index 088a30a..0fa4e2d 100644 --- a/parser-generator-lr.el +++ b/parser-generator-lr.el @@ -193,7 +193,7 @@ (unless found-action (error "Failed to find any action in set %d: %s" - lr-item-index + goto-index lr-items)) (setq continue-loop nil))) (setq lr-item-index (1+ lr-item-index))))))) diff --git a/parser-generator.el b/parser-generator.el index b001d80..7df2a6e 100644 --- a/parser-generator.el +++ b/parser-generator.el @@ -110,7 +110,9 @@ (let ((terminals (parser-generator--get-grammar-terminals)) (look-aheads) - (k parser-generator--look-ahead-number) + (k (max + 1 + parser-generator--look-ahead-number)) (stack '((0 0 nil))) (marked-paths (make-hash-table :test 'equal)) (added-look-aheads (make-hash-table :test 'equal))) @@ -801,7 +803,10 @@ parser-generator--f-free-sets) (parser-generator--debug (message "(parser-generator--generate-f-sets)")) (let ((productions (parser-generator--get-grammar-productions)) - (k parser-generator--look-ahead-number)) + (k + (max + 1 + parser-generator--look-ahead-number))) (let ((disallow-set '(nil t))) (parser-generator--debug (message "disallow-set: %s" disallow-set)) (dolist (disallow-e-first disallow-set) @@ -1339,7 +1344,10 @@ (setq β (list β))) (unless (parser-generator--valid-sentential-form-p β) (error "Invalid sentential form β! %s" β)) - (let ((k parser-generator--look-ahead-number)) + (let ((k + (max + 1 + parser-generator--look-ahead-number))) ;; Generate F-sets only once per grammar (parser-generator--generate-f-sets)