[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator ef60d96 204/434: Added failing test fo
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator ef60d96 204/434: Added failing test for new function the generates grammar prefixes |
Date: |
Mon, 29 Nov 2021 15:59:41 -0500 (EST) |
branch: externals/parser-generator
commit ef60d962e7701c761560d2f543a4bbcbb1b13106
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added failing test for new function the generates grammar prefixes
---
parser-generator.el | 48 +++++++++++++++++++++++++++++++++++++++++++
test/parser-generator-test.el | 16 +++++++++++++++
2 files changed, 64 insertions(+)
diff --git a/parser-generator.el b/parser-generator.el
index 2157d04..2b26858 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -160,6 +160,54 @@
(error "No grammar G defined!")))
(nth 0 G))
+(defun parser-generator--get-grammar-prefixes ()
+ "Return all prefixes of length look-ahead number of terminals and
non-terminals."
+ (let ((symbols
+ (append
+ (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)
+ (index)
+ (prefix)
+ (prefix-indexes))
+ (let ((symbols-length (length symbols))
+ (i 0)
+ (found-new t))
+
+ ;; Initialize indexes
+ (while (< i k)
+ (push 0 indexes)
+ (setq i (1+ i)))
+
+ (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)))
+
(defun parser-generator--get-grammar-production-number (production)
"If PRODUCTION exist, return it's number."
(unless parser-generator--table-productions-number
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index ec8e1b8..5d74105 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -694,6 +694,21 @@
(message "Passed tests for (parser-generator--merge-max-terminals)"))
+(defun parser-generator-test--get-grammar-prefixes ()
+ "Test `parser-generator--get-grammar-prefixes'."
+ (message "Passed tests for (parser-generator--get-grammar-prefixes)")
+
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-set-grammar '((S A B) ("a" "b") ((S A) (S (B)) (B "a") (A
"a") (A ("b" "a"))) S))
+ (parser-generator-process-grammar)
+
+ (should
+ (equal
+ '(("a") (A) ("b") (B) (S))
+ (parser-generator--get-grammar-prefixes)))
+
+ (message "Passed tests for (parser-generator--get-grammar-prefixes)"))
+
(defun parser-generator-test ()
"Run test."
;; (setq debug-on-error t)
@@ -711,6 +726,7 @@
(parser-generator-test--get-grammar-rhs)
(parser-generator-test--get-grammar-look-aheads)
(parser-generator-test--merge-max-terminals)
+ (parser-generator-test--get-grammar-prefixes)
;; Algorithms
(parser-generator-test--first)
- [elpa] externals/parser-generator fdbdff7 157/434: Added unit test for SDT in LR-parser, (continued)
- [elpa] externals/parser-generator fdbdff7 157/434: Added unit test for SDT in LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2d56ab0 160/434: Made separate functions for parse and translate in LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7cfdea2 165/434: Passing tests for incremental lexer, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b072fdd 175/434: Passed test for trailing e-identifier in EFF function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d435e50 122/434: Passing unit test for LR-parse, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a31da28 173/434: Updated Parser WIP items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator aaec6fa 189/434: Work on e-free first tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 922033f 198/434: Various stuff, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fe10d4a 196/434: Passed tests for first 3 and first 4 of complex grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4cba5aa 203/434: Made new TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ef60d96 204/434: Added failing test for new function the generates grammar prefixes,
ELPA Syncer <=
- [elpa] externals/parser-generator 76e30f1 210/434: Sorted lines in test file, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e88abf0 117/434: More work on parser, added error-handling, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8328ab3 130/434: Added unit test for failing LRk Grammar Parse, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e89a740 138/434: Fixed bug with goto-table generation were tokens were strings, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c667e18 121/434: Work on shift action in parsing algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fab7e46 128/434: Fixed link to LRk grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bd06863 132/434: LR-parser now uses lex-analyzer for parsing, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d14d427 140/434: Moved more about lex-analysis to separate document, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1613e89 146/434: Added lex-analyzer get function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5c8a7a5 147/434: Preparations for SDT support, ELPA Syncer, 2021/11/29