[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 069bf34 209/434: Added test for new he
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 069bf34 209/434: Added test for new helper function list of symbol |
Date: |
Mon, 29 Nov 2021 15:59:43 -0500 (EST) |
branch: externals/parser-generator
commit 069bf34ee5d3ca3c3c9f0e9969f8e42aa2c7c4a1
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added test for new helper function list of symbol
---
parser-generator.el | 80 +++++++++++++++++++++----------------------
test/parser-generator-test.el | 35 ++++++++++++++-----
2 files changed, 66 insertions(+), 49 deletions(-)
diff --git a/parser-generator.el b/parser-generator.el
index b98f352..116f1f0 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -90,6 +90,15 @@
(push element new-elements)))
(nreverse new-elements)))
+(defun parser-generator--generate-list-of-symbol (k symbol)
+ "Generate list of K number of SYMBOL."
+ (let ((list-index 0)
+ (list))
+ (while (< list-index k)
+ (push symbol list)
+ (setq list-index (1+ list-index)))
+ list))
+
(defun parser-generator--get-grammar-look-aheads ()
"Return all possible look-ahead set."
(unless parser-generator--look-ahead-number
@@ -160,46 +169,6 @@
(error "No grammar G defined!")))
(nth 0 G))
-(defun parser-generator--generate-list-of-symbol (k symbol)
- "Generate list of K number of SYMBOL."
- (let ((list-index 0)
- (list))
- (while (< list-index k)
- (push symbol list)
- (setq list-index (1+ list-index)))
- list))
-
-(defun parser-generator--get-list-permutations (list k)
- "Return all possible LIST permutations length K."
- (let ((permutations)
- (permutations-length 1))
- (let ((list-length (length list))
- (i 0))
- (while (< i k)
-
- (let ((times (expt list-length (- k (1+ i))))
- (global-i 0))
- (while (< global-i permutations-length)
- ;; For each list..
- (let ((list-i 0))
- (while (< list-i list-length)
-
- ;; Add it |list| ^ (k - i) times to list
- (let ((times-i 0))
- (while (< times-i times)
- (if (= i 0)
- (push (list (nth list-i list)) permutations)
- (push (nth list-i list) (nth global-i permutations)))
- (setq global-i (1+ global-i))
- (setq times-i (1+ times-i))))
- (setq list-i (1+ list-i))))
-
- (when (= i 0)
- (setq permutations-length (length permutations)))))
-
- (setq i (1+ i))))
- (sort permutations 'parser-generator--sort-list)))
-
(defun parser-generator--get-grammar-production-number (production)
"If PRODUCTION exist, return it's number."
(unless parser-generator--table-productions-number
@@ -248,6 +217,37 @@
(error "Table for translations by production-number is undefined!"))
(gethash production-number parser-generator--table-translations))
+(defun parser-generator--get-list-permutations (list k)
+ "Return all possible LIST permutations length K."
+ (let ((permutations)
+ (permutations-length 1))
+ (let ((list-length (length list))
+ (i 0))
+ (while (< i k)
+
+ (let ((times (expt list-length (- k (1+ i))))
+ (global-i 0))
+ (while (< global-i permutations-length)
+ ;; For each list..
+ (let ((list-i 0))
+ (while (< list-i list-length)
+
+ ;; Add it |list| ^ (k - i) times to list
+ (let ((times-i 0))
+ (while (< times-i times)
+ (if (= i 0)
+ (push (list (nth list-i list)) permutations)
+ (push (nth list-i list) (nth global-i permutations)))
+ (setq global-i (1+ global-i))
+ (setq times-i (1+ times-i))))
+ (setq list-i (1+ list-i))))
+
+ (when (= i 0)
+ (setq permutations-length (length permutations)))))
+
+ (setq i (1+ i))))
+ (sort permutations 'parser-generator--sort-list)))
+
(defun parser-generator--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)
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index ea3195dc..00f0c8f 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -740,24 +740,41 @@
(message "Passed tests for (parser-generator--get-list-permutations)"))
+(defun parser-generator-test--generate-list-of-symbol ()
+ "Test `parser-generator--generate-list-of-symbol'."
+ (message "Starting tests for
(parser-generator-test--generate-list-of-symbol)")
+
+ (should
+ (equal
+ '(a a a)
+ (parser-generator--generate-list-of-symbol 3 'a)))
+
+ (should
+ (equal
+ '((a b) (a b))
+ (parser-generator--generate-list-of-symbol 2 '(a b))))
+
+ (message "Passed tests for
(parser-generator-test--generate-list-of-symbol)"))
+
(defun parser-generator-test ()
"Run test."
;; (setq debug-on-error t)
;; Helpers
- (parser-generator-test--valid-look-ahead-p)
- (parser-generator-test--valid-look-ahead-number-p)
- (parser-generator-test--valid-production-p)
+ (parser-generator-test--distinct)
+ (parser-generator-test--generate-list-of-symbol)
+ (parser-generator-test--get-grammar-look-aheads)
+ (parser-generator-test--get-grammar-rhs)
+ (parser-generator-test--get-list-permutations)
+ (parser-generator-test--merge-max-terminals)
+ (parser-generator-test--sort-list)
(parser-generator-test--valid-grammar-p)
+ (parser-generator-test--valid-look-ahead-number-p)
+ (parser-generator-test--valid-look-ahead-p)
(parser-generator-test--valid-non-terminal-p)
+ (parser-generator-test--valid-production-p)
(parser-generator-test--valid-sentential-form-p)
(parser-generator-test--valid-terminal-p)
- (parser-generator-test--distinct)
- (parser-generator-test--sort-list)
- (parser-generator-test--get-grammar-rhs)
- (parser-generator-test--get-grammar-look-aheads)
- (parser-generator-test--merge-max-terminals)
- (parser-generator-test--get-list-permutations)
;; Algorithms
(parser-generator-test--first)
- [elpa] externals/parser-generator cee559d 139/434: Added separate document for lexical analysis documentation, (continued)
- [elpa] externals/parser-generator cee559d 139/434: Added separate document for lexical analysis documentation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator de0ed95 142/434: Updated README.md, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fa7089e 144/434: Re-factored lex analyzer function to not use length argument, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7eb9a4a 156/434: Fixed issue with indexing productions when they have SDT, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 19667b3 158/434: Added failing unit test for translation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a8a4e7f 166/434: Minor fix, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c0310bf 169/434: Added error-handling to lexical analyser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator dfbd97f 184/434: More tweaking of f-set generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 13d76ae 207/434: Passed tests for generating list permutations of length k, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 06f8d37 211/434: More work on debugging LRk parser with k > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 069bf34 209/434: Added test for new helper function list of symbol,
ELPA Syncer <=
- [elpa] externals/parser-generator c8c130e 226/434: Improved error messages, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 80f99cf 241/434: Added failing unit test for lr-items set k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5032a77 233/434: Fixed typo in Lex Analyzer error, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 07320b9 249/434: Updated test-case k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d49f74f 244/434: Added failing test for action-tables LRk parser k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fe05328 250/434: Passed unit tests for LRk parser k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d1f4682 248/434: Added a function that converts a FIRST-item to a look-ahead item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6845262 243/434: Passed GOTO-tables k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3a0d4cd 255/434: Added translation test for LRk=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 03ca2e9 247/434: Look-ahead generation now supports EOF symbol, ELPA Syncer, 2021/11/29