[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator c6d3ad2 352/434: Infix calculator work
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator c6d3ad2 352/434: Infix calculator working as expected without precedence rules |
Date: |
Mon, 29 Nov 2021 16:00:13 -0500 (EST) |
branch: externals/parser-generator
commit c6d3ad2e40c28c1c43ecc1d105030839a0f88604
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Infix calculator working as expected without precedence rules
---
parser-generator-lr.el | 28 ++++++------------
test/parser-generator-lr-test.el | 63 +++++++++++++++++++++++++++++++++++++---
2 files changed, 68 insertions(+), 23 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index ec9d9b7..d48cb4e 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -1610,7 +1610,7 @@
(setq look-ahead (nreverse look-ahead))
(parser-generator--debug
- (message "look-ahead: %s" look-ahead)
+ (message "\nlook-ahead: %s" look-ahead)
(message "look-ahead-full: %s" look-ahead-full))
(let ((table-index
@@ -1787,7 +1787,7 @@
(while (< popped-items pop-items)
(setq popped-item (pop pushdown-list))
(parser-generator--debug
- (message "popped-item: %s" popped-item))
+ (message "popped-item-from-pushdownlist-list:
%s" popped-item))
(when (and
(listp popped-item)
(parser-generator--valid-symbol-p
@@ -1799,6 +1799,9 @@
(push production-number output)
(let ((popped-items-meta-contents))
+ (setq
+ popped-items-contents
+ (reverse popped-items-contents))
;; Collect arguments for translation
(dolist (popped-item popped-items-contents)
(parser-generator--debug
@@ -1844,13 +1847,10 @@
popped-items-meta-contents)))))
;; 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
- (car popped-items-meta-contents))
+ (when (= (length popped-items-meta-contents) 1)
(setq
popped-items-meta-contents
- (nreverse popped-items-meta-contents)))
+ (car popped-items-meta-contents)))
(parser-generator--debug
(message
@@ -1881,17 +1881,12 @@
(gethash
temp-hash-key
translation-symbol-table)))
- (when
- symbol-translations
- (setq
- symbol-translations
- (reverse symbol-translations)))
(push
partial-translation
symbol-translations)
(puthash
temp-hash-key
- (reverse symbol-translations)
+ symbol-translations
translation-symbol-table)
(setq
translation
@@ -1913,17 +1908,12 @@
(gethash
temp-hash-key
translation-symbol-table)))
- (when
- symbol-translations
- (setq
- symbol-translations
- (reverse symbol-translations)))
(push
partial-translation
symbol-translations)
(puthash
temp-hash-key
- (reverse symbol-translations)
+ symbol-translations
translation-symbol-table)
(setq
translation
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index e0fa6b2..ed56db9 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -620,6 +620,16 @@
(parser-generator-lr-translate)))
(message "Passed 10/5")
+
+ (switch-to-buffer buffer)
+ (kill-region (point-min) (point-max))
+ (insert "8+10/5\n")
+ (should
+ (equal
+ 10
+ (parser-generator-lr-translate)))
+ (message "Passed 8+10/5")
+
(switch-to-buffer buffer)
(kill-region (point-min) (point-max))
(insert "10^2\n")
@@ -631,6 +641,15 @@
(switch-to-buffer buffer)
(kill-region (point-min) (point-max))
+ (insert "1+10^2\n")
+ (should
+ (equal
+ 101
+ (parser-generator-lr-translate)))
+ (message "Passed 1+10^2")
+
+ (switch-to-buffer buffer)
+ (kill-region (point-min) (point-max))
(insert "-33\n")
(should
(equal
@@ -643,18 +662,54 @@
(insert "3+4*5\n")
(should
(equal
- 37
+ 23
(parser-generator-lr-translate)))
- (message "Passed 3+4*5 with expected wrong associativity")
+ (message "Passed 3+4*5")
(switch-to-buffer buffer)
(kill-region (point-min) (point-max))
(insert "3+4+5-6\n")
(should
(equal
- 12
+ 6
+ (parser-generator-lr-translate)))
+ (message "Passed 3+4+5-6")
+
+ (switch-to-buffer buffer)
+ (kill-region (point-min) (point-max))
+ (insert "4*5+3\n")
+ (should
+ (equal
+ 32
+ (parser-generator-lr-translate)))
+ (message "Passed 4*5+3 with expected wrong associativity")
+
+ (switch-to-buffer buffer)
+ (kill-region (point-min) (point-max))
+ (insert "10/1+1\n")
+ (should
+ (equal
+ 5
+ (parser-generator-lr-translate)))
+ (message "Passed 10/1+1 with expected wrong associativity")
+
+ (switch-to-buffer buffer)
+ (kill-region (point-min) (point-max))
+ (insert "-33+5\n")
+ (should
+ (equal
+ -38
+ (parser-generator-lr-translate)))
+ (message "Passed -33+5 with expected wrong associativity")
+
+ (switch-to-buffer buffer)
+ (kill-region (point-min) (point-max))
+ (insert "10^2+3\n")
+ (should
+ (equal
+ 100000
(parser-generator-lr-translate)))
- (message "Passed 3+4+5-6 with expected wrong result")
+ (message "Passed 10^2+3 with expected wrong associativity")
(kill-buffer))
- [elpa] externals/parser-generator 586789d 308/434: Added cache to first calculation, (continued)
- [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, 2021/11/29
- [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 <=
- [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
- [elpa] externals/parser-generator bff0e63 380/434: Added TODO note, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 97b5e59 381/434: Comparing precedence of last symbol of production with look-ahead, ELPA Syncer, 2021/11/29