[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 3e1f2b6 058/434: Passed first for cal
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 3e1f2b6 058/434: Passed first for calculating valid LR-sets for viable prefix γ |
Date: |
Mon, 29 Nov 2021 15:59:08 -0500 (EST) |
branch: externals/parser-generator
commit 3e1f2b6875cd23b5a2a75a09fcd4de17ab8bb012
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passed first for calculating valid LR-sets for viable prefix γ
---
parser.el | 21 +++------------------
test/parser-test.el | 6 +++---
2 files changed, 6 insertions(+), 21 deletions(-)
diff --git a/parser.el b/parser.el
index 7986fad..af5ac0d 100644
--- a/parser.el
+++ b/parser.el
@@ -663,8 +663,6 @@
(push `(,start nil ,rhs (e)) lr-items-e)
(puthash `(e ,start nil ,rhs (e)) t lr-item-exists))
- (message "V(e): %s" lr-items-e)
-
;; (b) Iterate every item in v-set(e), if [A -> . Bα, u] is an item
and B -> β is in P
;; then for each x in FIRST(αu) add [B -> . β, x] to v-set(e),
provided it is not already there
(let ((found-new t))
@@ -679,22 +677,14 @@
(rhs (nth 2 item))
(suffix (nth 3 item)))
- (message "item: %s" item)
- (message "prefix: %s" prefix)
- (message "rhs: %s" rhs)
- (message "suffix: %s" suffix)
-
;; Without prefix
(unless prefix
;; Check if RHS starts with a non-terminal
(let ((rhs-first (car rhs)))
(when (parser--valid-non-terminal-p rhs-first)
- (message "rhs-first: %s" rhs-first)
(let ((rhs-rest (append (cdr rhs) suffix)))
- (message "rhs-rest: %s" rhs-rest)
(let ((rhs-rest-first (parser--first rhs-rest)))
- (message "1b FIRST(%s) = %s" rhs-rest rhs-rest-first)
(let ((sub-production (parser--get-grammar-rhs
rhs-first)))
;; For each production with B as LHS
@@ -704,16 +694,13 @@
(dolist (f rhs-rest-first)
;; Add [B -> . β, x] to v-set(e), provided it
is not already there
- (message "f: %s" f)
(unless (gethash `(e ,rhs-first nil ,sub-rhs
,f) lr-item-exists)
- (message "new-item: %s" `(,rhs-first nil
,sub-rhs ,f))
(puthash `(e ,rhs-first nil ,sub-rhs ,f) t
lr-item-exists)
(push `(,rhs-first nil ,sub-rhs ,f)
lr-items-e)
;; (c) Repeat (b) until no more items can be
added to v-set(e)
(setq found-new t))))))))))))))
- (puthash 'e lr-items-e lr-items)
- (message "V(e) = %s" lr-items-e))
+ (puthash 'e lr-items-e lr-items))
;; 2 Suppose that we have constructed V(X1,X2,...,Xi-1) we construct
V(X1,X2,...,Xi) as follows:
(let ((prefix-acc)
@@ -723,7 +710,6 @@
(setq prefix-acc (append prefix-acc prefix))
(unless (listp prefix-acc)
(setq prefix-acc (list prefix-acc)))
- (message "prefix-acc: %s" prefix-acc)
(dolist (lr-item prefix-previous)
(let ((lr-item-lhs (nth 0 lr-item))
@@ -737,7 +723,8 @@
(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)))))
+ (let ((combined-prefix (append lr-item-prefix (list
prefix))))
+ (push `(,lr-item-lhs ,combined-prefix
,lr-item-suffix-rest ,lr-item-look-ahead) lr-new-item))))))
;; (c) Repeat step (2b) until no more new items can be added to
V(X1,...,Xi)
(let ((added-new t))
@@ -753,7 +740,6 @@
(when (parser--valid-non-terminal-p lr-item-suffix-first)
(let ((lr-item-suffix-rest-first (parser--first
lr-item-suffix-rest)))
- (message "2b FIRST(%s) = %s" lr-item-suffix-first
lr-item-suffix-rest-first)
(let ((sub-production (parser--get-grammar-rhs
lr-item-suffix-first)))
;; For each production with B as LHS
@@ -769,7 +755,6 @@
(puthash `(,prefix-acc ,lr-item-suffix-first
nil ,sub-rhs ,f) t lr-item-exists)
(push `(,lr-item-suffix-first nil ,sub-rhs
,f) lr-new-item))))))))))))
- (message "V%s = %s" prefix-acc lr-new-item)
(setq prefix-previous prefix-acc)
(puthash prefix-acc lr-new-item lr-items))))
diff --git a/test/parser-test.el b/test/parser-test.el
index 50c1e2b..44e31ca 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -233,9 +233,9 @@
(message "Loaded grammar")
(should
(equal
- '((Sp (S) nil nil e)
- (S (S) nil (a S b) a)
- (S (S) nil (a S b) e))
+ '((Sp (S) nil (e))
+ (S (S) (a S b) (e))
+ (S (S) (a S b) (a)))
(parser--lr-items 'S)))
(message "Passed tests for (parser--lr-items)"))
- [elpa] externals/parser-generator 00ffcde 052/434: Added TODO items, (continued)
- [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, 2021/11/29
- [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 <=
- [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, 2021/11/29