[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 4f85cc5616 66/82: Passes byte-compilat
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 4f85cc5616 66/82: Passes byte-compilation tests |
Date: |
Thu, 12 May 2022 13:28:19 -0400 (EDT) |
branch: externals/parser-generator
commit 4f85cc56167dfa590b58e3713cc7067e5214b6e8
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passes byte-compilation tests
---
parser-generator-ll.el | 68 ++++++++++++++++++++++++++++++++++++++++---
test/parser-generator-test.el | 13 ++++-----
2 files changed, 69 insertions(+), 12 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index e5355bf972..cae577329f 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -116,7 +116,9 @@
parser-generator--look-ahead-number
parser-generator--eof-identifier))
(e-reduction
- (list parser-generator--e-identifier)))
+ (list parser-generator--e-identifier))
+ (translation-stack)
+ (terminal-stack '()))
(parser-generator-lex-analyzer--reset)
(while (not accept)
(let* ((state (car stack))
@@ -191,13 +193,70 @@
((equal action-type 'pop)
(parser-generator--debug
(message "pushed: %S" look-ahead))
- (parser-generator-lex-analyzer--pop-token)
- (pop stack))
+ (let ((popped-tokens
+ (parser-generator-lex-analyzer--pop-token)))
+ (pop stack)
+
+ (let ((token-data)
+ (old-terminal-stack (car terminal-stack)))
+ (dolist (popped-token popped-tokens)
+ (let ((token-datum
+ (parser-generator-lex-analyzer--get-function
+ popped-token)))
+ (push
+ token-datum
+ token-data)))
+ (push
+ token-data
+ old-terminal-stack)
+ (setf
+ (car terminal-stack)
+ old-terminal-stack))
+
+ ;; Is it time for SDT?
+ (when (and
+ translation-stack
+ (string=
+ (format "%S" (car (car translation-stack)))
+ (format "%S" stack)))
+ (let ((translation (pop translation-stack))
+ (sdt-terminal-stack (pop terminal-stack)))
+ (message
+ "Do SDT %S (%S)"
+ translation
+ sdt-terminal-stack)
+ ;; 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)))
+ (format "%S" stack)))
+ (let ((translation (pop translation-stack))
+ (sdt-terminal-stack (pop terminal-stack)))
+ (message
+ "Do SDT %S (%S)"
+ translation
+ sdt-terminal-stack)
+ ;; TODO Do something
+ ))
+
+ (push
+ (list
+ (format "%S" stack)
+ (nth 2 action))
+ translation-stack)
+ (push
+ '()
+ terminal-stack)
+
(unless (equal (nth 1 action) e-reduction)
(dolist (reduce-item (reverse (nth 1 action)))
(push reduce-item stack)))
@@ -649,7 +708,8 @@
(setq rhs (nth rhss-index rhss))
(let* ((firsts-rhs (parser-generator--first rhs))
(firsts-rhs-length (length firsts-rhs))
- (firsts-index 0))
+ (firsts-index 0)
+ (first-rhs))
(while (and
valid
(< firsts-index firsts-rhs-length))
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index e5869fa554..45dd865238 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -971,22 +971,22 @@
"Test `parser-generator--merge-max-terminal-sets'."
(message "Starting tests for (parser-generator--merge-max-terminal-sets)")
+ (parser-generator-set-eof-identifier '$)
+ (parser-generator-set-e-identifier 'e)
+ (parser-generator-set-look-ahead-number 2)
(parser-generator-set-grammar '((S A B) (a b) ((S A) (S (B)) (B a) (A a) (A
(b a))) S))
(parser-generator-process-grammar)
;; Example 5.13 p. 348
- (parser-generator-set-e-identifier 'e)
- (parser-generator-set-look-ahead-number 2)
(should
(equal
'((a b) (b) (b a))
(parser-generator--merge-max-terminal-sets
'((a b b) (e))
- '((b) (b a b)))))
+ '((b) (b a b))
+ t)))
;; Example 5.14 p. 350
- (parser-generator-set-e-identifier 'e)
- (parser-generator-set-look-ahead-number 2)
(should
(equal
'((a a) (a b) (b b))
@@ -994,9 +994,6 @@
'((a b) (a e a) (b b) (b e b))
nil)))
- (parser-generator-set-eof-identifier '$)
- (parser-generator-set-e-identifier 'e)
- (parser-generator-set-look-ahead-number 2)
(should
(equal
'(($ $) (a $) (a a))
- [elpa] externals/parser-generator ab4ce4d668 25/82: Tests for validating LLk grammar passing, (continued)
- [elpa] externals/parser-generator ab4ce4d668 25/82: Tests for validating LLk grammar passing, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 04eb4d066c 27/82: Started on test for Example 5.17, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 5c0bcd5f9a 36/82: Passing test for LL-table generation example 5.17, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1290048b84 39/82: Improved documentation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 57c6fdda2f 43/82: Passing test for generating LL-parser hash-table, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator af3740c46a 59/82: More refactoring, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 3d373f4dfa 60/82: Updated docs, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 020969094c 61/82: More refactoring, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 08ed55d35a 62/82: More work on k=1, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4f85cc5616 66/82: Passes byte-compilation tests,
Christian Johansson <=
- [elpa] externals/parser-generator 7a265c9a84 67/82: LL-tests now runs on make tests command, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator a046c8584d 73/82: Started on documentation for LL(k) and LL(1), Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator f07939a440 76/82: Added example from Wikipedia and passing test, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 03a11c4369 14/82: Started test for LL(k) parser-table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 9d6ca94d0e 02/82: More work on LL(k) parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 6ce0dd9429 04/82: Improved function to calculate merge max terminal sets, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 52734d7160 16/82: Updated TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7b77032f71 22/82: Parser table generation for LLk now works for productions, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator fe728f8ad8 23/82: Passing test for generating LLk parser table, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 3b9977b51b 28/82: More work on LLk test, Christian Johansson, 2022/05/12