[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 0e075d7 081/434: Fixed issue with algo
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 0e075d7 081/434: Fixed issue with algorithm 5.9 |
Date: |
Mon, 29 Nov 2021 15:59:13 -0500 (EST) |
branch: externals/parser-generator
commit 0e075d7ebb9269d82088415b63883d64ef223c8b
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Fixed issue with algorithm 5.9
---
parser.el | 18 +++++++++---------
test/parser-test.el | 24 +++++++++++++++++++-----
2 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/parser.el b/parser.el
index 7717d9a..181afd4 100644
--- a/parser.el
+++ b/parser.el
@@ -662,7 +662,7 @@
(let ((e-set (parser--lr-items-for-prefix parser--e-identifier)))
;;(1) Place V(e) in S. The set V(e) is initially unmarked.
- (setq unmarked-lr-items (append unmarked-lr-items e-set)))
+ (setq unmarked-lr-items e-set))
;; (2) If a set of items a in S is unmarked
;; (3) Repeat step (2) until all sets of items in S are marked.
@@ -672,30 +672,30 @@
;; (2) Mark a
(setq lr-item (pop unmarked-lr-items))
(puthash lr-item t marked-lr-items)
- (setq lr-items (append lr-items lr-item))
-
- (message "lr-item: %s" lr-item)
+ (push lr-item lr-items)
+ ;; (message "lr-item: %s" lr-item)
;; (2) By computing for each X in N u E, GOTO (a, X). (Algorithm 5.8
can be used here.)
;; V(X1,...,Xi) = GOTO(V(X1,...,Xi-1), Xi)
(dolist (symbol symbols)
- (message "symbol: %s" symbol)
+ ;; (message "symbol: %s" symbol)
(let ((prefix-lr-items (parser--lr-items-for-goto (list lr-item)
symbol)))
- (message "GOTO(%s, %s) = %s" lr-item symbol prefix-lr-items)
+ (parser--debug
+ (message "GOTO(%s, %s) = %s" lr-item symbol prefix-lr-items))
;; If a' = GOTO(a, X) is nonempty
(when prefix-lr-items
(dolist (prefix-lr-item prefix-lr-items)
+ ;; (message "prefix-lr-item: %s" prefix-lr-item)
;; and is not already in S
(unless (gethash prefix-lr-item marked-lr-items)
-
;; Note that GOTO(a, X) will always be empty if all items in
a
;; have the dot at the right end of the production
-
+
;; then add a' to S as an unmarked set of items
- (push unmarked-lr-items prefix-lr-item))))))))
+ (push prefix-lr-item unmarked-lr-items))))))))
lr-items))
diff --git a/test/parser-test.el b/test/parser-test.el
index 90aca30..08d8156 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -231,15 +231,29 @@
(parser--set-grammar '((Sp S) (a b) ((Sp S) (S (S a S b)) (S e)) Sp))
(parser--set-look-ahead-number 1)
- (message "LR-items for grammar: %s" (parser--lr-items-for-grammar))
-
(should
(equal
- '((S nil (S a S b) (a))
+ '((Sp (S) nil (e))
+ (Sp nil (S) (e))
+ (S nil nil (e))
+ (S nil nil (a))
+ (S (S a S b) nil (e))
+ (S (S a S) (b) (e))
+ (S (S a) (S b) (e))
+ (S (S) (a S b) (e))
(S nil (S a S b) (e))
+ (S (S a S b) nil (a))
+ (S (S a S) (b) (a))
+ (S (S a) (S b) (a))
+ (S (S a S b) nil (b))
+ (S (S a S) (b) (b))
+ (S (S a) (S b) (b))
+ (S (S) (a S b) (b))
+ (S nil (S a S b) (b))
(S nil nil (a))
- (S nil nil (e))
- (Sp nil (S) (e)))
+ (S nil nil (b))
+ (S (S) (a S b) (a))
+ (S nil (S a S b) (a)))
(parser--lr-items-for-grammar)))
(message "Passed LR-items for example 5.30")
- [elpa] externals/parser-generator 7a48197 084/434: Removed obsolete variable, (continued)
- [elpa] externals/parser-generator 7a48197 084/434: Removed obsolete variable, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7fe7318 087/434: Passed test for distinct LR-items for grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ba95bff 094/434: Started on new algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6f524ed 108/434: Various stuff, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 79c06fd 113/434: Added error signal if no parser action or LR-item set is found, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator daf93e0 097/434: Added failing unit test for action tables generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 32263b7 074/434: Added cache to function which calculates LR-items for prefix, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 21164b6 064/434: Added documentation for (lr-items), ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ccaf4b5 080/434: More stuff, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bdbedf4 078/434: Suffixes in LR-items that only contain e-identifier are now set as nil, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0e075d7 081/434: Fixed issue with algorithm 5.9,
ELPA Syncer <=
- [elpa] externals/parser-generator fe6037b 088/434: Generating valid GOTO-table, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d5284b5 091/434: Added algorithm 5.10, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0304b78 092/434: Added a unit-test to invalidate LR-items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 69bfe16 006/434: Removed white-space, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1613e2e 096/434: Byte-compilation and unit tests working after refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 31c7ba7 098/434: Work on function that generates all possible look-aheads, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 53980d4 102/434: More documentation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 882d725 105/434: Added TODO item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 65d9ce2 106/434: Fixed a bug with E-FREE-FIRST function and function that validates a set of LR-items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 343fd72 104/434: Some parts of the action-table is generated, ELPA Syncer, 2021/11/29