[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 44eb5a3 062/434: Passing unit test for
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 44eb5a3 062/434: Passing unit test for V(e) and V(S) |
Date: |
Mon, 29 Nov 2021 15:59:09 -0500 (EST) |
branch: externals/parser-generator
commit 44eb5a3eb66550edf275e9a3d0e9dea2de9c7e3c
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passing unit test for V(e) and V(S)
---
parser.el | 18 ++++++++++++++----
test/parser-test.el | 12 +++++-------
2 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/parser.el b/parser.el
index f33c556..fb09c89 100644
--- a/parser.el
+++ b/parser.el
@@ -11,7 +11,7 @@
(defvar parser--debug
- t
+ nil
"Whether to print debug messages or not.")
(defvar parser--table-non-terminal-p
@@ -677,6 +677,8 @@
;; Check if RHS starts with a non-terminal
(let ((rhs-first (car rhs)))
+ (parser--debug
+ (message "rhs-first: %s" rhs-first))
(when (parser--valid-non-terminal-p rhs-first)
(let ((rhs-rest (append (cdr rhs) suffix)))
(let ((rhs-rest-first (parser--first rhs-rest)))
@@ -685,9 +687,18 @@
(unless rhs-rest-first
(setq rhs-rest-first '((e))))
(let ((sub-production (parser--get-grammar-rhs
rhs-first)))
+ (parser--debug
+ (message "sub-production: %s" sub-production))
;; For each production with B as LHS
(dolist (sub-rhs sub-production)
+
+ ;; Set follow to nil if it's the e-identifier
+ (when (and
+ (= (length sub-rhs) 1)
+ (eq (car sub-rhs) 'e))
+ (setq sub-rhs nil))
+
(parser--debug
(message "sub-rhs: %s" sub-rhs))
@@ -707,11 +718,10 @@
(message "V(e) = %s" lr-items-e))
(puthash '(e) lr-items-e lr-items))
- ;; Do step 2 only if prefix is not the e identifier
+ ;; 2 Suppose that we have constructed V(X1,X2,...,Xi-1) we construct
V(X1,X2,...,Xi) as follows:
(unless (and
(= (length γ) 1)
(eq (car γ) 'e))
- ;; 2 Suppose that we have constructed V(X1,X2,...,Xi-1) we construct
V(X1,X2,...,Xi) as follows:
(let ((prefix-acc)
(prefix-previous (gethash '(e) lr-items)))
(dolist (prefix γ)
@@ -776,7 +786,7 @@
(puthash prefix-acc lr-new-item lr-items)))))
(parser--debug
- (message "γ: %s" γ))
+ (message "γ: %s" γ))
(gethash γ lr-items))))
diff --git a/test/parser-test.el b/test/parser-test.el
index fa0517f..87189e1 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -231,15 +231,13 @@
(parser--set-grammar '((Sp S) (a b) ((Sp S) (S (S a S b)) (S e)) Sp))
(parser--set-look-ahead-number 1)
- '((S (e) nil (e)) (S (e) nil (a)))
-
(should
(equal
- '((Sp nil (S) (e))
- (S nil (S a S b) (e))
- (S nil (S a S b) (a))
- (S nil nil (e))
- (S nil nil (a)))
+ '((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)))
(parser--lr-items 'e)))
(message "Passed V(e)")
- [elpa] externals/parser-generator 3e1f2b6 058/434: Passed first for calculating valid LR-sets for viable prefix γ, (continued)
- [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, 2021/11/29
- [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 <=
- [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
- [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