[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 7a175a8 205/434: Passed first unit tes
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 7a175a8 205/434: Passed first unit test for grammar prefixes |
Date: |
Mon, 29 Nov 2021 15:59:42 -0500 (EST) |
branch: externals/parser-generator
commit 7a175a889fef151be112b083d5f971be4da0b8bc
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passed first unit test for grammar prefixes
---
parser-generator.el | 83 ++++++++++++++++++++++++++-----------------
test/parser-generator-test.el | 2 +-
2 files changed, 52 insertions(+), 33 deletions(-)
diff --git a/parser-generator.el b/parser-generator.el
index 2b26858..3361101 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -167,46 +167,65 @@
(parser-generator--get-grammar-terminals)
(parser-generator--get-grammar-non-terminals)))
(prefixes)
- (added-prefixes (make-hash-table :test 'equal))
(k parser-generator--look-ahead-number)
- (indexes)
+ (indexes (make-hash-table :test 'equal))
(index)
(prefix)
- (prefix-indexes))
+ (stack)
+ (increment-index 0))
(let ((symbols-length (length symbols))
- (i 0)
- (found-new t))
+ (i 0))
- ;; Initialize indexes
+ ;; Reset all indexes
(while (< i k)
- (push 0 indexes)
+ (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))
+ (while index-remains
+
+ (setq i 0)
+ (setq prefix nil)
+ (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))
+ (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
+ (push prefix stack))
+ ))
- (while found-new
- ;; Reset variables
- (setq found-new nil)
- (setq i 0)
- (setq prefix nil)
- (setq prefix-indexes nil)
-
- ;; Build prefix and prefix-indexes from actual state
- (while (< i k)
- (setq index (nth i indexes))
- (push (nth index symbols) prefix)
- (push index prefix-indexes)
- (setq i (1+ i)))
-
- (message "prefix: %s" prefix)
-
- ;; If prefix is new add to list
- (unless (gethash prefix-indexes added-prefixes)
- (push prefix prefixes)
- (puthash prefix-indexes t added-prefixes))
-
- ;; TODO Try to find a new index here
-
- ))
- (sort prefixes 'parser-generator--sort-list)))
+ (while stack
+ (let ((index-list (pop stack)))
+ ;; Reset variables
+ (setq i 0)
+ (setq prefix nil)
+
+ ;; Build prefix and prefix-indexes from actual state
+ (while (< i k)
+ (setq index (nth i index-list))
+ (push (nth index symbols) prefix)
+ (setq i (1+ i)))
+
+ (push prefix prefixes))))
+ (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 5d74105..fb59ec9 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -704,7 +704,7 @@
(should
(equal
- '(("a") (A) ("b") (B) (S))
+ '((A) (B) (S) ("a") ("b"))
(parser-generator--get-grammar-prefixes)))
(message "Passed tests for (parser-generator--get-grammar-prefixes)"))
- [elpa] externals/parser-generator 046e239 187/434: Passing first 3 complex tests for first, (continued)
- [elpa] externals/parser-generator 046e239 187/434: Passing first 3 complex tests for first, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4811521 185/434: Various tweakings, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7b6c1dc 186/434: First function passing first complex grammar test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7e96f9d 188/434: Passing all unit tests for first function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7a90a75 190/434: Updated max interation count, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 796b41b 192/434: Passed unit tests for follow function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 33634dd 193/434: Passing all tests after refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ba8e501 194/434: Added failing first test with complex case, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 71d213b 201/434: More work on Canonical LR(k) Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d7ad86c 200/434: Added TODO item for LRk Canonical Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7a175a8 205/434: Passed first unit test for grammar prefixes,
ELPA Syncer <=
- [elpa] externals/parser-generator 517ed12 212/434: Passing some more unit tests after refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f4ba363 031/434: Improved README.md, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 744fdf6 174/434: Added TODO item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d360e8a 176/434: Added failing unit test for FIRST function with starting e-identifier, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c1cdf20 197/434: Fixed issue with lex analyzer reached end of input, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 446cbe9 217/434: Refactored unit tests and separated k=2 case, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1818b9d 199/434: Added error in action-tables generation if no accept action is found, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 54857e4 220/434: Added failing unit test for translation via LRk, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a96ab3a 222/434: More debugging LR k > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 783ea61 227/434: Added translation-symbol-table to incremental parser and translater, ELPA Syncer, 2021/11/29