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

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

[elpa] externals/parser-generator 4f85cc5616 66/82: Passes byte-compilat


From: Christian Johansson
Subject: [elpa] externals/parser-generator 4f85cc5616 66/82: Passes byte-compilation tests
Date: Thu, 12 May 2022 13:28:19 -0400 (EDT)

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

    Passes byte-compilation tests
---
 parser-generator-ll.el        | 68 ++++++++++++++++++++++++++++++++++++++++---
 test/parser-generator-test.el | 13 ++++-----
 2 files changed, 69 insertions(+), 12 deletions(-)

diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index e5355bf972..cae577329f 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -116,7 +116,9 @@
           parser-generator--look-ahead-number
           parser-generator--eof-identifier))
         (e-reduction
-         (list parser-generator--e-identifier)))
+         (list parser-generator--e-identifier))
+        (translation-stack)
+        (terminal-stack '()))
     (parser-generator-lex-analyzer--reset)
     (while (not accept)
       (let* ((state (car stack))
@@ -191,13 +193,70 @@
            ((equal action-type 'pop)
             (parser-generator--debug
              (message "pushed: %S" look-ahead))
-            (parser-generator-lex-analyzer--pop-token)
-            (pop stack))
+            (let ((popped-tokens
+                   (parser-generator-lex-analyzer--pop-token)))
+              (pop stack)
+
+              (let ((token-data)
+                    (old-terminal-stack (car terminal-stack)))
+                (dolist (popped-token popped-tokens)
+                  (let ((token-datum
+                         (parser-generator-lex-analyzer--get-function
+                          popped-token)))
+                    (push
+                     token-datum
+                     token-data)))
+                (push
+                 token-data
+                 old-terminal-stack)
+                (setf
+                 (car terminal-stack)
+                 old-terminal-stack))
+
+            ;; Is it time for SDT?
+            (when (and
+                   translation-stack
+                   (string=
+                    (format "%S" (car (car translation-stack)))
+                    (format "%S" stack)))
+              (let ((translation (pop translation-stack))
+                    (sdt-terminal-stack (pop terminal-stack)))
+                (message
+                 "Do SDT %S (%S)"
+                 translation
+                 sdt-terminal-stack)
+                ;; TODO Do something
+              ))))
 
            ((equal action-type 'reduce)
             (parser-generator--debug
              (message "reduced: %S -> %S" state (nth 1 action)))
             (pop stack)
+
+            ;; Is it time for SDT?
+            (when (and
+                   translation-stack
+                   (string=
+                    (format "%S" (car (car translation-stack)))
+                    (format "%S" stack)))
+              (let ((translation (pop translation-stack))
+                    (sdt-terminal-stack (pop terminal-stack)))
+                (message
+                 "Do SDT %S (%S)"
+                 translation
+                 sdt-terminal-stack)
+                ;; TODO Do something
+              ))
+
+            (push
+             (list
+              (format "%S" stack)
+              (nth 2 action))
+             translation-stack)
+            (push
+             '()
+             terminal-stack)
+
             (unless (equal (nth 1 action) e-reduction)
               (dolist (reduce-item (reverse (nth 1 action)))
                 (push reduce-item stack)))
@@ -649,7 +708,8 @@
           (setq rhs (nth rhss-index rhss))
           (let* ((firsts-rhs (parser-generator--first rhs))
                  (firsts-rhs-length (length firsts-rhs))
-                 (firsts-index 0))
+                 (firsts-index 0)
+                 (first-rhs))
             (while (and
                     valid
                     (< firsts-index firsts-rhs-length))
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index e5869fa554..45dd865238 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -971,22 +971,22 @@
   "Test `parser-generator--merge-max-terminal-sets'."
   (message "Starting tests for (parser-generator--merge-max-terminal-sets)")
 
+  (parser-generator-set-eof-identifier '$)
+  (parser-generator-set-e-identifier 'e)
+  (parser-generator-set-look-ahead-number 2)
   (parser-generator-set-grammar '((S A B) (a b) ((S A) (S (B)) (B a) (A a) (A 
(b a))) S))
   (parser-generator-process-grammar)
 
   ;; Example 5.13 p. 348
-  (parser-generator-set-e-identifier 'e)
-  (parser-generator-set-look-ahead-number 2)
   (should
    (equal
     '((a b) (b) (b a))
     (parser-generator--merge-max-terminal-sets
      '((a b b) (e))
-     '((b) (b a b)))))
+     '((b) (b a b))
+     t)))
 
   ;; Example 5.14 p. 350
-  (parser-generator-set-e-identifier 'e)
-  (parser-generator-set-look-ahead-number 2)
   (should
    (equal
     '((a a) (a b) (b b))
@@ -994,9 +994,6 @@
      '((a b) (a e a) (b b) (b e b))
      nil)))
 
-  (parser-generator-set-eof-identifier '$)
-  (parser-generator-set-e-identifier 'e)
-  (parser-generator-set-look-ahead-number 2)
   (should
    (equal
     '(($ $) (a $) (a a))



reply via email to

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