branch: externals/parser-generator
commit 2a9a23e0fe3a262ca7a36b31f11a7cb8582ddfc2
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
More debugging
---
parser-generator-lex-analyzer.el | 2 +-
parser-generator-lr.el | 17 ++++++++----
parser-generator.el | 2 +-
test/parser-generator-lr-test.el | 57 ++--------------------------------------
4 files changed, 16 insertions(+), 62 deletions(-)
diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index 5af5a62..16d4714 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -102,7 +102,7 @@
(error "Missing look-ahead-number!"))
(let ((iteration 0)
(tokens))
- (while (< iteration parser-generator--look-ahead-number)
+ (while (< iteration 1)
(condition-case error
(progn
(let ((token
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 1d18665..031215a 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -718,6 +718,12 @@
table-index
parser-generator-lr--action-tables)))
+ (unless action-table
+ (error
+ "Action-table with index %s is empty! Push-down-list: %s"
+ table-index
+ pushdown-list))
+
(let ((action-match nil)
(action-table-length (length action-table))
(action-index 0)
@@ -740,10 +746,11 @@
(error
(format
- "Invalid syntax! Expected one of %s found %s at index %s "
+ "Invalid syntax! Expected one of %s found %s at index %s,
push-down-list: %s"
possible-look-aheads
look-ahead
- parser-generator-lex-analyzer--index)
+ parser-generator-lex-analyzer--index
+ pushdown-list)
possible-look-aheads
look-ahead
parser-generator-lex-analyzer--index))
@@ -763,8 +770,8 @@
;; there is no next input symbol or g(a) is undefined, halt
;; and declare error.
- (let ((a look-ahead)
- (a-full look-ahead-full))
+ (let ((a (list (car look-ahead)))
+ (a-full (list (car look-ahead-full))))
(let ((goto-table
(gethash
table-index
@@ -822,7 +829,7 @@
(message "production-rhs: %s" production-rhs))
(unless (equal
production-rhs
- e-list)
+ (list parser-generator--e-identifier))
(let ((pop-items (* 2 (length production-rhs)))
(popped-items 0)
(popped-item))
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 18b1946..acaff6a 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -400,65 +400,12 @@
(parser-generator-lr-test--parse-incremental-vs-regular)
(message "Passed incremental-tests")
- ;; (message "Starting test with look-ahead number = 2")
-
- ;; (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)))
-
- ;; ;; TODO Fix so that there is an accept path in look-ahead number 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))))
- ;; (setq
- ;; parser-generator-lex-analyzer--function
- ;; (lambda (index)
- ;; (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4)))
- ;; (string-length (length string))
- ;; (max-index index)
- ;; (tokens))
- ;; (while (and
- ;; (< (1- index) string-length)
- ;; (< (1- index) max-index))
- ;; (push (nth (1- index) string) tokens)
- ;; (setq index (1+ index)))
- ;; (nreverse tokens))))
- ;; (should
- ;; (equal
- ;; '(2 2 2 1 1)
- ;; (parser-generator-lr-parse)))
- ;; (message "Passed test with terminals as string with look-ahead-number 2")
-
-
(message "Passed tests for (parser-generator-lr--parse)"))
(defun parser-generator-lr-test-parse-k-2 ()
"Test `parser-generator-lr-parse' with k = 2."
(message "Started tests for (parser-generator-lr-parse) k = 2")
- (setq
- parser-generator-lex-analyzer--function
- (lambda (index)
- (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4) ("b" 4 . 5)))
- (string-length (length string))
- (max-index index)
- (tokens))
- (while (and
- (< (1- index) string-length)
- (< (1- index) max-index))
- (push (nth (1- index) string) tokens)
- (setq index (1+ index)))
- (nreverse tokens))))
-
- (message "Starting test with look-ahead number = 2")
-
(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)
@@ -477,7 +424,7 @@
(setq
parser-generator-lex-analyzer--function
(lambda (index)
- (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4)))
+ (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4) ("b" 4 . 5)))
(string-length (length string))
(max-index index)
(tokens))
@@ -662,7 +609,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)
)