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

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

[elpa] externals/parser-generator 9d0d9e5 027/434: Various debugging


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 9d0d9e5 027/434: Various debugging
Date: Mon, 29 Nov 2021 15:59:01 -0500 (EST)

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

    Various debugging
---
 parser.el           | 52 +++++++++++++++++++++++++++++-----------------------
 test/parser-test.el |  4 ++--
 2 files changed, 31 insertions(+), 25 deletions(-)

diff --git a/parser.el b/parser.el
index 82a8358..1d2dab2 100644
--- a/parser.el
+++ b/parser.el
@@ -385,19 +385,27 @@
                                   (let ((sub-terminal-index 0))
                                     (dolist (sub-terminal-alternative-set 
sub-terminal-sets)
                                       (unless (= sub-terminal-index 0)
-                                        (parser--debug (message 
"Sub-terminal-alternative-set: %s" sub-terminal-alternative-set))
-
-                                        ;; When we have a leading terminal and 
sub-terminal set is empty, don't append it
-                                        (when (and
-                                               (< input-tape-index (1- 
input-tape-length))
-                                               (parser--valid-e-p (car 
sub-terminal-alternative-set)))
-                                          (setq sub-terminal-alternative-set 
nil))
-
-                                        (let ((sub-rhs-leading-terminals 
(append leading-terminals sub-terminal-alternative-set)))
-                                          (when (> (length 
sub-rhs-leading-terminals) k)
-                                            (setq sub-rhs-leading-terminals 
(butlast sub-rhs-leading-terminals (- (length sub-rhs-leading-terminals) k))))
-                                          (push `(,sub-rhs-leading-terminals 
,all-leading-terminals-p ,(1+ input-tape-index)) stack)))
-                                      (setq sub-terminal-index (1+ 
sub-terminal-index)))))
+                                        (let 
((alternative-all-leading-terminals-p all-leading-terminals-p))
+                                          (parser--debug (message 
"Sub-terminal-alternative-set: %s" sub-terminal-alternative-set))
+
+                                          ;; When sub-set only contains the e 
symbol
+                                          (when (parser--valid-e-p (car 
sub-terminal-alternative-set))
+                                            (parser--debug (message 
"alternative-set is e symbol"))
+                                            (if disallow-e-first
+                                                (when (= 
leading-terminals-count 0)
+                                                  (setq 
alternative-all-leading-terminals-p nil))
+                                              (when (or
+                                                     (> 
leading-terminals-count 0)
+                                                     (< input-tape-index (1- 
input-tape-length)))
+                                                (setq 
sub-terminal-alternative-set nil)
+                                                (parser--debug (message 
"Cleared sub-terminal-alternative-set")))))
+
+                                          (let ((sub-rhs-leading-terminals 
(append leading-terminals sub-terminal-alternative-set)))
+                                            (parser--debug (message 
"sub-rhs-leading-terminals: %s" sub-rhs-leading-terminals))
+                                            (when (> (length 
sub-rhs-leading-terminals) k)
+                                              (setq sub-rhs-leading-terminals 
(butlast sub-rhs-leading-terminals (- (length sub-rhs-leading-terminals) k))))
+                                            (push `(,sub-rhs-leading-terminals 
,alternative-all-leading-terminals-p ,(1+ input-tape-index)) stack)))
+                                        (setq sub-terminal-index (1+ 
sub-terminal-index))))))
 
                                 (parser--debug (message "Sub-terminal-set: %s" 
sub-terminal-set))
                                 (when (or
@@ -413,16 +421,14 @@
                     (setq all-leading-terminals-p nil)))
 
                  ((equal rhs-type 'EMPTY)
-                  (if all-leading-terminals-p
-                      (if disallow-e-first
-                          (when (= leading-terminals-count 0)
-                            (setq all-leading-terminals-p nil))
-                        (when (and
-                               (= leading-terminals-count 0)
-                               (= input-tape-index (1- input-tape-length)))
-                          (setq leading-terminals (append leading-terminals 
rhs-element))
-                          (setq leading-terminals-count (1+ 
leading-terminals-count))))
-                    (setq all-leading-terminals-p nil)))
+                  (if disallow-e-first
+                      (when (= leading-terminals-count 0)
+                        (setq all-leading-terminals-p nil))
+                    (when (and
+                           (= leading-terminals-count 0)
+                           (= input-tape-index (1- input-tape-length)))
+                      (setq leading-terminals (append leading-terminals 
rhs-element))
+                      (setq leading-terminals-count (1+ 
leading-terminals-count)))))
 
                  ((equal rhs-type 'TERMINAL)
                   (when all-leading-terminals-p
diff --git a/test/parser-test.el b/test/parser-test.el
index 1b27845..ac865e8 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -99,10 +99,10 @@
   (message "Passed first 1 with complex grammar")
 
   ;; Example 5.28 p 382
-  (parser--set-grammar '((S A B C) ("a" "b" "c") ((S A B) (A (B "a") e) (B (C 
"b") C) (C "c" e)) S) 2)
+  (parser--set-grammar '((S A B C) (a b c) ((S (A B)) (A (B a) e) (B (C b) C) 
(C c e)) S) 2)
   (should
    (equal
-    '(("a") ("a" "b") ("a" "c") ("b") ("b" "a") ("c") ("c" "a") ("c" "b") (e))
+    '((a) (a c) (a b) (c a) (b a) (e) (c) (b) (c b))
     (parser--first 'S)))
   (message "Passed first 2 with complex grammar")
 



reply via email to

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