[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator fdbdff7 157/434: Added unit test for S
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator fdbdff7 157/434: Added unit test for SDT in LR-parser |
Date: |
Mon, 29 Nov 2021 15:59:31 -0500 (EST) |
branch: externals/parser-generator
commit fdbdff7873e2b3e67f244e12690b2819ad41fc53
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added unit test for SDT in LR-parser
---
parser-generator-lr.el | 11 ++++----
test/parser-generator-lr-test.el | 57 ++++++++++++++++++++++++----------------
2 files changed, 40 insertions(+), 28 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 9692d47..688af25 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -476,7 +476,6 @@
;; Algorithm 5.7, p. 375
;; 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 translation)
"Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with
PUSHDOWN-LIST, OUTPUT and TRANSLATION."
@@ -630,17 +629,17 @@
(setq
popped-items-meta-contents
(nreverse popped-items-meta-contents))
- (message "Popped-items: %s" popped-items-contents)
- (message "Popped-items-meta-contents: %s"
popped-items-meta-contents)
(let ((partial-translation
(funcall
(parser-generator--get-grammar-translation-by-number
production-number)
popped-items-meta-contents)))
- (message "Partial-translation: %s"
partial-translation)
(when partial-translation
- (push partial-translation translation)))))
+ (unless (listp partial-translation)
+ (setq partial-translation (list
partial-translation)))
+ (dolist (part-translation partial-translation)
+ (push part-translation translation))))))
(let ((new-table-index (car pushdown-list)))
(let ((goto-table (gethash new-table-index
parser-generator-lr--goto-tables)))
@@ -676,6 +675,8 @@
(t (error (format "Invalid action-match: %s!"
action-match)))))))))
(unless accept
(error "Parsed entire string without getting accepting! Output: %s"
(nreverse output)))
+ (when translation
+ (setq translation (nreverse translation)))
(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 5c18c97..8c21eea 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -319,31 +319,42 @@
(message "Passed test with terminals as string, invalid syntax")
- ;; TODO Test translation with terminals as strings here
+ ;; Test translation with terminals as strings here
+
+ (let ((buffer (generate-new-buffer "*a*")))
+ (switch-to-buffer buffer)
+ (insert "aabb")
+
+ (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b"
(lambda(args) (nreverse args)))) (S e)) Sp))
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-process-grammar)
+ (parser-generator-lr-generate-parser-tables)
+
+ (setq
+ parser-generator-lex-analyzer--function
+ (lambda (index)
+ (with-current-buffer buffer
+ (when (<= (+ index 2) (point-max))
+ (let ((start (+ index 1))
+ (end (+ index 2)))
+ (let ((token (buffer-substring-no-properties start end)))
+ `(,token ,start . ,end)))))))
+
+ (setq
+ parser-generator-lex-analyzer--get-function
+ (lambda (token)
+ (with-current-buffer buffer
+ (let ((start (car (cdr token)))
+ (end (cdr (cdr token))))
+ (when (<= end (point-max))
+ (buffer-substring-no-properties start end))))))
- (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b"
(lambda(args) (nreverse args)))) (S e)) Sp))
- (parser-generator-set-look-ahead-number 1)
- (parser-generator-process-grammar)
- (parser-generator-lr-generate-parser-tables)
-
- (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 (1+ index))
- (tokens))
- (while (and
- (< index string-length)
- (< index max-index))
- (push (nth index string) tokens)
- (setq index (1+ index)))
- (nreverse tokens))))
+ (should
+ (equal
+ '((2 2 2 1 1) ("b" "a" "b" "a"))
+ (parser-generator-lr--parse)))
- (should
- (equal
- '((2 2 2 1 1) nil)
- (parser-generator-lr--parse)))
+ (kill-buffer buffer))
(message "Passed tests for (parser-generator-lr--parse)"))
- [elpa] externals/parser-generator 6d323a4 120/434: Implemented reduce action of LR-parser algorithm, (continued)
- [elpa] externals/parser-generator 6d323a4 120/434: Implemented reduce action of LR-parser algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9b44827 124/434: Optimized LR-parser with hash-tables, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 01fc56f 127/434: Updated list of grammars, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4ef0430 133/434: White-space fix, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b2fd896 136/434: Added support for indexed tokens, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4746c64 137/434: Updated example for LR parse with indexed tokens, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 04a3ec5 141/434: Added separate file for syntax analysis, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 71e4eaa 145/434: Merge branch 'master' of git.cvj.se:/home/git/emacs-parser-generator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 173fe94 152/434: Preparations for translation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator be557ba 013/434: More work on refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fdbdff7 157/434: Added unit test for SDT in LR-parser,
ELPA Syncer <=
- [elpa] externals/parser-generator 2d56ab0 160/434: Made separate functions for parse and translate in LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7cfdea2 165/434: Passing tests for incremental lexer, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b072fdd 175/434: Passed test for trailing e-identifier in EFF function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d435e50 122/434: Passing unit test for LR-parse, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a31da28 173/434: Updated Parser WIP items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator aaec6fa 189/434: Work on e-free first tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 922033f 198/434: Various stuff, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fe10d4a 196/434: Passed tests for first 3 and first 4 of complex grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4cba5aa 203/434: Made new TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ef60d96 204/434: Added failing test for new function the generates grammar prefixes, ELPA Syncer, 2021/11/29