[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 85d1b49 345/434: Infix calculator tran
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 85d1b49 345/434: Infix calculator translation passing some tests |
Date: |
Mon, 29 Nov 2021 16:00:12 -0500 (EST) |
branch: externals/parser-generator
commit 85d1b4916c6855d7a65dab81eff4ecb646b3f064
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Infix calculator translation passing some tests
---
parser-generator-lr.el | 86 +++++++++++++++++++++++++++-------------
parser-generator.el | 2 +-
test/parser-generator-lr-test.el | 11 ++++-
3 files changed, 70 insertions(+), 29 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 67343e1..8934b3f 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -1803,33 +1803,47 @@
(dolist (popped-item popped-items-contents)
(parser-generator--debug
(message
- "popped-item: %s"
+ "popped-item: %s (for translation)"
popped-item))
(if (and
(listp popped-item)
(cdr popped-item))
+
;; If item is a terminal, use it's literal
value
(push
(parser-generator-lex-analyzer--get-function
popped-item)
popped-items-meta-contents)
+
+ ;; If item is a non-terminal
(let ((temp-hash-key
(format
"%S"
popped-item)))
+
+ ;; If we have a translation for symbol, pop
one
+ ;; otherwise push nil on translation
argument stack
(if (gethash
temp-hash-key
translation-symbol-table)
- (push
- (gethash
- temp-hash-key
- translation-symbol-table)
- popped-items-meta-contents)
+ (let ((symbol-translations
+ (gethash
+ temp-hash-key
+ translation-symbol-table)))
+ (let ((symbol-translation
+ (pop symbol-translations)))
+ (push
+ symbol-translation
+ popped-items-meta-contents)
+ (puthash
+ temp-hash-key
+ symbol-translations
+ translation-symbol-table)))
(push
nil
popped-items-meta-contents)))))
- ;; If we just have one argument, pass it as a
scalar
+ ;; If we just have one argument, pass it as a
instead of a list
(if (= (length popped-items-meta-contents) 1)
(setq
popped-items-meta-contents
@@ -1859,17 +1873,26 @@
"translation-symbol-table: %s = %s"
production-lhs
partial-translation))
- (puthash
- (format
- "%S"
- production-lhs)
- partial-translation
- translation-symbol-table)
- (setq
- translation
- partial-translation))
-
- ;; When no translation is specified just use
partial-translation as translation
+ (let ((symbol-translations
+ (gethash
+ (format
+ "%S"
+ production-lhs)
+ translation-symbol-table)))
+ (push
+ partial-translation
+ symbol-translations)
+ (puthash
+ (format
+ "%S"
+ production-lhs)
+ (reverse symbol-translations)
+ translation-symbol-table)
+ (setq
+ translation
+ partial-translation)))
+
+ ;; When no translation is specified just use
popped contents as translation
(let ((partial-translation
popped-items-meta-contents))
(parser-generator--debug
@@ -1877,15 +1900,24 @@
"translation-symbol-table: %s = %s (generic)"
production-lhs
partial-translation))
- (puthash
- (format
- "%S"
- production-lhs)
- partial-translation
- translation-symbol-table)
- (setq
- translation
- partial-translation))))
+ (let ((symbol-translations
+ (gethash
+ (format
+ "%S"
+ production-lhs)
+ translation-symbol-table)))
+ (push
+ partial-translation
+ symbol-translations)
+ (puthash
+ (format
+ "%S"
+ production-lhs)
+ (reverse symbol-translations)
+ translation-symbol-table)
+ (setq
+ translation
+ partial-translation)))))
(let ((new-table-index (car pushdown-list)))
(let ((goto-table-distinct-index
diff --git a/parser-generator.el b/parser-generator.el
index 72a44da..b3520c8 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -17,7 +17,7 @@
(defvar
parser-generator--debug
- t
+ nil
"Whether to print debug messages or not.")
(defvar
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 7da377a..57f7381 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -684,12 +684,21 @@
(switch-to-buffer buffer)
(kill-region (point-min) (point-max))
(insert "7-3\n")
- (message "7-3=%S" (parser-generator-lr-translate))
(should
(equal
4
(parser-generator-lr-translate)))
(message "7-3=4\n")
+
+ (switch-to-buffer buffer)
+ (kill-region (point-min) (point-max))
+ (insert "3+4+5-6\n")
+ (should
+ (equal
+ 6
+ (parser-generator-lr-translate)))
+ (message "3+4+5-6=6\n")
+
(kill-buffer))
(message "Passed tests for (parser-generator-lr--parse)"))
- [elpa] externals/parser-generator 0d6d46d 294/434: Debugging incremental issue with exported translator, (continued)
- [elpa] externals/parser-generator 0d6d46d 294/434: Debugging incremental issue with exported translator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c4c68b2 302/434: Added progress-indicator to goto-table generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 586789d 308/434: Added cache to first calculation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 236a124 322/434: More work on resolving conflicts, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 04c360b 318/434: LR-items set validation now supports symbols with attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ea02245 325/434: Improved debug output, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e56bcff 324/434: Improved output of productions and action-tables, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fb29641 337/434: Passing old context-sensitive precedence example with new structure, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 928b31d 343/434: More work on infix calculator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6a4b353 344/434: More work on translations, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 85d1b49 345/434: Infix calculator translation passing some tests,
ELPA Syncer <=
- [elpa] externals/parser-generator 08e9876 347/434: Fixed bug with associating a translation to multiple productions, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c6d3ad2 352/434: Infix calculator working as expected without precedence rules, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 21948c8 358/434: Fixed lex-analyzer to infix calculator test to support white-space and floats, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 14711d4 363/434: Added more debug stuff, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f0f2daa 364/434: Started refactor of context-sensitive attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7e1d2fb 368/434: Added TODO notes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5a1f09a 369/434: More work on adding support for production number related precedence, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e4658d9 372/434: LR action-table generation is now using context-sensitive precedence resolution for reduce/reduce conflicts, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6aff9d0 373/434: Made TODO notes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 831a6e6 379/434: Made a commentary audit of parse according to GOTO and ACTION tables, ELPA Syncer, 2021/11/29