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

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



reply via email to

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