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

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

[elpa] externals/parser-generator 54857e4 220/434: Added failing unit te


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 54857e4 220/434: Added failing unit test for translation via LRk
Date: Mon, 29 Nov 2021 15:59:45 -0500 (EST)

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

    Added failing unit test for translation via LRk
---
 parser-generator-lr.el           | 15 +++++++++------
 parser-generator.el              |  2 +-
 test/parser-generator-lr-test.el | 24 ++++++++++++++++++++++--
 3 files changed, 32 insertions(+), 9 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 031215a..5251685 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -803,7 +803,7 @@
                          table-index
                          possible-look-aheads))
 
-                      (push a-full pushdown-list)
+                      (push (car a-full) pushdown-list)
                       (push next-index pushdown-list)
                       (parser-generator-lex-analyzer--pop-token)))))
 
@@ -835,19 +835,21 @@
                               (popped-item))
                           (while (< popped-items pop-items)
                             (setq popped-item (pop pushdown-list))
-                            (parser-generator--debug
-                             (message "popped-item: %s" popped-item))
+                             (message "popped-item: %s" popped-item)
                             (when (and
                                    (listp popped-item)
-                                   (listp (car popped-item))
-                                   (parser-generator--valid-terminal-p
-                                    (car (car popped-item))))
+                                   (parser-generator--valid-symbol-p
+                                    (car popped-item)))
                               (push
                                (car 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
@@ -871,6 +873,7 @@
                               (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))))))
 
                       (let ((new-table-index (car pushdown-list)))
diff --git a/parser-generator.el b/parser-generator.el
index 87ee3e3..c47252c 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -11,7 +11,7 @@
 
 
 (defvar parser-generator--debug
-  t
+  nil
   "Whether to print debug messages or not.")
 
 (defvar parser-generator--e-identifier
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index acaff6a..6eea0b9 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -488,7 +488,7 @@
     (switch-to-buffer buffer)
     (insert "if (a) { b; }")
 
-    (parser-generator-set-grammar '((Sp S) (";" OPEN_ROUND_BRACKET 
CLOSE_ROUND_BRACKET IF OPEN_CURLY_BRACKET CLOSE_CURLY_BRACKET VARIABLE) ((Sp S) 
(S (IF OPEN_ROUND_BRACKET VARIABLE CLOSE_ROUND_BRACKET OPEN_CURLY_BRACKET 
VARIABLE ";" CLOSE_CURLY_BRACKET (lambda(args) (format "(when %s %s)" (nth 2 
args) (nth 5 args)))))) Sp))
+    (parser-generator-set-grammar '((Sp S) (";" OPEN_ROUND_BRACKET 
CLOSE_ROUND_BRACKET ECHO IF OPEN_CURLY_BRACKET CLOSE_CURLY_BRACKET VARIABLE) 
((Sp S) (S (IF OPEN_ROUND_BRACKET VARIABLE CLOSE_ROUND_BRACKET 
OPEN_CURLY_BRACKET VARIABLE ";" CLOSE_CURLY_BRACKET (lambda(args) (format 
"(when %s %s)" (nth 2 args) (nth 5 args)))))) Sp))
     (parser-generator-set-look-ahead-number 1)
     (parser-generator-process-grammar)
     (parser-generator-lr-generate-parser-tables)
@@ -506,6 +506,8 @@
              (cond
               ((looking-at "if")
                (setq token `(IF ,(match-beginning 0) . ,(match-end 0))))
+              ((looking-at "echo")
+               (setq token `(ECHO ,(match-beginning 0) . ,(match-end 0))))
               ((looking-at "(")
                (setq token `(OPEN_ROUND_BRACKET ,(match-beginning 0) . 
,(match-end 0))))
               ((looking-at ")")
@@ -534,11 +536,29 @@
      (equal
       '("(when a b)")
       (parser-generator-lr-translate)))
+    (message "Passed test with non-nested translation")
+
+    (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
+
+    (parser-generator-set-grammar '((Sp S T) (";" OPEN_ROUND_BRACKET 
CLOSE_ROUND_BRACKET ECHO IF OPEN_CURLY_BRACKET CLOSE_CURLY_BRACKET VARIABLE) 
((Sp S) (S (IF OPEN_ROUND_BRACKET VARIABLE CLOSE_ROUND_BRACKET 
OPEN_CURLY_BRACKET T CLOSE_CURLY_BRACKET (lambda(args) (format "(when %s %s)" 
(nth 2 args) (nth 5 args))))) (T (ECHO VARIABLE ";" (lambda(args) (format 
"(message %s)" (nth 1 args)))) (VARIABLE ";" (lambda(args) (format "%s" (nth 0 
args)))))) Sp))
+    (parser-generator-set-look-ahead-number 1)
+    (parser-generator-process-grammar)
+    (parser-generator-lr-generate-parser-tables)
+
+    (insert "if (a) { echo b; }")
+
+    (should
+     (equal
+      '("(when a (message b))")
+      (parser-generator-lr-translate)))
+
+    (message "Passed test with nested-translation with depth 2")
 
     (switch-to-buffer buffer)
     (kill-region (point-min) (point-max))
     (goto-char 1)
-    (insert "if (a) { b }")
+    (insert "if (a) { echo b }")
 
     (should-error
      (parser-generator-lr-parse))



reply via email to

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