branch: externals/parser-generator commit 5c8a7a54f5b7a620870bb344cd6444113195b879 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Preparations for SDT support --- parser-generator-lr.el | 16 ++++++++-------- test/parser-generator-lr-test.el | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/parser-generator-lr.el b/parser-generator-lr.el index b1f55f3..9b68e2f 100644 --- a/parser-generator-lr.el +++ b/parser-generator-lr.el @@ -487,12 +487,11 @@ lr-new-item)) ;; Algorithm 5.7, p. 375 -;; TODO Add support for lex-analyzer -;; TODO Add support for SDT -;; TODO Add support for semantic-actions +;; TODO Test incremental usage of this function +;; TODO Add support for Syntax-directed-translations and semantic-actions ;; TODO Consider case with 2 character look-ahead -(defun parser-generator-lr--parse (&optional input-tape-index pushdown-list output) - "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with PUSHDOWN-LIST and OUTPUT." +(defun parser-generator-lr--parse (&optional input-tape-index pushdown-list output translation) + "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with PUSHDOWN-LIST, OUTPUT and TRANSLATION." (unless input-tape-index (setq input-tape-index 0)) (unless pushdown-list @@ -568,7 +567,8 @@ ;; there is no next input symbol or g(a) is undefined, halt ;; and declare error. - (let ((a (car look-ahead))) + (let ((a (car look-ahead)) + (a-full (car look-ahead-full))) (let ((goto-table (gethash table-index parser-generator-lr--goto-tables))) (let ((goto-table-length (length goto-table)) (goto-index 0) @@ -597,7 +597,7 @@ table-index possible-look-aheads))) - (push a pushdown-list) + (push a-full pushdown-list) (push next-index pushdown-list) (parser-generator-lex-analyzer--pop-token))))) @@ -657,7 +657,7 @@ (t (error (format "Invalid action-match: %s!" action-match))))))))) (unless accept (error "Parsed entire string without getting accepting! Output: %s" (nreverse output))) - (nreverse output))) + (list (nreverse output) translation))) (provide 'parser-generator-lr) diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el index 82e9d3a..f7150b5 100644 --- a/test/parser-generator-lr-test.el +++ b/test/parser-generator-lr-test.el @@ -280,7 +280,7 @@ (should (equal - '(2 2 2 1 1) + '((2 2 2 1 1) nil) (parser-generator-lr--parse))) (setq @@ -323,7 +323,7 @@ (should (equal - '(2 2 2 1 1) + '((2 2 2 1 1) nil) (parser-generator-lr--parse))) (setq