[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator ddd5967 221/434: Passed test for neste
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator ddd5967 221/434: Passed test for nested translations |
Date: |
Mon, 29 Nov 2021 15:59:45 -0500 (EST) |
branch: externals/parser-generator
commit ddd5967b419f39d17ebe521cf5e41c05c417295b
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passed test for nested translations
---
parser-generator-lr.el | 56 +++++++++++++++++++++++++++-------------
test/parser-generator-lr-test.el | 10 +++----
2 files changed, 43 insertions(+), 23 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 5251685..cf51d4a 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -671,6 +671,7 @@
(let ((accept)
(pre-index 0)
+ (translation-symbol-table (make-hash-table :test 'equal))
(e-list
(parser-generator--generate-list-of-symbol
parser-generator--look-ahead-number
@@ -835,31 +836,46 @@
(popped-item))
(while (< popped-items pop-items)
(setq popped-item (pop pushdown-list))
- (message "popped-item: %s" popped-item)
+ (parser-generator--debug
+ (message "popped-item: %s" popped-item))
(when (and
(listp popped-item)
(parser-generator--valid-symbol-p
(car popped-item)))
(push
- (car popped-item)
+ popped-item
popped-items-contents))
(setq popped-items (1+ popped-items)))))
(push production-number output)
- ;; TODO If popped items contain a non-terminal
- ;; it should be evaluated first before
- ;; translation is executed.
-
;; Perform translation at reduction if specified
(when
(parser-generator--get-grammar-translation-by-number
production-number)
+
(let ((popped-items-meta-contents))
(dolist (popped-item popped-items-contents)
- (push
- (parser-generator-lex-analyzer--get-function
- popped-item)
- popped-items-meta-contents))
+ (parser-generator--debug
+ (message
+ "popped-item: %s"
+ popped-item))
+ (if (parser-generator--valid-terminal-p
+ (car popped-item))
+ (push
+ (parser-generator-lex-analyzer--get-function
+ popped-item)
+ popped-items-meta-contents)
+ (if (gethash
+ popped-item
+ translation-symbol-table)
+ (push
+ (gethash
+ popped-item
+ translation-symbol-table)
+ popped-items-meta-contents)
+ (push
+ nil
+ popped-items-meta-contents))))
(setq
popped-items-meta-contents
(nreverse popped-items-meta-contents))
@@ -869,12 +885,18 @@
(parser-generator--get-grammar-translation-by-number
production-number)
popped-items-meta-contents)))
- (when partial-translation
- (unless (listp partial-translation)
- (setq partial-translation (list
partial-translation)))
- (dolist (part-translation partial-translation)
- (message "part-translation: %s"
part-translation)
- (push part-translation translation))))))
+ (parser-generator--debug
+ (message
+ "translation-symbol-table: %s = %s"
+ production-lhs
+ partial-translation))
+ (puthash
+ production-lhs
+ partial-translation
+ translation-symbol-table)
+ (setq
+ translation
+ partial-translation))))
(let ((new-table-index (car pushdown-list)))
(let ((goto-table
@@ -926,8 +948,6 @@
(error
"Parsed entire string without getting accepting! Output: %s"
(reverse output)))
- (when translation
- (setq translation (nreverse translation)))
(when history
(setq history (reverse history)))
(when output
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 6eea0b9..f4357e9 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -452,7 +452,7 @@
(switch-to-buffer buffer)
(insert "aabb")
- (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b"
(lambda(args) (nreverse args)))) (S e)) Sp))
+ (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b"
(lambda(args) (let ((list "")) (dolist (item args) (when item (setq list
(format "%s%s" item list)))) list)))) (S e)) Sp))
(parser-generator-set-look-ahead-number 1)
(parser-generator-process-grammar)
(parser-generator-lr-generate-parser-tables)
@@ -478,7 +478,7 @@
(should
(equal
- '("b" "a" "b" "a")
+ "bbaaba"
(parser-generator-lr-translate)))
(kill-buffer buffer))
@@ -534,7 +534,7 @@
(should
(equal
- '("(when a b)")
+ "(when a b)"
(parser-generator-lr-translate)))
(message "Passed test with non-nested translation")
@@ -550,7 +550,7 @@
(should
(equal
- '("(when a (message b))")
+ "(when a (message b))"
(parser-generator-lr-translate)))
(message "Passed test with nested-translation with depth 2")
@@ -629,7 +629,7 @@
(parser-generator-lr-test--generate-action-tables)
(parser-generator-lr-test-parse)
(parser-generator-lr-test-translate)
- (parser-generator-lr-test-parse-k-2)
+ ;; (parser-generator-lr-test-parse-k-2)
)
- [elpa] externals/parser-generator 500d082 284/434: Added Lex-Analyzer Rest Function to export, (continued)
- [elpa] externals/parser-generator 500d082 284/434: Added Lex-Analyzer Rest Function to export, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator cf42e67 288/434: Exported parser passes test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1e0418d 295/434: Incremental parse and translate of exported parser passes tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7584880 298/434: Added failing unit test for calculating FIRST in grammar with cycles, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f338734 303/434: Improved output of progress, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 98c9d94 213/434: Debugging parse with look-ahead > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2b0d5b8 215/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 640feed 216/434: Passing all tests for canonical LRk Parser with k = 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e5aa179 218/434: Some fixes for LRk parser k > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2a9a23e 219/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ddd5967 221/434: Passed test for nested translations,
ELPA Syncer <=
- [elpa] externals/parser-generator bc817d1 224/434: Passing all tests for k=1 again, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b2f1d7a 236/434: More debugging k > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 16f6586 242/434: Fixed bug in lr-item generation were look-ahead was disregarded, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 36701c0 238/434: Optimized closure algorithm to only use possible next-symbols instead of iterating all symbols, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3e096f7 258/434: Improved translation handling for each production, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 96cd5de 259/434: Improved validation of grammar structure, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bbdbd18 269/434: Started on test for LR Parse k=0, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 56363c1 263/434: Fixed last TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 175a579 275/434: Passed test for generation action-table LR(0) grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ecbbf21 290/434: Added test for exported translator, ELPA Syncer, 2021/11/29