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

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

[elpa] externals/parser-generator 2c262a4 362/434: Added new error when


From: ELPA Syncer
Subject: [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
Date: Mon, 29 Nov 2021 16:00:16 -0500 (EST)

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

    Added new error when there is grammar conflict in action-table generation 
and no precedence comparison function is defined
---
 parser-generator-lr.el | 83 +++++++++++++++++++++++++++++---------------------
 1 file changed, 48 insertions(+), 35 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 12128fa..f23e348 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -398,48 +398,61 @@
                                           goto-index
                                           
(parser-generator--get-symbols-without-attributes
                                            u))))
+
                                     (when
                                         (gethash
                                          index-hash-key
                                          index-symbols)
-                                        (let ((a u)
-                                              (b
+                                      (if
+                                          
parser-generator-lr--precedence-comparison-function
+                                          (let ((a u)
+                                                (b
+                                                 (gethash
+                                                  index-hash-key
+                                                  index-symbols)))
+                                            (if
+                                                
(parser-generator-lr--symbol-takes-precedence-p
+                                                 (car a)
+                                                 (car b))
+                                                (progn
+                                                  (parser-generator--debug
+                                                   (message
+                                                    "'%s' takes precedence 
over '%s'"
+                                                    a
+                                                    b))
+                                                  ;; Remove b from 
added-actions
+                                                  (let ((new-action-table))
+                                                    (dolist (action-item 
action-table)
+                                                      (unless
+                                                          (equal
+                                                           action-item
+                                                           b)
+                                                        (push
+                                                         action-item
+                                                         new-action-table)))
+                                                    (setq
+                                                     action-table
+                                                     (reverse
+                                                      new-action-table))))
+                                              (parser-generator--debug
+                                               (message
+                                                "'%s' takes precedence over 
'%s'"
+                                                b
+                                                a))
+                                              ;; Skip rest of this iteration
+                                              (setq
+                                               skip-symbol
+                                               t)))
+                                        (let ((conflicted-item
                                                (gethash
                                                 index-hash-key
                                                 index-symbols)))
-                                          (if
-                                              
(parser-generator-lr--symbol-takes-precedence-p
-                                               (car a)
-                                               (car b))
-                                              (progn
-                                                (parser-generator--debug
-                                                 (message
-                                                  "'%s' takes precedence over 
'%s'"
-                                                  a
-                                                  b))
-                                                ;; Remove b from added-actions
-                                                (let ((new-action-table))
-                                                  (dolist (action-item 
action-table)
-                                                    (unless
-                                                        (equal
-                                                         action-item
-                                                         b)
-                                                      (push
-                                                       action-item
-                                                       new-action-table)))
-                                                  (setq
-                                                   action-table
-                                                   (reverse
-                                                    new-action-table))))
-                                            (parser-generator--debug
-                                             (message
-                                              "'%s' takes precedence over '%s'"
-                                              b
-                                              a))
-                                            ;; Skip rest of this iteration
-                                            (setq
-                                             skip-symbol
-                                             t))))
+                                          (error
+                                           "Reduce/%S conflict for %S in state 
%S"
+                                           (car (cdr conflicted-item))
+                                           u
+                                           goto-index
+                                           ))))
 
                                     (unless
                                         (or



reply via email to

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