[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 08af836006 69/82: More work on SDT for
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 08af836006 69/82: More work on SDT for LL grammar |
Date: |
Thu, 12 May 2022 13:28:19 -0400 (EDT) |
branch: externals/parser-generator
commit 08af836006e721a90e322191d8e1b2052279693d
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on SDT for LL grammar
---
parser-generator-ll.el | 78 ++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 63 insertions(+), 15 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index cae577329f..f7095513a4 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -118,6 +118,8 @@
(e-reduction
(list parser-generator--e-identifier))
(translation-stack)
+ (translation-symbol-table
+ (make-hash-table :test 'equal))
(terminal-stack '()))
(parser-generator-lex-analyzer--reset)
(while (not accept)
@@ -213,40 +215,56 @@
(car terminal-stack)
old-terminal-stack))
+ (message
+ "pop token, translation-stack: %S vs %S"
+ translation-stack
+ stack
+ )
+
;; Is it time for SDT?
(when (and
translation-stack
(string=
- (format "%S" (car (car translation-stack)))
+ (car (car translation-stack))
(format "%S" stack)))
- (let ((translation (pop translation-stack))
- (sdt-terminal-stack (pop terminal-stack)))
+ (let* ((translation-item (pop translation-stack))
+ (translation
+ (parser-generator-ll--perform-translation
+ (nth 1 translation-item)
+ translation-symbol-table
+ (pop terminal-stack))))
(message
- "Do SDT %S (%S)"
- translation
- sdt-terminal-stack)
+ "Translation: %S"
+ translation)
;; TODO Do something
- ))))
+ ))
+
+ ))
((equal action-type 'reduce)
(parser-generator--debug
(message "reduced: %S -> %S" state (nth 1 action)))
- (pop stack)
;; Is it time for SDT?
(when (and
translation-stack
(string=
- (format "%S" (car (car translation-stack)))
+ (car (car translation-stack))
(format "%S" stack)))
- (let ((translation (pop translation-stack))
- (sdt-terminal-stack (pop terminal-stack)))
+ (let* ((translation-item (pop translation-stack))
+ (translation
+ (parser-generator-ll--perform-translation
+ (nth 1 translation-item)
+ translation-symbol-table
+ (pop terminal-stack))))
(message
- "Do SDT %S (%S)"
- translation
- sdt-terminal-stack)
+ "Translation: %S"
+ translation)
;; TODO Do something
- ))
+ ))
+
+ (pop stack)
+
(push
(list
@@ -256,6 +274,7 @@
(push
'()
terminal-stack)
+ (message "translation-stack: %S" translation-stack)
(unless (equal (nth 1 action) e-reduction)
(dolist (reduce-item (reverse (nth 1 action)))
@@ -268,6 +287,35 @@
(setq accept t))))))
(reverse output)))
+(defun parser-generator-ll--perform-translation (production-number
symbol-table terminals)
+ "Perform translation by PRODUCTION-NUMBER, with SYMBOL-TABLE and TERMINALS."
+ (let* ((production
+ (parser-generator--get-grammar-production-by-number
+ production-number))
+ (production-lhs
+ (car (nth 0 production)))
+ (production-rhs
+ (nth 1 production))
+ (translation))
+ (message
+ "Perform translation %d: %S -> %S via args: %S"
+ production-number
+ production-lhs
+ production-rhs
+ terminals)
+ (let ((old-symbol-value
+ (gethash
+ production-lhs
+ symbol-table)))
+ (push
+ translation
+ old-symbol-value)
+ (puthash
+ production-lhs
+ old-symbol-value
+ symbol-table))
+ translation))
+
;;; Algorithms
- [elpa] externals/parser-generator 2e76c4b57e 42/82: Added TODO items, (continued)
- [elpa] externals/parser-generator 2e76c4b57e 42/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 8f9e4d4537 46/82: Passing 2 parse examples with k=2, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator fe0decba88 50/82: Passed one test for LLk where k=1, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 72bbadddc0 51/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2e2496d51f 54/82: Added notes, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2598402cc7 56/82: Added TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7f3c384b6d 55/82: Passing more LLk tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 0856bb7784 58/82: Started on refactor were k=1 will be treated with different algorithm, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2181545d26 64/82: Implemented test for validation of LL(1) grammar, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4051737aeb 65/82: Added TODO item for LL(k) translation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 08af836006 69/82: More work on SDT for LL grammar,
Christian Johansson <=
- [elpa] externals/parser-generator 7d87a2d154 79/82: Implemented exported LL(k) and LL(1) parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 75323b10e5 81/82: Merge branch 'feature/llk-parser', Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator db91a5f203 82/82: Removed unused function, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 315e40eff8 10/82: More work on LL table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 34ab0f1718 21/82: More various tweaks, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 064bd259ff 26/82: Passing LLk validation tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator f0de6698b9 29/82: Added todo item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 97919972a7 35/82: Improved debug message, added TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator e55a3f8a37 38/82: Updated TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7ee5504003 45/82: More work on LLk parser, Christian Johansson, 2022/05/12