branch: externals/parser-generator commit fe05328dd2184e53ed93045d6e15c543d51a8479 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Passed unit tests for LRk parser k=2 --- parser-generator-lr.el | 51 +++++++++++++++++++++++++++++++++++++------------- parser-generator.el | 2 +- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/parser-generator-lr.el b/parser-generator-lr.el index 7cc030e..09732a4 100644 --- a/parser-generator-lr.el +++ b/parser-generator-lr.el @@ -90,32 +90,57 @@ ;; in that case save in action table a shift action here (let ((eff-index 0) (eff-item) - (eff-length (length eff)) - (searching-match t)) - (while (and - searching-match - (< eff-index eff-length)) + (eff-length (length eff))) + (while (< eff-index eff-length) (setq eff-item (parser-generator--first-to-lookahead (nth eff-index eff))) + (parser-generator--debug + (message + "eff-item: %s" + eff-item + )) (if (parser-generator--valid-look-ahead-p eff-item) (let ((hash-key (format "%s-%s-%s" goto-index state eff-item))) - (unless (gethash hash-key added-actions) - (puthash hash-key t added-actions) - (setq searching-match nil))) + (parser-generator--debug + (message + "Valid look-ahead: %s" + eff-item + )) + (if (gethash hash-key added-actions) + (parser-generator--debug + (message + "Duplicate action: %s" + hash-key + )) + (parser-generator--debug + (message + "New action: %s" + hash-key + )) + (puthash + hash-key + t + added-actions) + (push + (list + eff-item + 'shift + ) + action-table) + (setq + found-action + t) + )) (parser-generator--debug (message "Not valid look-ahead: %s" eff-item))) - (setq eff-index (1+ eff-index))) - - (unless searching-match - (push (list eff-item 'shift) action-table) - (setq found-action t))) + (setq eff-index (1+ eff-index)))) (parser-generator--debug (message "E-FREE-FIRST is empty for %s" Cv))))))))) diff --git a/parser-generator.el b/parser-generator.el index 9ab4716..b400336 100644 --- a/parser-generator.el +++ b/parser-generator.el @@ -11,7 +11,7 @@ (defvar parser-generator--debug - t + nil "Whether to print debug messages or not.") (defvar parser-generator--e-identifier