branch: externals/parser-generator commit fce14ea596693e26445571bc7175de25ccd30a22 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Fixed bug with context-sensitive attributes being lost in LR-item generation --- parser-generator-lr.el | 16 ++++++++++++++-- parser-generator.el | 2 +- test/parser-generator-lr-test.el | 3 ++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/parser-generator-lr.el b/parser-generator-lr.el index c2543b6..b84b914 100644 --- a/parser-generator-lr.el +++ b/parser-generator-lr.el @@ -1326,6 +1326,7 @@ (lr-item-suffix (nth 2 lr-item)) (lr-item-look-ahead (nth 3 lr-item)) (lr-item-suffix-first) + (lr-item-suffix-first-wo-attributes) (lr-item-suffix-rest)) (setq lr-item-suffix-first @@ -1334,25 +1335,36 @@ lr-item-suffix-rest (cdr lr-item-suffix)) + ;; Remove potential attributes from symbol for comparison + (if + (listp lr-item-suffix-first) + (setq + lr-item-suffix-first-wo-attributes + (car lr-item-suffix-first)) + (setq + lr-item-suffix-first-wo-attributes + lr-item-suffix-first)) + (parser-generator--debug (message "lr-item: %s" lr-item) (message "lr-item-prefix: %s" lr-item-prefix) (message "lr-item-suffix: %s" lr-item-suffix) (message "lr-item-suffix-first: %s" lr-item-suffix-first) + (message "lr-item-suffix-first-wo-attributes: %s" lr-item-suffix-first-wo-attributes) (message "lr-item-suffix-rest: %s" lr-item-suffix-rest) (message "lr-item-look-ahead: %s" lr-item-look-ahead)) ;; (a) If [A -> a . XiB, u] is in V(X1,...,Xi-1) (when (equal - lr-item-suffix-first + lr-item-suffix-first-wo-attributes x) ;; Add [A -> aXi . B, u] to V(X1,...,Xi) (let ((combined-prefix (append lr-item-prefix - (list x)))) + (list lr-item-suffix-first)))) (let ((lr-new-item-1)) (if (= diff --git a/parser-generator.el b/parser-generator.el index e75424f..befa2ca 100644 --- a/parser-generator.el +++ b/parser-generator.el @@ -17,7 +17,7 @@ (defvar parser-generator--debug - nil + t "Whether to print debug messages or not.") (defvar diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el index 928f9f4..c29132a 100644 --- a/test/parser-generator-lr-test.el +++ b/test/parser-generator-lr-test.el @@ -179,7 +179,8 @@ (3 ((($) accept))) (4 (((b) shift))) (5 (((c) shift))) - (6 ((($) reduce 1)))) + (6 ((($) reduce 4))) + (7 ((($) reduce 1)))) (parser-generator-lr--get-expanded-action-tables)))) (message "Passed tests for (parser-generator-lr--generate-action-tables)"))