[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 7fe7318 087/434: Passed test for disti
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 7fe7318 087/434: Passed test for distinct LR-items for grammar |
Date: |
Mon, 29 Nov 2021 15:59:14 -0500 (EST) |
branch: externals/parser-generator
commit 7fe73186d8b9e66fb019958ffaf979290fb285c9
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passed test for distinct LR-items for grammar
---
parser.el | 22 ++++++++++++++++++----
test/parser-test.el | 36 ++++++++++++++++++++++++------------
2 files changed, 42 insertions(+), 16 deletions(-)
diff --git a/parser.el b/parser.el
index a98d05e..2325f68 100644
--- a/parser.el
+++ b/parser.el
@@ -115,6 +115,19 @@
(error "No grammar G defined!")))
(nth 1 G))
+(defun parser--hash-to-list (hash-table &optional un-sorted)
+ "Return a list that represent the HASH-TABLE. Each element is a list: (list
key value), optionally UN-SORTED."
+ (let (result)
+ (if (hash-table-p hash-table)
+ (progn
+ (maphash
+ (lambda (k v) (push (list k v) result))
+ hash-table)
+ (if un-sorted
+ (nreverse result)
+ (sort (nreverse result) (lambda (a b) (< (car a) (car b))))))
+ nil)))
+
(defun parser--load-symbols ()
"Load terminals and non-terminals in grammar."
(let ((terminals (parser--get-grammar-terminals)))
@@ -687,9 +700,10 @@
(setq popped-item (pop unmarked-lr-items))
(setq lr-item-index (car popped-item))
(setq lr-item (car (cdr popped-item)))
- (message "lr-item-index: %s" lr-item-index)
- (message "lr-item: %s" lr-item)
- (message "popped-item: %s" popped-item)
+ (parser--debug
+ (message "lr-item-index: %s" lr-item-index)
+ (message "lr-item: %s" lr-item)
+ (message "popped-item: %s" popped-item))
(puthash lr-item lr-item-index marked-lr-items)
(puthash lr-item-index lr-item parser--table-lr-items)
(setq goto-table-table nil)
@@ -725,7 +739,7 @@
(push `(,lr-item-index ,goto-table-table) goto-table)))
(setq parser--goto-table (nreverse goto-table))))
- parser--goto-table)
+ parser--table-lr-items)
;; Algorithm 5.8, p. 386
(defun parser--lr-items-for-prefix (γ)
diff --git a/test/parser-test.el b/test/parser-test.el
index 8effcf3..2250b7a 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -230,19 +230,31 @@
;; Example 5.30, p. 389
(parser--set-grammar '((Sp S) (a b) ((Sp S) (S (S a S b)) (S e)) Sp))
(parser--set-look-ahead-number 1)
- (message "GOTO-table: %s" (parser--lr-items-for-grammar))
- (should
- (equal
- '((0 (S 1))
- (1 (a 2))
- (2 (S 3))
- (3 (a 4) (b 5))
- (4 (S 6))
- (5 nil)
- (6 (a 4) (b 7))
- (7 nil))
- (parser--lr-items-for-grammar)))
+ ;; (message "GOTO-table: %s" (parser--lr-items-for-grammar))
+ ;; (message "LR-items: %s" (parser--hash-to-list
(parser--lr-items-for-grammar)))
+
+ (should
+ (equal
+ '((0 (S nil (S a S b) (a)))
+ (1 (Sp (S) nil (e)))
+ (2 (S (S) (a S b) (e)))
+ (3 (S (S a) (S b) (e)))
+ (4 (S nil (S a S b) (a)))
+ (5 (S nil (S a S b) (b)))
+ (6 (S nil nil (b)))
+ (7 (S (S) (a S b) (b)))
+ (8 (S (S a) (S b) (b)))
+ (9 (S nil (S a S b) (a)))
+ (10 (S (S) (a S b) (a)))
+ (11 (S (S a) (S b) (a)))
+ (12 (S (S a S) (b) (a)))
+ (13 (S (S a S b) nil (a)))
+ (14 (S (S a S) (b) (b)))
+ (15 (S (S a S b) nil (b)))
+ (16 (S (S a S) (b) (e)))
+ (17 (S (S a S b) nil (e))))
+ (parser--hash-to-list (parser--lr-items-for-grammar))))
(message "Passed LR-items for example 5.30")
(message "Passed tests for (parser--lr-items-for-grammar)"))
- [elpa] externals/parser-generator 3373881 085/434: More work on GOTO-table generation, (continued)
- [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
- [elpa] externals/parser-generator 5150b91 075/434: Started working on lr-items for grammar function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 59aea4d 077/434: More tweaking new algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d0c9663 082/434: Passing test for distinct LR-items for grammar, ELPA Syncer, 2021/11/29
- [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 <=
- [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, 2021/11/29
- [elpa] externals/parser-generator fe6037b 088/434: Generating valid GOTO-table, ELPA Syncer, 2021/11/29