branch: externals/parser-generator commit 2a9a23e0fe3a262ca7a36b31f11a7cb8582ddfc2 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
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) )