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

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

[elpa] externals/parser-generator ab4ce4d668 25/82: Tests for validating


From: Christian Johansson
Subject: [elpa] externals/parser-generator ab4ce4d668 25/82: Tests for validating LLk grammar passing
Date: Thu, 12 May 2022 13:28:14 -0400 (EDT)

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

    Tests for validating LLk grammar passing
---
 parser-generator-ll.el | 78 ++++++++++++++++++++++++++++++--------------------
 1 file changed, 47 insertions(+), 31 deletions(-)

diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index 035c5d8508..58d6d10576 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -383,40 +383,56 @@
                         (parser-generator--first local-follow nil t t))
                        (sub-symbol-rhss
                         (parser-generator--get-grammar-rhs sub-symbol))
-                       (first-sub-symbol-rhss-sets
-                        (parser-generator--first sub-symbol-rhss nil t t))
-                       (merged-terminal-sets
-                        (parser-generator--merge-max-terminal-sets
-                         first-local-follow-sets
-                         first-sub-symbol-rhss-sets))
                        (distinct-item-p
                         (make-hash-table :test 'equal)))
-                  (dolist (merged-terminal-set merged-terminal-sets)
-                    (if (gethash
-                         merged-terminal-set
-                         distinct-item-p)
-                        (progn
-                          (setq valid nil)
-                          (message "merged-terminal-set: %S was not distinct" 
merged-terminal-set))
-                      (puthash
-                       merged-terminal-set
-                       t
-                       distinct-item-p)))
-                  (let ((production
-                         (list
-                          (list sub-symbol)
-                          sub-symbol-rhss)))
-                    (unless
-                        (gethash
+                  (parser-generator--debug
+                   (message "\nsub-symbol: %S" sub-symbol)
+                   (message "local-follow: %S" local-follow)
+                   (message "first-local-follow-sets: %S" 
first-local-follow-sets)
+                   (message "sub-symbol-rhss: %S" sub-symbol-rhss))
+
+                  ;; Calculate following terminals to see if there is a 
conflict
+                  (dolist (sub-symbol-rhs sub-symbol-rhss)
+                    (let ((first-sub-symbol-rhs (parser-generator--first 
sub-symbol-rhs nil t t)))
+                      (let ((merged-terminal-sets
+                             (parser-generator--merge-max-terminal-sets
+                              first-sub-symbol-rhs
+                              first-local-follow-sets)))
+                        (parser-generator--debug
+                         (message "sub-symbol-rhs: %S" sub-symbol-rhs)
+                         (message "first-sub-symbol-rhs: %S" 
first-sub-symbol-rhs)
+                         (message "merged-terminal-sets: %S" 
merged-terminal-sets))
+                        (dolist (merged-terminal-set merged-terminal-sets)
+                          (if (gethash
+                               merged-terminal-set
+                               distinct-item-p)
+                              (progn
+                                (setq valid nil)
+                                (parser-generator--debug
+                                 (message
+                                  "merged-terminal-set: %S was not distinct"
+                                  merged-terminal-set)))
+                            (puthash
+                             merged-terminal-set
+                             t
+                             distinct-item-p)))))
+
+                    ;; Add production to stack if it has not been added already
+                    (let ((production
+                           (list
+                            (list sub-symbol)
+                            sub-symbol-rhs)))
+                      (unless
+                          (gethash
+                           production
+                           distinct-production-p)
+                        (push
                          production
-                         distinct-production-p)
-                      (push
-                       production
-                       stack)
-                      (puthash
-                       production
-                       t
-                       distinct-production-p))))))
+                         stack)
+                        (puthash
+                         production
+                         t
+                         distinct-production-p)))))))
             (setq
              sub-symbol-index
              (1+ sub-symbol-index))))))



reply via email to

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