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

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

[elpa] externals/parser-generator 234a6ca2db 70/82: More work on LLk SDT


From: Christian Johansson
Subject: [elpa] externals/parser-generator 234a6ca2db 70/82: More work on LLk SDT
Date: Thu, 12 May 2022 13:28:19 -0400 (EDT)

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

    More work on LLk SDT
---
 parser-generator-ll.el | 31 ++++++++++++++++++++++++++-----
 1 file changed, 26 insertions(+), 5 deletions(-)

diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index f7095513a4..dabd26ba94 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -245,6 +245,8 @@
             (parser-generator--debug
              (message "reduced: %S -> %S" state (nth 1 action)))
 
+            (pop stack)
+
             ;; Is it time for SDT?
             (when (and
                    translation-stack
@@ -263,9 +265,6 @@
                 ;; TODO Do something
                 ))
 
-            (pop stack)
-
-
             (push
              (list
               (format "%S" stack)
@@ -296,13 +295,35 @@
           (car (nth 0 production)))
          (production-rhs
           (nth 1 production))
-        (translation))
+         (translation)
+         (args))
+
+    ;; Collect arguments for translation
+    (let ((terminal-index 0))
+      (dolist (rhs-item production-rhs)
+        (cond
+
+         ((parser-generator--valid-non-terminal-p
+           rhs-item)
+          (let ((non-terminal-value-list (gethash rhs-item symbol-table))
+                (non-terminal-value))
+            (when non-terminal-value-list
+              (setq non-terminal-value (pop non-terminal-value-list))
+              (puthash rhs-item non-terminal-value-list symbol-table))
+            (push non-terminal-value args)))
+
+         ((parser-generator--valid-terminal-p
+           rhs-item)
+          (push (nth terminal-index terminals) args)
+          (setq terminal-index (1+ terminal-index))))))
+    (setq args (reverse args))
+
     (message
      "Perform translation %d: %S -> %S via args: %S"
      production-number
      production-lhs
      production-rhs
-     terminals)
+     args)
     (let ((old-symbol-value
            (gethash
             production-lhs



reply via email to

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