branch: externals/parser-generator
commit fce14ea596693e26445571bc7175de25ccd30a22
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
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)"))