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

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

[elpa] externals/parser-generator 5c8a7a5 147/434: Preparations for SDT


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 5c8a7a5 147/434: Preparations for SDT support
Date: Mon, 29 Nov 2021 15:59:29 -0500 (EST)

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

    Preparations for SDT support
---
 parser-generator-lr.el           | 16 ++++++++--------
 test/parser-generator-lr-test.el |  4 ++--
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index b1f55f3..9b68e2f 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -487,12 +487,11 @@
     lr-new-item))
 
 ;; Algorithm 5.7, p. 375
-;; TODO Add support for lex-analyzer
-;; TODO Add support for SDT
-;; TODO Add support for semantic-actions
+;; TODO Test incremental usage of this function
+;; TODO Add support for Syntax-directed-translations and semantic-actions
 ;; TODO Consider case with 2 character look-ahead
-(defun parser-generator-lr--parse (&optional input-tape-index pushdown-list 
output)
-  "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with 
PUSHDOWN-LIST and OUTPUT."
+(defun parser-generator-lr--parse (&optional input-tape-index pushdown-list 
output translation)
+  "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with 
PUSHDOWN-LIST, OUTPUT and TRANSLATION."
   (unless input-tape-index
     (setq input-tape-index 0))
   (unless pushdown-list
@@ -568,7 +567,8 @@
                 ;; there is no next input symbol or g(a) is undefined, halt
                 ;; and declare error.
 
-                (let ((a (car look-ahead)))
+                (let ((a (car look-ahead))
+                      (a-full (car look-ahead-full)))
                   (let ((goto-table (gethash table-index 
parser-generator-lr--goto-tables)))
                     (let ((goto-table-length (length goto-table))
                           (goto-index 0)
@@ -597,7 +597,7 @@
                                 table-index
                                 possible-look-aheads)))
 
-                      (push a pushdown-list)
+                      (push a-full pushdown-list)
                       (push next-index pushdown-list)
                       (parser-generator-lex-analyzer--pop-token)))))
 
@@ -657,7 +657,7 @@
                (t (error (format "Invalid action-match: %s!" 
action-match)))))))))
     (unless accept
       (error "Parsed entire string without getting accepting! Output: %s" 
(nreverse output)))
-    (nreverse output)))
+    (list (nreverse output) translation)))
 
 (provide 'parser-generator-lr)
 
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 82e9d3a..f7150b5 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -280,7 +280,7 @@
 
   (should
    (equal
-    '(2 2 2 1 1)
+    '((2 2 2 1 1) nil)
     (parser-generator-lr--parse)))
 
   (setq
@@ -323,7 +323,7 @@
 
   (should
    (equal
-    '(2 2 2 1 1)
+    '((2 2 2 1 1) nil)
     (parser-generator-lr--parse)))
 
   (setq



reply via email to

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