branch: externals/parser-generator
commit 173fe946dd398f38378830b9c88b08623f573af4
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
Preparations for translation
---
parser-generator-lr.el | 14 +++++++++++---
parser-generator.el | 6 ++++++
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 4447d81..e12b139 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -604,15 +604,23 @@
(let ((production-number (car (cdr action-match))))
(let ((production
(parser-generator--get-grammar-production-by-number production-number)))
(let ((production-lhs (car production))
- (production-rhs (car (cdr production))))
+ (production-rhs (car (cdr production)))
+ (popped-items-contents))
(unless (equal production-rhs (list
parser-generator--e-identifier))
(let ((pop-items (* 2 (length production-rhs)))
- (popped-items 0))
+ (popped-items 0)
+ (popped-item))
(while (< popped-items pop-items)
- (pop pushdown-list)
+ (setq popped-item (pop pushdown-list))
+ (when (listp popped-item)
+ (push popped-item popped-items-contents))
(setq popped-items (1+ popped-items)))))
(push production-number output)
+ (when
(parser-generator--get-grammar-translation-by-number production-number)
+ ;; TODO Perform translation here
+ (message "Popped-items: %s" popped-items-contents))
+
(let ((new-table-index (car pushdown-list)))
(let ((goto-table (gethash new-table-index
parser-generator-lr--goto-tables)))
(let ((goto-table-length (length goto-table))
diff --git a/parser-generator.el b/parser-generator.el
index 27c522b..c151273 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -201,6 +201,12 @@
(error "No grammar G defined!")))
(nth 1 G))
+(defun parser-generator--get-grammar-translation-by-number (production-number)
+ "If translation for PRODUCTION-NUMBER exist, return it."
+ (unless parser-generator--table-translations
+ (error "Table for translations by production-number is undefined!"))
+ (gethash production-number parser-generator--table-translations))
+
(defun parser-generator--hash-to-list (hash-table &optional un-sorted)
"Return a list that represent the HASH-TABLE. Each element is a list: (list
key value), optionally UN-SORTED."
(let (result)