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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/parser-generator 34f95b3 351/434: More debugging infix


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 34f95b3 351/434: More debugging infix calculator
Date: Mon, 29 Nov 2021 16:00:13 -0500 (EST)

branch: externals/parser-generator
commit 34f95b3fa3ce53651a3ccabb4de3c21e9ea1fb5b
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>

    More debugging infix calculator
---
 parser-generator-lr.el           |  10 +++
 test/parser-generator-lr-test.el | 166 ++++++++++++++++++++++-----------------
 2 files changed, 106 insertions(+), 70 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 6820b99..ec9d9b7 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -1881,6 +1881,11 @@
                                            (gethash
                                             temp-hash-key
                                             translation-symbol-table)))
+                                      (when
+                                          symbol-translations
+                                        (setq
+                                         symbol-translations
+                                         (reverse symbol-translations)))
                                       (push
                                        partial-translation
                                        symbol-translations)
@@ -1908,6 +1913,11 @@
                                          (gethash
                                           temp-hash-key
                                           translation-symbol-table)))
+                                    (when
+                                        symbol-translations
+                                      (setq
+                                       symbol-translations
+                                       (reverse symbol-translations)))
                                     (push
                                      partial-translation
                                      symbol-translations)
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 8739191..e0fa6b2 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -500,7 +500,6 @@
   (parser-generator-lr-test--parse-incremental-vs-regular)
   (message "Passed incremental-tests")
 
-  ;; TODO Test grammar that requires global and context-sensitive precedence 
here
   ;; https://www.gnu.org/software/bison/manual/html_node/Infix-Calc.html
   (setq
    parser-generator--e-identifier
@@ -515,10 +514,10 @@
       (start input)
       (input
        %empty
-       (input line))
+       (input line (lambda(args) (nth 1 args))))
       (line
        "\n"
-       (exp "\n"))
+       (exp "\n" (lambda(args) (nth 0 args))))
       (exp
        NUM
        (exp "+" exp (lambda(args) (+ (nth 0 args) (nth 2 args))))
@@ -527,7 +526,7 @@
        (exp "/" exp (lambda(args) (/ (nth 0 args) (nth 2 args))))
        ("-" exp (lambda(args) (- (nth 1 args))))
        (exp "^" exp (lambda(args) (expt (nth 0 args) (nth 2 args))))
-       ("(" exp ")" (lambda(args) (nth 1)))))
+       ("(" exp ")" (lambda(args) (nth 1 args)))))
      start))
   (setq
    parser-generator-lex-analyzer--function
@@ -572,11 +571,96 @@
              symbol))))))
 
   (parser-generator-process-grammar)
-  ;; (should-error
-  ;;   (parser-generator-lr-generate-parser-tables))
-  (message "Infix calculator grammar caused expected error")
+  (parser-generator-lr-generate-parser-tables)
+
+  ;; TODO Test functionality here (then move to translate test)
+  (let ((buffer (generate-new-buffer "*buffer*")))
+    (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
+    (insert "5+5\n")
+    (should
+     (equal
+      10
+      (parser-generator-lr-translate)))
+    (message "Passed 5+5")
+
+    (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
+    (insert "5+4\n")
+    (should
+     (equal
+      9
+      (parser-generator-lr-translate)))
+    (message "Passed 5+4")
+
+    (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
+    (insert "7-3\n")
+    (should
+     (equal
+      4
+      (parser-generator-lr-translate)))
+    (message "Passed 7-3")
+
+    (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
+    (insert "3*4*5\n")
+    (should
+     (equal
+      60
+      (parser-generator-lr-translate)))
+    (message "Passed 3*4*5")
+
+    (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
+    (insert "10/5\n")
+    (should
+     (equal
+      2
+      (parser-generator-lr-translate)))
+    (message "Passed 10/5")
+
+    (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
+    (insert "10^2\n")
+    (should
+     (equal
+      100
+      (parser-generator-lr-translate)))
+    (message "Passed 10^2")
+
+    (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
+    (insert "-33\n")
+    (should
+     (equal
+      -33
+      (parser-generator-lr-translate)))
+    (message "Passed -33")
+
+    (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
+    (insert "3+4*5\n")
+    (should
+     (equal
+      37
+      (parser-generator-lr-translate)))
+    (message "Passed 3+4*5 with expected wrong associativity")
 
-  ;; Add precedence to resolve conflicts
+    (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
+    (insert "3+4+5-6\n")
+    (should
+     (equal
+      12
+      (parser-generator-lr-translate)))
+    (message "Passed 3+4+5-6 with expected wrong result")
+
+    (kill-buffer))
+
+  (message "Infix calculator grammar caused expected wrong calculations")
+
+  ;; Add precedence to fix associativity
   (setq
    parser-generator--context-sensitive-attributes
    '(%prec))
@@ -656,39 +740,18 @@
        ("(" exp ")" (lambda(args) (nth 1 args)))))
      start))
   (parser-generator-process-grammar)
-
   (parser-generator-lr-generate-parser-tables)
-  (message "Grammar now passes thanks to precedence rules")
 
-  ;; TODO Test functionality here (then move to translate test)
   (let ((buffer (generate-new-buffer "*buffer*")))
 
     (switch-to-buffer buffer)
     (kill-region (point-min) (point-max))
-    (insert "5+5\n")
-    (should
-     (equal
-      10
-      (parser-generator-lr-translate)))
-    (message "5+5=10\n")
-
-    (switch-to-buffer buffer)
-    (kill-region (point-min) (point-max))
-    (insert "5+4\n")
-    (should
-     (equal
-      9
-      (parser-generator-lr-translate)))
-    (message "5+4=9\n")
-
-    (switch-to-buffer buffer)
-    (kill-region (point-min) (point-max))
-    (insert "7-3\n")
+    (insert "3+4*5\n")
     (should
      (equal
-      4
+      23
       (parser-generator-lr-translate)))
-    (message "7-3=4\n")
+    (message "Passed 3+4*5 with correct result")
 
     (switch-to-buffer buffer)
     (kill-region (point-min) (point-max))
@@ -697,44 +760,7 @@
      (equal
       6
       (parser-generator-lr-translate)))
-    (message "3+4+5-6=6\n")
-
-    (switch-to-buffer buffer)
-    (kill-region (point-min) (point-max))
-    (insert "3*4*5\n")
-    (should
-     (equal
-      60
-      (parser-generator-lr-translate)))
-    (message "3*4*5=60\n")
-
-    (switch-to-buffer buffer)
-    (kill-region (point-min) (point-max))
-    (insert "10/5\n")
-    (should
-     (equal
-      2
-      (parser-generator-lr-translate)))
-    (message "10/5=2\n")
-
-    (switch-to-buffer buffer)
-    (kill-region (point-min) (point-max))
-    (insert "10^2\n")
-    (should
-     (equal
-      100
-      (parser-generator-lr-translate)))
-    (message "10^2=100\n")
-
-    (switch-to-buffer buffer)
-    (kill-region (point-min) (point-max))
-    (insert "3+4*5\n")
-    (should
-     (equal
-      23
-      (parser-generator-lr-translate)))
-    (message "3+4*5=23\n")
-
+    (message "Passed 3+4+5-6 with correct result")
 
     (kill-buffer))
 



reply via email to

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