[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator d7f43d7 066/434: Sorting lr-items for
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator d7f43d7 066/434: Sorting lr-items for prefix before return |
Date: |
Mon, 29 Nov 2021 15:59:10 -0500 (EST) |
branch: externals/parser-generator
commit d7f43d7909fed00e0a727cb5eea5a92609e470a0
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Sorting lr-items for prefix before return
---
README.md | 14 +++++++-------
parser.el | 12 ++++++++++--
test/parser-test.el | 26 +++++++++++++-------------
3 files changed, 30 insertions(+), 22 deletions(-)
diff --git a/README.md b/README.md
index 7e3ef9b..15da72d 100644
--- a/README.md
+++ b/README.md
@@ -149,11 +149,11 @@ Calculate the set of LR(k) items valid for any viable
prefix S.
(parser--set-look-ahead-number 1)
(should
(equal
- '((S nil nil (a))
- (S nil (S a S b) (a))
- (S nil nil (e))
- (S nil (S a S b) (e))
- (Sp nil (S) (e)))
+ '((S nil (S a S b) (a))
+ (S nil (S a S b) (e))
+ (S nil nil (a))
+ (S nil nil (e))
+ (Sp nil (S) (e)))
(parser--lr-items-for-prefix 'e)))
```
@@ -163,9 +163,9 @@ Calculate the set of LR(k) items valid for any viable
prefix S.
(parser--set-look-ahead-number 1)
(should
(equal
- '((Sp (S) nil (e))
+ '((S (S) (a S b) (a))
(S (S) (a S b) (e))
- (S (S) (a S b) (a)))
+ (Sp (S) nil (e)))
(parser--lr-items-for-prefix 'S)))
```
diff --git a/parser.el b/parser.el
index 6a0ef52..5c4807d 100644
--- a/parser.el
+++ b/parser.el
@@ -149,6 +149,14 @@
(< index length))
(let ((a-element (nth index a))
(b-element (nth index b)))
+ (while (and
+ a-element
+ (listp a-element))
+ (setq a-element (car a-element)))
+ (while (and
+ b-element
+ (listp b-element))
+ (setq b-element (car b-element)))
(if (string-greaterp a-element b-element)
(setq continue nil)
(when (string-greaterp b-element a-element)
@@ -688,7 +696,7 @@
(setq rhs-rest-first '((e))))
(let ((sub-production (parser--get-grammar-rhs
rhs-first)))
(parser--debug
- (message "sub-production: %s" sub-production))
+ (message "sub-production: %s" sub-production))
;; For each production with B as LHS
(dolist (sub-rhs sub-production)
@@ -786,7 +794,7 @@
(parser--debug
(message "γ: %s" γ))
- (gethash γ lr-items))))
+ (sort (gethash γ lr-items) 'parser--sort-list))))
(provide 'parser)
diff --git a/test/parser-test.el b/test/parser-test.el
index 4404665..bf3ccee 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -233,30 +233,30 @@
(should
(equal
- '((S nil nil (a))
- (S nil (S a S b) (a))
- (S nil nil (e))
- (S nil (S a S b) (e))
- (Sp nil (S) (e)))
+ '((S nil (S a S b) (a))
+ (S nil (S a S b) (e))
+ (S nil nil (a))
+ (S nil nil (e))
+ (Sp nil (S) (e)))
(parser--lr-items-for-prefix 'e)))
(message "Passed V(e)")
(should
(equal
- '((Sp (S) nil (e))
+ '((S (S) (a S b) (a))
(S (S) (a S b) (e))
- (S (S) (a S b) (a)))
+ (Sp (S) nil (e)))
(parser--lr-items-for-prefix 'S)))
(message "Passed V(S)")
(should
(equal
- '((S nil (e) (a))
- (S nil (S a S b) (a))
- (S nil (e) (b))
- (S nil (S a S b) (b))
- (S (S a) (S b) (a))
- (S (S a) (S b) (e)))
+ '((S (S a) (S b) (a))
+ (S (S a) (S b) (e))
+ (S nil (S a S b) (a))
+ (S nil (S a S b) (b))
+ (S nil (e) (a))
+ (S nil (e) (b)))
(parser--lr-items-for-prefix '(S a))))
(message "Passed V(Sa)")
- [elpa] externals/parser-generator fe94691 048/434: Added hash-table for production RHS, (continued)
- [elpa] externals/parser-generator fe94691 048/434: Added hash-table for production RHS, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator afa7cb9 050/434: Added unit tests for retrieving grammar RHS, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 603df44 040/434: Added failing unit tests for (parser--sort-list), ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator aadb31a 042/434: Updated README.md about FOLLOW-sets, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 586a38e 047/434: More work on algorithm 5.8, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 00ffcde 052/434: Added TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7e051d3 054/434: Algorithm 5.8 completed but not tested, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8e436df 056/434: More tweaking, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a60952c 057/434: More debugging of new algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ab0559d 060/434: More work, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d7f43d7 066/434: Sorting lr-items for prefix before return,
ELPA Syncer <=
- [elpa] externals/parser-generator ca85ef4 068/434: Created TODO items, ELPA Syncer, 2021/11/29
- [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