[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 7eb9a4a 156/434: Fixed issue with inde
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 7eb9a4a 156/434: Fixed issue with indexing productions when they have SDT |
Date: |
Mon, 29 Nov 2021 15:59:31 -0500 (EST) |
branch: externals/parser-generator
commit 7eb9a4abb0db3973be77add9974851383f6606ff
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Fixed issue with indexing productions when they have SDT
---
parser-generator.el | 36 ++++++++++++++++++++----------------
test/parser-generator-test.el | 2 +-
2 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/parser-generator.el b/parser-generator.el
index bb83211..7c24819 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -245,8 +245,7 @@
(dolist (non-terminal non-terminals)
(puthash non-terminal t parser-generator--table-non-terminal-p)))
- (let ((productions (parser-generator--get-grammar-productions))
- (purified-production))
+ (let ((productions (parser-generator--get-grammar-productions)))
(setq parser-generator--table-productions-rhs (make-hash-table :test
'equal))
(dolist (p productions)
(let ((lhs (car p))
@@ -279,22 +278,27 @@
(unless (listp rhs-element)
(setq rhs-element (list rhs-element)))
- (if (and
- (functionp rhs-element)
- (= rhs-element-index (1- rhs-length)))
- (progn
- (setq translation rhs-element)
- (parser-generator--debug
- (message "Translation %s: %s" production-index
translation)))
- (setq production (list lhs rhs-element))
+ (let ((sub-rhs-element-index 0)
+ (sub-rhs-element-length (length rhs-element))
+ (sub-rhs-element)
+ (new-rhs))
+ (while (< sub-rhs-element-index sub-rhs-element-length)
+ (setq sub-rhs-element (nth sub-rhs-element-index
rhs-element))
+ (if (functionp sub-rhs-element)
+ (setq translation sub-rhs-element)
+ (push sub-rhs-element new-rhs))
+ (setq sub-rhs-element-index (1+ sub-rhs-element-index)))
+ (setq production (list lhs (nreverse new-rhs)))
(parser-generator--debug
(message "Production %s: %s" production-index production)))
- (setq rhs-element-index (1+ rhs-element-index)))
- (puthash production production-index
parser-generator--table-productions-number)
- (puthash production-index production
parser-generator--table-productions-number-reverse)
- (when translation
- (puthash production-index translation
parser-generator--table-translations))
- (setq production-index (1+ production-index)))))))
+ (setq rhs-element-index (1+ rhs-element-index))
+ (puthash production production-index
parser-generator--table-productions-number)
+ (puthash production-index production
parser-generator--table-productions-number-reverse)
+ (when translation
+ (parser-generator--debug
+ (message "Translation %s: %s" production-index translation))
+ (puthash production-index translation
parser-generator--table-translations))
+ (setq production-index (1+ production-index))))))))
(let ((look-aheads (parser-generator--get-grammar-look-aheads)))
(setq parser-generator--table-look-aheads-p (make-hash-table :test 'equal))
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index b8a82c3..4ead2e0 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -378,7 +378,7 @@
(parser-generator--valid-grammar-p '((A B C) ("a" "b" "c") ((A "a"
(lambda(a) (message "Was here: %s" a)))) A))))
(should (equal
- t
+ nil
(parser-generator--valid-grammar-p '((A B C) ("a" "b" "c") ((A "a"
(lambda(a) (message "Was here: %s" a)) "b")) A))))
(should (equal
- [elpa] externals/parser-generator 043e375 095/434: Refactored LR-parser into stand-alone file, (continued)
- [elpa] externals/parser-generator 043e375 095/434: Refactored LR-parser into stand-alone file, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4f81d98 107/434: Sorting each row in action-table, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 62f54f1 110/434: Added failing unit test for e-free-first function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ee0ef5d 115/434: Added failing unit test for Algorithm 5.7, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b0e9111 125/434: Started on lex-analyzer function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0416ca9 134/434: Added information about lex-analyzer in README, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b756e1a 135/434: Added example of parsing using LR algorithm, ELPA Syncer, 2021/11/29
- [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 <=
- [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, 2021/11/29
- [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