branch: externals/parser-generator commit f621e77c49a69f7c84062f1d0bae267b4af1a1f0 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Preparations for testing incremental parse --- parser-generator-lr.el | 8 +++---- test/parser-generator-lr-test.el | 49 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/parser-generator-lr.el b/parser-generator-lr.el index 39b1ea4..fe29519 100644 --- a/parser-generator-lr.el +++ b/parser-generator-lr.el @@ -700,11 +700,11 @@ (when next-index (push production-lhs pushdown-list) - (push next-index pushdown-list))))) + (push next-index pushdown-list) - (push - `(,parser-generator-lex-analyzer--index ,pushdown-list) - pushdown-list-history))))) + (push + `(,parser-generator-lex-analyzer--index ,pushdown-list) + pushdown-list-history))))))))) ((equal action-match '(accept)) ;; (d) If f(u) = accept, we halt and declare the string diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el index 4d6aae2..cc02538 100644 --- a/test/parser-generator-lr-test.el +++ b/test/parser-generator-lr-test.el @@ -223,9 +223,9 @@ (message "Passed tests for (parser-generator-lr--items-valid-p)")) -(defun parser-generator-lr-test--parse () - "Test `parser-generator-lr--parse'." - (message "Started tests for (parser-generator-lr--parse)") +(defun parser-generator-lr-test-parse () + "Test `parser-generator-lr-parse'." + (message "Started tests for (parser-generator-lr-parse)") (parser-generator-set-grammar '((Sp S) (a b) ((Sp S) (S (S a S b)) (S e)) Sp)) (parser-generator-set-look-ahead-number 1) @@ -319,6 +319,42 @@ (message "Passed test with terminals as string, invalid syntax") + ;; TODO Add incremental parse here + + (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)))) + + (let ((history (nth 2 (parser-generator-lr--parse)))) + (message "History: %s" history) + + (let ((input-tape-index (car (nth 2 history))) + (pushdown-list (car (cdr (nth 2 history))))) + ;; (let ((parser-generator-lr--parse + ;; input-tape-index + ;; pushdown-list + ;; output-history + ;; translation-history + ;; pushdown-list-history)) + (message "input-tape-index: %s" input-tape-index) + (message "pushdown-list: %s" pushdown-list))) + + (message "Passed tests for (parser-generator-lr--parse)")) + +(defun parser-generator-lr-test-translate () + "Test `parser-generator-lr-translate'." + (message "Started tests for (parser-generator-lr-translate)") + ;; Test translation with terminals as strings here (let ((buffer (generate-new-buffer "*a*"))) @@ -418,7 +454,9 @@ (kill-buffer buffer)) (message "Passed test with translation 2") - (message "Passed tests for (parser-generator-lr--parse)")) + ;; TODO Add incremental translation here + + (message "Passed tests for (parser-generator-lr-translate)")) (defun parser-generator-lr-test () "Run test." @@ -428,7 +466,8 @@ (parser-generator-lr-test--items-valid-p) (parser-generator-lr-test--generate-goto-tables) (parser-generator-lr-test--generate-action-tables) - (parser-generator-lr-test--parse)) + (parser-generator-lr-test-parse) + (parser-generator-lr-test-translate)) (provide 'parser-generator-lr-test)