[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 38223d3 206/434: Passed tests for gene
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 38223d3 206/434: Passed tests for generating grammar prefixes |
Date: |
Mon, 29 Nov 2021 15:59:42 -0500 (EST) |
branch: externals/parser-generator
commit 38223d371bb299163f02f0be1c8acc3691775117
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passed tests for generating grammar prefixes
---
parser-generator.el | 54 ++++++++++++++++++++++++++++++++-----------
test/parser-generator-test.el | 10 ++++++++
2 files changed, 50 insertions(+), 14 deletions(-)
diff --git a/parser-generator.el b/parser-generator.el
index 3361101..9a95db5 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -172,7 +172,8 @@
(index)
(prefix)
(stack)
- (increment-index 0))
+ (increment-index)
+ (include))
(let ((symbols-length (length symbols))
(i 0))
@@ -181,7 +182,6 @@
(puthash i 0 indexes)
(push 0 index)
(setq i (1+ i)))
- (setq stack (list index))
;; Build stack of all indexes that needs to be processed
(let ((index-remains t))
@@ -189,26 +189,52 @@
(setq i 0)
(setq prefix nil)
+ (setq include t)
(while (< i k)
(setq index (gethash i indexes))
- (when (= i increment-index)
- (if (and
- (= index (1- symbols-length))
- (= increment-index (1- k)))
- (setq index-remains nil)
- (if (= index (1- symbols-length))
+ (when increment-index
+ (when (= i increment-index)
+ (if (and
+ (= index (1- symbols-length))
+ (= increment-index (1- k)))
(progn
- (setq index 0)
- (setq increment-index (1+ increment-index)))
- (setq index (1+ index)))
- (puthash i index indexes)))
+
+ ;; Iterate columns and see if any is less than
+ ;; max index, in that case increment it and re-do
+ ;; last column
+ (let ((found-not-incremented)
+ (i-2 0))
+ (while (and
+ (< i-2 (1- k))
+ (not found-not-incremented))
+ (unless (= (gethash i-2 indexes) (1- symbols-length))
+ (puthash i-2 (1+ (gethash i-2 indexes)) indexes)
+ (puthash i -1 indexes)
+ (setq include nil)
+ (setq found-not-incremented t))
+ (setq i-2 (1+ i-2)))
+
+ (unless found-not-incremented
+ (setq index-remains nil))))
+ (if (= index (1- symbols-length))
+ (progn
+ (setq index 0)
+ (setq increment-index (1+ increment-index)))
+ (setq index (1+ index)))
+ (puthash i index indexes))))
(when index-remains
(push index prefix))
(setq i (1+ i)))
- (when index-remains
+ (unless increment-index
+ (setq increment-index (1- k)))
+
+ (when (and
+ index-remains
+ include)
+ (setq prefix (nreverse prefix))
(push prefix stack))
))
@@ -225,7 +251,7 @@
(setq i (1+ i)))
(push prefix prefixes))))
- (sort prefixes 'parser-generator--sort-list)))
+ (sort prefixes 'parser-generator--sort-list)))
(defun parser-generator--get-grammar-production-number (production)
"If PRODUCTION exist, return it's number."
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index fb59ec9..c6647f5 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -707,6 +707,16 @@
'((A) (B) (S) ("a") ("b"))
(parser-generator--get-grammar-prefixes)))
+ (parser-generator-set-look-ahead-number 2)
+ (should
+ (equal
+ '((A A) (A B) (A S) (A "a") (A "b")
+ (B A) (B B) (B S) (B "a") (B "b")
+ (S A) (S B) (S S) (S "a") (S "b")
+ ("a" A) ("a" B) ("a" S) ("a" "a") ("a" "b")
+ ("b" A) ("b" B) ("b" S) ("b" "a") ("b" "b"))
+ (parser-generator--get-grammar-prefixes)))
+
(message "Passed tests for (parser-generator--get-grammar-prefixes)"))
(defun parser-generator-test ()
- [elpa] externals/parser-generator 04fdc96 167/434: Added unit-test for incremental translations, (continued)
- [elpa] externals/parser-generator 04fdc96 167/434: Added unit-test for incremental translations, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fa6237a 170/434: Added TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 71f03cc 171/434: Updated example, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0b72792 177/434: Added failing unit tests for FIRST, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 181b499 178/434: Fixed bug in FIRST generation where multiple equal LHS:s, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c4455db 179/434: Added TODO-item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 84ffb4e 181/434: f-set max index is now set depending on if all non-terminals have been expanded or not, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4aeed22 191/434: Passed tests for e-free first function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 18d7c63 195/434: Added new function to merge lists of terminals, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 60d9968 202/434: Fixed valid look-ahead with k above 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 38223d3 206/434: Passed tests for generating grammar prefixes,
ELPA Syncer <=
- [elpa] externals/parser-generator 8a6b752 208/434: Starting on adding support for LR k > 1 parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d604092 223/434: Added failing unit test for e-free-first function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 172d530 214/434: Improved handling of production LHS to enable multiple symbols, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fbc8f8b 225/434: Removed dependency of hash-table of terminals for LR parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 870eca2 232/434: Reduced depth of GOTO-table to always use one symbol, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5b45b2b 235/434: Improved comments, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c2d2d0d 239/434: Fixed FIRST calculating when building lr-item sets, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a516e3f 234/434: Started on new test for LR(2) Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 06c09bc 254/434: Removed commented-out code, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a796d8d 253/434: Added another passing unit test for k=2, ELPA Syncer, 2021/11/29