[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))
- [elpa] externals/parser-generator f5a5801 421/434: Clarified lex-analyzer exporting necessities, (continued)
- [elpa] externals/parser-generator f5a5801 421/434: Clarified lex-analyzer exporting necessities, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9a3240b 314/434: Fixed bug with error throwing on false lr item sets, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5f13406 319/434: More work on supporting LR-grammar with precedence attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 989e79e 331/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8092c58 334/434: Added global declaration to unit test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 778b96f 335/434: More work on global precedence declaration, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0523eeb 336/434: More work on global precedence, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0aed7b0 339/434: More work on global precedence in LR(k) parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b84ed5e 342/434: Fixed issue with infix calculator translation test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f449039 346/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 34f95b3 351/434: More debugging infix calculator,
ELPA Syncer <=
- [elpa] externals/parser-generator bb82646 356/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b040d9b 357/434: Tests for infix calculator working, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4404424 367/434: Added test for parsing context-sensitive attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2ad866c 371/434: Context-sensitive attribute are now tested through specified comparison function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9d5df0e 375/434: More working on trying to get the Infix example working, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8fb8676 376/434: More work on Infix math example, passing another test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 32e2c15 024/434: Fixed bug with e-production, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 26bf153 037/434: Setting look-ahead-number is now separated from setting grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a54061c 055/434: Debugging of new algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 62d06a0 063/434: Passing unit test for V(Sa), ELPA Syncer, 2021/11/29