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

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

[elpa] externals/parser-generator ddd5967 221/434: Passed test for neste


From: ELPA Syncer
Subject: [elpa] externals/parser-generator ddd5967 221/434: Passed test for nested translations
Date: Mon, 29 Nov 2021 15:59:45 -0500 (EST)

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

    Passed test for nested translations
---
 parser-generator-lr.el           | 56 +++++++++++++++++++++++++++-------------
 test/parser-generator-lr-test.el | 10 +++----
 2 files changed, 43 insertions(+), 23 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 5251685..cf51d4a 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -671,6 +671,7 @@
 
   (let ((accept)
         (pre-index 0)
+        (translation-symbol-table (make-hash-table :test 'equal))
         (e-list
          (parser-generator--generate-list-of-symbol
           parser-generator--look-ahead-number
@@ -835,31 +836,46 @@
                               (popped-item))
                           (while (< popped-items pop-items)
                             (setq popped-item (pop pushdown-list))
-                             (message "popped-item: %s" popped-item)
+                            (parser-generator--debug
+                             (message "popped-item: %s" popped-item))
                             (when (and
                                    (listp popped-item)
                                    (parser-generator--valid-symbol-p
                                     (car popped-item)))
                               (push
-                               (car popped-item)
+                               popped-item
                                popped-items-contents))
                             (setq popped-items (1+ popped-items)))))
                       (push production-number output)
 
-                      ;; TODO If popped items contain a non-terminal
-                      ;; it should be evaluated first before
-                      ;; translation is executed.
-
                       ;; Perform translation at reduction if specified
                       (when
                           (parser-generator--get-grammar-translation-by-number
                            production-number)
+
                         (let ((popped-items-meta-contents))
                           (dolist (popped-item popped-items-contents)
-                            (push
-                             (parser-generator-lex-analyzer--get-function
-                              popped-item)
-                             popped-items-meta-contents))
+                            (parser-generator--debug
+                             (message
+                              "popped-item: %s"
+                              popped-item))
+                            (if (parser-generator--valid-terminal-p
+                                 (car popped-item))
+                                (push
+                                 (parser-generator-lex-analyzer--get-function
+                                  popped-item)
+                                 popped-items-meta-contents)
+                              (if (gethash
+                                   popped-item
+                                   translation-symbol-table)
+                                  (push
+                                   (gethash
+                                    popped-item
+                                    translation-symbol-table)
+                                   popped-items-meta-contents)
+                                (push
+                                 nil
+                                 popped-items-meta-contents))))
                           (setq
                            popped-items-meta-contents
                            (nreverse popped-items-meta-contents))
@@ -869,12 +885,18 @@
                                   
(parser-generator--get-grammar-translation-by-number
                                    production-number)
                                   popped-items-meta-contents)))
-                            (when partial-translation
-                              (unless (listp partial-translation)
-                                (setq partial-translation (list 
partial-translation)))
-                              (dolist (part-translation partial-translation)
-                                (message "part-translation: %s" 
part-translation)
-                                (push part-translation translation))))))
+                            (parser-generator--debug
+                             (message
+                              "translation-symbol-table: %s = %s"
+                              production-lhs
+                              partial-translation))
+                            (puthash
+                             production-lhs
+                             partial-translation
+                             translation-symbol-table)
+                            (setq
+                             translation
+                             partial-translation))))
 
                       (let ((new-table-index (car pushdown-list)))
                         (let ((goto-table
@@ -926,8 +948,6 @@
       (error
        "Parsed entire string without getting accepting! Output: %s"
        (reverse output)))
-    (when translation
-      (setq translation (nreverse translation)))
     (when history
         (setq history (reverse history)))
     (when output
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 6eea0b9..f4357e9 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -452,7 +452,7 @@
     (switch-to-buffer buffer)
     (insert "aabb")
 
-    (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b" 
(lambda(args) (nreverse args)))) (S e)) Sp))
+    (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b" 
(lambda(args) (let ((list "")) (dolist (item args) (when item (setq list 
(format "%s%s" item list)))) list)))) (S e)) Sp))
     (parser-generator-set-look-ahead-number 1)
     (parser-generator-process-grammar)
     (parser-generator-lr-generate-parser-tables)
@@ -478,7 +478,7 @@
 
     (should
      (equal
-      '("b" "a" "b" "a")
+      "bbaaba"
       (parser-generator-lr-translate)))
 
     (kill-buffer buffer))
@@ -534,7 +534,7 @@
 
     (should
      (equal
-      '("(when a b)")
+      "(when a b)"
       (parser-generator-lr-translate)))
     (message "Passed test with non-nested translation")
 
@@ -550,7 +550,7 @@
 
     (should
      (equal
-      '("(when a (message b))")
+      "(when a (message b))"
       (parser-generator-lr-translate)))
 
     (message "Passed test with nested-translation with depth 2")
@@ -629,7 +629,7 @@
   (parser-generator-lr-test--generate-action-tables)
   (parser-generator-lr-test-parse)
   (parser-generator-lr-test-translate)
-  (parser-generator-lr-test-parse-k-2)
+  ;; (parser-generator-lr-test-parse-k-2)
   )
 
 



reply via email to

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