[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 98ab0e4 377/434: More work on preceden
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 98ab0e4 377/434: More work on precedence logic in unit tests |
Date: |
Mon, 29 Nov 2021 16:00:19 -0500 (EST) |
branch: externals/parser-generator
commit 98ab0e4348dc50f9fd6e8f3a9d6c420ad631bd60
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on precedence logic in unit tests
---
parser-generator-lr.el | 6 ++--
parser-generator.el | 2 +-
test/parser-generator-lr-test.el | 63 ++++++++++++++++++++++++++--------------
3 files changed, 46 insertions(+), 25 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 4dd1ad4..deedd45 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -406,7 +406,7 @@
index-hash-key
index-symbols)))
(if
-
(parser-generator-lr--reduce-takes-precedence-p
+
(parser-generator-lr--action-takes-precedence-p
(car u)
production-number
(nth 2 b))
@@ -1029,8 +1029,8 @@
(setq set-index (1+ set-index)))
valid-p))
-(defun parser-generator-lr--reduce-takes-precedence-p (symbol
a-production-number &optional b-production-number)
- "Return t if reduction of SYMBOL at A-PRODUCTION-NUMBER takes precedence
over other action. If other action is a reduction then it is at
B-PRODUCTION-NUMBER."
+(defun parser-generator-lr--action-takes-precedence-p (symbol
a-production-number &optional b-production-number)
+ "Return t if action of SYMBOL at A-PRODUCTION-NUMBER takes precedence over
other action. If other action is a reduction then it is at
B-PRODUCTION-NUMBER."
(let* ((a-precedence-value
(gethash
symbol
diff --git a/parser-generator.el b/parser-generator.el
index f92cb19..3f7af8e 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -17,7 +17,7 @@
(defvar
parser-generator--debug
- nil
+ t
"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 c52e2f9..7fb3b84 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -92,14 +92,7 @@
Sp))
(parser-generator-set-look-ahead-number 1)
(parser-generator-process-grammar)
- (let ((table-lr-items
- (parser-generator-lr--generate-goto-tables)))
- ;; (message "cyclical lr-items: %s" table-lr-items)
- (parser-generator-lr--generate-action-tables
- table-lr-items)
- ;; (message "cyclical goto-tables: %s"
(parser-generator-lr--get-expanded-goto-tables))
- ;; (message "cyclical action-tables: %s"
(parser-generator-lr--get-expanded-action-tables))
- )
+ (parser-generator-lr-generate-parser-tables)
(message "Passed cyclical grammar")
;; Grammar with conflicts that can be resolved using precedence attributes
@@ -120,8 +113,6 @@
(parser-generator-lr-generate-parser-tables))
(message "Conflicted grammar caused expected exception")
- ;; Inconsistent grammar! ((A) (a b) nil (c)) (index: 0) with look-ahead (c)
conflicts with ((B) (a b) (c) ($)) (index: 1) with look-ahead (c) in sets:
((((A) (a b) nil (c)) ((B) (a b) (c) ($))))
-
(setq
parser-generator--global-attributes
'(%precedence))
@@ -191,9 +182,18 @@
a-precedence
b-precedence))
(t nil))))))
-
(parser-generator-lr-generate-parser-tables)
+ ;; TODO Verify generated action-table here
+ (should
+ (equal
+ '(1 2 3)
+ (parser-generator-lr--get-expanded-goto-tables)))
+ (should
+ (equal
+ '((0 (((a) shift))) (1 (((c) shift))) (2 ((($) reduce 2))) (3 ((($)
accept))) (4 (((b) shift))) (5 (((c) shift))) (6 ((($) reduce 4))) (7 ((($)
reduce 1))))
+ (parser-generator-lr--get-expanded-action-tables)))
(message "Grammar not conflicting anymore")
+ (error "Quit here")
(let ((table-lr-items
(parser-generator-lr--generate-goto-tables)))
@@ -617,7 +617,8 @@
(parser-generator-lr-generate-parser-tables))
(message "Expected shift/reduce conflict in state 14")
- ;; TODO Add global precedence and context-sensitive precedence and grammar
should now pass without conflicts
+ ;; Add global symbol precedence and also
+ ;; context-sensitive precedence and grammar should now pass without conflicts
(setq
parser-generator--global-attributes
'(%left %precedence %right))
@@ -666,11 +667,31 @@
nil)
((and
a-precedence
- b-precedence)
- (>
+ b-precedence
+ (>
+ a-precedence
+ b-precedence))
+ t)
+ ((and
a-precedence
- b-precedence))
- (t nil))))))
+ b-precedence
+ (<
+ a-precedence
+ b-precedence))
+ nil)
+ ((and
+ a-precedence
+ b-precedence
+ (=
+ a-precedence
+ b-precedence))
+ ;; TODO Fix this
+ ;; TODO if a-precedence-value > b-precedence-value then reduce (t)
+ ;; TODO if a-precedence-value < b-precedence-value then shift (nil)
+ ;; TODO if a-precedence-value equal be-precedence-value then let
operator decide
+ (cond
+ ((equal a-precedence))
+ )))))))
(parser-generator-set-grammar
'(
(start input line exp)
@@ -805,7 +826,7 @@
(equal
32
(parser-generator-lr-translate)))
- (message "Passed 4*5+3 with expected wrong associativity")
+ (message "Passed 4*5+3 with expected wrong associativity (4*8)")
(switch-to-buffer buffer)
(kill-region (point-min) (point-max))
@@ -814,7 +835,7 @@
(equal
5
(parser-generator-lr-translate)))
- (message "Passed 10/1+1 with expected wrong associativity")
+ (message "Passed 10/1+1 with expected wrong associativity (10/2)")
(switch-to-buffer buffer)
(kill-region (point-min) (point-max))
@@ -823,7 +844,7 @@
(equal
100000
(parser-generator-lr-translate)))
- (message "Passed 10^2+3 with expected wrong associativity")
+ (message "Passed 10^2+3 with expected wrong associativity (10^5)")
(switch-to-buffer buffer)
(kill-region (point-min) (point-max))
@@ -832,7 +853,7 @@
(equal
-38
(parser-generator-lr-translate)))
- (message "Passed -33+5 with expected wrong associativity")
+ (message "Passed -33+5 with expected wrong associativity (-38)")
(kill-buffer))
@@ -1798,7 +1819,7 @@
"Run test."
;; (setq debug-on-error nil)
- (parser-generator-lr-test-infix-calculator)
+ ;; (parser-generator-lr-test-infix-calculator)
(parser-generator-lr-test--items-for-prefix)
(parser-generator-lr-test--items-valid-p)
(parser-generator-lr-test--generate-goto-tables)
- [elpa] externals/parser-generator b8a81c5 330/434: Added failing test, (continued)
- [elpa] externals/parser-generator b8a81c5 330/434: Added failing test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 06d23f5 340/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f213255 348/434: Passed all old unit tests again after translation refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 886af5c 349/434: Uncommented export tests until refactor is ok, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 99aa5b6 350/434: Added more unit tests for calculator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d8fb2da 354/434: Just white-space fixes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3964649 359/434: Added more failing unit tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6e0e781 360/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2c262a4 362/434: Added new error when there is grammar conflict in action-table generation and no precedence comparison function is defined, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a7a9506 366/434: Refactored structure of context-sensitive attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 98ab0e4 377/434: More work on precedence logic in unit tests,
ELPA Syncer <=
- [elpa] externals/parser-generator 1b8f025 016/434: More work on validating a grammar structure, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1ae36fc 029/434: Added support for calculating first of a sentential form, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 38c2040 032/434: Improved markdown code examples, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e463bae 041/434: Passing tests for sorting lists, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 840c418 044/434: Improved comment about follow function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2a3a02d 083/434: Removed cache for LR-items for prefixes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3ba5250 090/434: Removed debugging stuff, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 83298fe 099/434: Passing test for function that generates possible look-ahead permutations, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e9697ea 100/434: Added function that tests if a look-ahead is valid or not, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 53c09f7 119/434: Added hash-table for productions indexed by production-number, ELPA Syncer, 2021/11/29