[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator a96ab3a 222/434: More debugging LR k >
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator a96ab3a 222/434: More debugging LR k > 1 |
Date: |
Mon, 29 Nov 2021 15:59:45 -0500 (EST) |
branch: externals/parser-generator
commit a96ab3ac9232f4dc984f9791cd18b756e804411a
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More debugging LR k > 1
---
parser-generator-lr.el | 22 ++++++++++-----
parser-generator.el | 2 +-
test/parser-generator-lr-test.el | 58 +++++++++++++++++++++++++++++++++++-----
3 files changed, 68 insertions(+), 14 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index cf51d4a..f606f98 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -712,6 +712,9 @@
(push (car look-ahead-item) look-ahead)
(push look-ahead-item look-ahead)))
+ (parser-generator--debug
+ (message "look-ahead: %s" look-ahead))
+
(let ((table-index
(car pushdown-list)))
(let ((action-table
@@ -787,15 +790,21 @@
searching-match
(< goto-index goto-table-length))
(let ((goto-item (nth goto-index goto-table)))
- (let ((goto-item-look-ahead (list (car goto-item)))
+ (let ((goto-item-symbol (list (car goto-item)))
(goto-item-next-index (car (cdr goto-item))))
- (push goto-item-look-ahead possible-look-aheads)
+ (push goto-item-symbol possible-look-aheads)
+
+ (parser-generator--debug
+ (message "goto-item: %s" goto-item)
+ (message "goto-item-symbol: %s" goto-item-symbol))
- (when (equal goto-item-look-ahead a)
+ (when (equal goto-item-symbol a)
(setq next-index goto-item-next-index)
(setq searching-match nil))))
(setq goto-index (1+ goto-index)))
+ (parser-generator--debug
+ (message "next-index: %s" next-index))
(unless next-index
(error
@@ -804,6 +813,7 @@
table-index
possible-look-aheads))
+ ;; Maybe push both tokens here?
(push (car a-full) pushdown-list)
(push next-index pushdown-list)
(parser-generator-lex-analyzer--pop-token)))))
@@ -913,14 +923,14 @@
searching-match
(< goto-index goto-table-length))
(let ((goto-item (nth goto-index goto-table)))
- (let ((goto-item-look-ahead (list (car
goto-item)))
+ (let ((goto-item-symbol (list (car goto-item)))
(goto-item-next-index (car (cdr
goto-item))))
(parser-generator--debug
(message "goto-item: %s" goto-item)
- (message "goto-item-look-ahead: %s"
goto-item-look-ahead))
+ (message "goto-item-symbol: %s"
goto-item-symbol))
(when (equal
- goto-item-look-ahead
+ goto-item-symbol
production-lhs)
(setq next-index goto-item-next-index)
(setq searching-match nil))))
diff --git a/parser-generator.el b/parser-generator.el
index c47252c..87ee3e3 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -11,7 +11,7 @@
(defvar parser-generator--debug
- nil
+ t
"Whether to print debug messages or not.")
(defvar parser-generator--e-identifier
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index f4357e9..4aeeb64 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -409,18 +409,62 @@
(parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b"))
(S e)) Sp))
(parser-generator-set-look-ahead-number 2)
(parser-generator-process-grammar)
+
(let ((lr-items (parser-generator-lr--generate-goto-tables)))
(parser-generator--debug
- (message "lr-items: %s" (parser-generator--hash-values-to-list lr-items
t)))
+ (message "all lr-items: %s" (parser-generator--hash-values-to-list
lr-items t)))
- ;; TODO Fix so that there is an accept path in look-ahead number 2
+ (should
+ (equal
+ '((0 ((S 1)))
+ (1 (("a" 2)))
+ (2 ((S 3)))
+ (3 (("a" 4) ("b" 5)))
+ (4 ((S 6)))
+ (5 nil)
+ (6 (("a" 4) ("b" 7)))
+ (7 nil))
+ (parser-generator--hash-to-list
+ parser-generator-lr--goto-tables)))
+ (message "Passed GOTO-tables k = 2")
+
+ ;; TODO Validate lr-items here
+
+ ;; (should
+ ;; (equal
+ ;; '((0 (((S) nil (S "a" S "b") ("a")) ((S) nil (S "a" S "b") (e)) ((S)
nil nil ("a")) ((S) nil nil (e)) ((Sp) nil (S) (e))))
+ ;; (1 (((S) (S) ("a" S "b") ("a")) ((S) (S) ("a" S "b") (e)) ((Sp) (S)
nil (e))))
+ ;; (2 (((S) (S "a") (S "b") ("a")) ((S) (S "a") (S "b") (e)) ((S) nil
(S "a" S "b") ("a")) ((S) nil (S "a" S "b") ("b")) ((S) nil nil ("a")) ((S) nil
nil ("b"))))
+ ;; (3 (((S) (S) ("a" S "b") ("a")) ((S) (S) ("a" S "b") ("b")) ((S) (S
"a" S) ("b") ("a")) ((S) (S "a" S) ("b") (e))))
+ ;; (4 (((S) (S "a") (S "b") ("a")) ((S) (S "a") (S "b") ("b")) ((S)
nil (S "a" S "b") ("a")) ((S) nil (S "a" S "b") ("b")) ((S) nil nil ("a")) ((S)
nil nil ("b"))))
+ ;; (5 (((S) (S "a" S "b") nil ("a")) ((S) (S "a" S "b") nil (e))))
+ ;; (6 (((S) (S) ("a" S "b") ("a")) ((S) (S) ("a" S "b") ("b")) ((S) (S
"a" S) ("b") ("a")) ((S) (S "a" S) ("b") ("b"))))
+ ;; (7 (((S) (S "a" S "b") nil ("a")) ((S) (S "a" S "b") nil ("b")))))
+ ;; (parser-generator--hash-to-list
+ ;; lr-items)))
+ ;; (message "Passed LR-items k = 2")
- (parser-generator--debug
- (message "goto-tables: %s" (parser-generator--hash-values-to-list
parser-generator-lr--goto-tables t)))
(parser-generator-lr--generate-action-tables lr-items)
- ;; TODO Should generate accept somewhere in this action-table
(parser-generator--debug
- (message "action-tables: %s" (parser-generator--hash-values-to-list
parser-generator-lr--action-tables t))))
+ (message "action-tables: %s" (parser-generator--hash-values-to-list
parser-generator-lr--action-tables t)))
+
+ ;; TODO Validate action-table here
+
+ ;; (should
+ ;; (equal
+ ;; '((0 (((a) reduce 2) ((e) reduce 2)))
+ ;; (1 (((a) shift) ((e) accept)))
+ ;; (2 (((a) reduce 2) ((b) reduce 2)))
+ ;; (3 (((a) shift) ((b) shift)))
+ ;; (4 (((a) reduce 2) ((b) reduce 2)))
+ ;; (5 (((a) reduce 1) ((e) reduce 1)))
+ ;; (6 (((a) shift) ((b) shift)))
+ ;; (7 (((a) reduce 1) ((b) reduce 1))))
+ ;; (parser-generator--hash-to-list
+ ;; parser-generator-lr--action-tables)))
+ ;; (message "Passed ACTION-tables k = 2")
+
+ )
(setq
parser-generator-lex-analyzer--function
(lambda (index)
@@ -629,7 +673,7 @@
(parser-generator-lr-test--generate-action-tables)
(parser-generator-lr-test-parse)
(parser-generator-lr-test-translate)
- ;; (parser-generator-lr-test-parse-k-2)
+ (parser-generator-lr-test-parse-k-2)
)
- [elpa] externals/parser-generator d7ad86c 200/434: Added TODO item for LRk Canonical Parser, (continued)
- [elpa] externals/parser-generator d7ad86c 200/434: Added TODO item for LRk Canonical Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7a175a8 205/434: Passed first unit test for grammar prefixes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 517ed12 212/434: Passing some more unit tests after refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f4ba363 031/434: Improved README.md, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 744fdf6 174/434: Added TODO item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d360e8a 176/434: Added failing unit test for FIRST function with starting e-identifier, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c1cdf20 197/434: Fixed issue with lex analyzer reached end of input, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 446cbe9 217/434: Refactored unit tests and separated k=2 case, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1818b9d 199/434: Added error in action-tables generation if no accept action is found, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 54857e4 220/434: Added failing unit test for translation via LRk, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a96ab3a 222/434: More debugging LR k > 1,
ELPA Syncer <=
- [elpa] externals/parser-generator 783ea61 227/434: Added translation-symbol-table to incremental parser and translater, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 439d894 228/434: Passed all LR k=1 tests with more work on generalized solution, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 47fb35e 229/434: More work on a more generalized LR Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9b6e076 231/434: Using lowercase epsilon for e-identifier comment, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 01173e2 230/434: Added EOF identifier, passing all unit tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a76bb98 240/434: Added comments, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3807a72 237/434: Added failing unit test for LR-items k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 40473d3 252/434: Fixed bug with data in full look-ahead in parse function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e1315c3 246/434: Updated so E-FREE-FIRST(x) only uses E-FREE-FIRST on first symbol, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 53ae129 245/434: Commented out useless code, ELPA Syncer, 2021/11/29