emacs-elpa-diffs
[Top][All Lists]
Advanced

[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))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]