[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 8d0a93e 053/434: More work on algorith
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 8d0a93e 053/434: More work on algorithm |
Date: |
Mon, 29 Nov 2021 15:59:07 -0500 (EST) |
branch: externals/parser-generator
commit 8d0a93e34d9cbdd06bd31a14cbb8013678706c09
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on algorithm
---
parser.el | 51 ++++++++++++++++++++++++++++++---------------------
1 file changed, 30 insertions(+), 21 deletions(-)
diff --git a/parser.el b/parser.el
index c0e7f77..d0e6e72 100644
--- a/parser.el
+++ b/parser.el
@@ -701,30 +701,39 @@
(puthash 'e lr-items-e lr-items))
- ;; TODO 2 Suppose that we have constructed V(X1,X2,...,Xi-1)
- ;; we construct V(X1,X2,...,Xi) as follows:
+ ;; 2 Suppose that we have constructed V(X1,X2,...,Xi-1) we construct
V(X1,X2,...,Xi) as follows:
(let ((prefix-acc)
- (prefix-new)
(prefix-previous (gethash 'e lr-items)))
(dolist (prefix γ)
- (setq prefix-acc (append prefix-acc prefix))
-
- (dolist (lr-item prefix-previous)
- ;; TODO (a) If [A -> a . XiB, u] is in V(X1,...,Xi-1)
- ;; add [A -> aXi . B, u] to V(X1,...,Xi)
- )
-
- ;; TODO (c) Repeat step (2b) until no more new items can be added to
V(X1,...,Xi)
- (let ((added-new t))
- (while added-new
- (setq added-new nil)
- (dolist (lr-item prefix-new)
- ;; TODO (b) If [A -> a . Bb, u] has been placed in V(X1,...,Xi)
- ;; and B -> D is in P then add [B -> . D, x] to V(X1,...,Xi)
for each x in FIRST(bu)
- ;; provided it is not already there
- )))
-
- (setq prefix-previous prefix-acc)))
+ (let ((lr-new-item))
+ (setq prefix-acc (append prefix-acc prefix))
+
+ (dolist (lr-item prefix-previous)
+ (let ((lr-item-lhs (nth 0 lr-item))
+ (lr-item-prefix (nth 1 lr-item))
+ (lr-item-suffix (nth 2 lr-item))
+ (lr-item-look-ahead (nth 3 lr-item)))
+ (let ((lr-item-suffix-first (car lr-item-suffix))
+ (lr-item-suffix-rest (cdr lr-item-suffix)))
+
+ ;; (a) If [A -> a . XiB, u] is in V(X1,...,Xi-1)
+ (when (eq lr-item-suffix-first prefix)
+
+ ;; Add [A -> aXi . B, u] to V(X1,...,Xi)
+ (push `(,lr-item-lhs ,(append lr-item-prefix prefix)
,lr-item-suffix-rest ,lr-item-look-ahead) lr-new-item)))))
+
+ ;; TODO (c) Repeat step (2b) until no more new items can be added
to V(X1,...,Xi)
+ (let ((added-new t))
+ (while added-new
+ (setq added-new nil)
+ (dolist (lr-item lr-new-item)
+ ;; TODO (b) If [A -> a . Bb, u] has been placed in
V(X1,...,Xi)
+ ;; and B -> D is in P then add [B -> . D, x] to V(X1,...,Xi)
for each x in FIRST(bu)
+ ;; provided it is not already there
+ )))
+
+ (setq prefix-previous prefix-acc)
+ (puthash prefix-acc lr-new-item lr-items))))
lr-items)))
- [elpa] externals/parser-generator b73c4ed 072/434: Made e-symbol customizable, (continued)
- [elpa] externals/parser-generator b73c4ed 072/434: Made e-symbol customizable, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 55bf9a9 073/434: Removed references to 'e, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 01df803 051/434: Improved documentation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3e1f2b6 058/434: Passed first for calculating valid LR-sets for viable prefix γ, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 51cab75 061/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f940be9 033/434: Added list of functions and usage examples, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b8d6476 038/434: Setting look-ahead-number clears cache storage, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2829d36 039/434: More work on FOLLOW, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0f8b422 043/434: Added another unit test for follow function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f8f5fe2 046/434: Started on function to calculate lk-items for a viable prefix, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8d0a93e 053/434: More work on algorithm,
ELPA Syncer <=
- [elpa] externals/parser-generator 6d2e231 059/434: Added two more failing valid LR-set calculation tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 15dc472 067/434: Added TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 44eb5a3 062/434: Passing unit test for V(e) and V(S), ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a7d1cc0 070/434: Updated README, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3373881 085/434: More work on GOTO-table generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5957fad 076/434: First implementation of generating LR-items for grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7689ec5 086/434: More work, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c992a54 093/434: Added info in README.md about LR-items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4c75f65 101/434: Added TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6ee548e 005/434: Updated README, ELPA Syncer, 2021/11/29