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

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

[elpa] externals/parser-generator a60952c 057/434: More debugging of new


From: ELPA Syncer
Subject: [elpa] externals/parser-generator a60952c 057/434: More debugging of new algorithm
Date: Mon, 29 Nov 2021 15:59:08 -0500 (EST)

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

    More debugging of new algorithm
---
 parser.el | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/parser.el b/parser.el
index 3e44b1b..7986fad 100644
--- a/parser.el
+++ b/parser.el
@@ -586,6 +586,11 @@
                 (when (> first-length 0)
                   (push first first-list))))))
         (setq first-list (sort first-list 'parser--sort-list))
+        (when (and
+               (not first-list)
+               (= (length β) 1)
+               (eq (car β) 'e))
+          (setq first-list '((e))))
         first-list))))
 
 ;; Definition at p. 343
@@ -655,8 +660,8 @@
         ;; (a)
         (dolist (rhs start-productions)
           ;; Add [S -> . α] to V(e)
-          (push `(,start nil ,rhs e) lr-items-e)
-          (puthash `(e ,start nil ,rhs e) t lr-item-exists))
+          (push `(,start nil ,rhs (e)) lr-items-e)
+          (puthash `(e ,start nil ,rhs (e)) t lr-item-exists))
 
         (message "V(e): %s" lr-items-e)
 
@@ -685,25 +690,30 @@
                   ;; Check if RHS starts with a non-terminal
                   (let ((rhs-first (car rhs)))
                     (when (parser--valid-non-terminal-p rhs-first)
+                      (message "rhs-first: %s" rhs-first)
                       (let ((rhs-rest (append (cdr rhs) suffix)))
-                        (let ((rhs-first (parser--first rhs-rest)))
-                          (message "1b FIRST(%s) = %s" rhs-rest rhs-first)
+                        (message "rhs-rest: %s" rhs-rest)
+                        (let ((rhs-rest-first (parser--first rhs-rest)))
+                          (message "1b FIRST(%s) = %s" rhs-rest rhs-rest-first)
                           (let ((sub-production (parser--get-grammar-rhs 
rhs-first)))
 
                             ;; For each production with B as LHS
                             (dolist (sub-rhs sub-production)
 
                               ;; For each x in FIRST(αu)
-                              (dolist (f rhs-first)
+                              (dolist (f rhs-rest-first)
 
                                 ;; Add [B -> . β, x] to v-set(e), provided it 
is not already there
+                                (message "f: %s" f)
                                 (unless (gethash `(e ,rhs-first nil ,sub-rhs 
,f) lr-item-exists)
+                                  (message "new-item: %s" `(,rhs-first nil 
,sub-rhs ,f))
                                   (puthash `(e ,rhs-first nil ,sub-rhs ,f) t 
lr-item-exists)
                                   (push `(,rhs-first nil ,sub-rhs ,f) 
lr-items-e)
 
                                   ;; (c) Repeat (b) until no more items can be 
added to v-set(e)
                                   (setq found-new t))))))))))))))
-        (puthash 'e lr-items-e lr-items))
+        (puthash 'e lr-items-e lr-items)
+        (message "V(e) = %s" lr-items-e))
 
       ;; 2 Suppose that we have constructed V(X1,X2,...,Xi-1) we construct 
V(X1,X2,...,Xi) as follows:
       (let ((prefix-acc)



reply via email to

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