[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 54857e4 220/434: Added failing unit te
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 54857e4 220/434: Added failing unit test for translation via LRk |
Date: |
Mon, 29 Nov 2021 15:59:45 -0500 (EST) |
branch: externals/parser-generator
commit 54857e466e9f0b7cd1fc1e1edb63f93a16333dab
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added failing unit test for translation via LRk
---
parser-generator-lr.el | 15 +++++++++------
parser-generator.el | 2 +-
test/parser-generator-lr-test.el | 24 ++++++++++++++++++++++--
3 files changed, 32 insertions(+), 9 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 031215a..5251685 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -803,7 +803,7 @@
table-index
possible-look-aheads))
- (push a-full pushdown-list)
+ (push (car a-full) pushdown-list)
(push next-index pushdown-list)
(parser-generator-lex-analyzer--pop-token)))))
@@ -835,19 +835,21 @@
(popped-item))
(while (< popped-items pop-items)
(setq popped-item (pop pushdown-list))
- (parser-generator--debug
- (message "popped-item: %s" popped-item))
+ (message "popped-item: %s" popped-item)
(when (and
(listp popped-item)
- (listp (car popped-item))
- (parser-generator--valid-terminal-p
- (car (car popped-item))))
+ (parser-generator--valid-symbol-p
+ (car popped-item)))
(push
(car popped-item)
popped-items-contents))
(setq popped-items (1+ popped-items)))))
(push production-number output)
+ ;; TODO If popped items contain a non-terminal
+ ;; it should be evaluated first before
+ ;; translation is executed.
+
;; Perform translation at reduction if specified
(when
(parser-generator--get-grammar-translation-by-number
@@ -871,6 +873,7 @@
(unless (listp partial-translation)
(setq partial-translation (list
partial-translation)))
(dolist (part-translation partial-translation)
+ (message "part-translation: %s"
part-translation)
(push part-translation translation))))))
(let ((new-table-index (car pushdown-list)))
diff --git a/parser-generator.el b/parser-generator.el
index 87ee3e3..c47252c 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -11,7 +11,7 @@
(defvar parser-generator--debug
- t
+ nil
"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 acaff6a..6eea0b9 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -488,7 +488,7 @@
(switch-to-buffer buffer)
(insert "if (a) { b; }")
- (parser-generator-set-grammar '((Sp S) (";" OPEN_ROUND_BRACKET
CLOSE_ROUND_BRACKET IF OPEN_CURLY_BRACKET CLOSE_CURLY_BRACKET VARIABLE) ((Sp S)
(S (IF OPEN_ROUND_BRACKET VARIABLE CLOSE_ROUND_BRACKET OPEN_CURLY_BRACKET
VARIABLE ";" CLOSE_CURLY_BRACKET (lambda(args) (format "(when %s %s)" (nth 2
args) (nth 5 args)))))) Sp))
+ (parser-generator-set-grammar '((Sp S) (";" OPEN_ROUND_BRACKET
CLOSE_ROUND_BRACKET ECHO IF OPEN_CURLY_BRACKET CLOSE_CURLY_BRACKET VARIABLE)
((Sp S) (S (IF OPEN_ROUND_BRACKET VARIABLE CLOSE_ROUND_BRACKET
OPEN_CURLY_BRACKET VARIABLE ";" CLOSE_CURLY_BRACKET (lambda(args) (format
"(when %s %s)" (nth 2 args) (nth 5 args)))))) Sp))
(parser-generator-set-look-ahead-number 1)
(parser-generator-process-grammar)
(parser-generator-lr-generate-parser-tables)
@@ -506,6 +506,8 @@
(cond
((looking-at "if")
(setq token `(IF ,(match-beginning 0) . ,(match-end 0))))
+ ((looking-at "echo")
+ (setq token `(ECHO ,(match-beginning 0) . ,(match-end 0))))
((looking-at "(")
(setq token `(OPEN_ROUND_BRACKET ,(match-beginning 0) .
,(match-end 0))))
((looking-at ")")
@@ -534,11 +536,29 @@
(equal
'("(when a b)")
(parser-generator-lr-translate)))
+ (message "Passed test with non-nested translation")
+
+ (switch-to-buffer buffer)
+ (kill-region (point-min) (point-max))
+
+ (parser-generator-set-grammar '((Sp S T) (";" OPEN_ROUND_BRACKET
CLOSE_ROUND_BRACKET ECHO IF OPEN_CURLY_BRACKET CLOSE_CURLY_BRACKET VARIABLE)
((Sp S) (S (IF OPEN_ROUND_BRACKET VARIABLE CLOSE_ROUND_BRACKET
OPEN_CURLY_BRACKET T CLOSE_CURLY_BRACKET (lambda(args) (format "(when %s %s)"
(nth 2 args) (nth 5 args))))) (T (ECHO VARIABLE ";" (lambda(args) (format
"(message %s)" (nth 1 args)))) (VARIABLE ";" (lambda(args) (format "%s" (nth 0
args)))))) Sp))
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-process-grammar)
+ (parser-generator-lr-generate-parser-tables)
+
+ (insert "if (a) { echo b; }")
+
+ (should
+ (equal
+ '("(when a (message b))")
+ (parser-generator-lr-translate)))
+
+ (message "Passed test with nested-translation with depth 2")
(switch-to-buffer buffer)
(kill-region (point-min) (point-max))
(goto-char 1)
- (insert "if (a) { b }")
+ (insert "if (a) { echo b }")
(should-error
(parser-generator-lr-parse))
- [elpa] externals/parser-generator 71d213b 201/434: More work on Canonical LR(k) Parser, (continued)
- [elpa] externals/parser-generator 71d213b 201/434: More work on Canonical LR(k) Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d7ad86c 200/434: Added TODO item for LRk Canonical Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7a175a8 205/434: Passed first unit test for grammar prefixes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 517ed12 212/434: Passing some more unit tests after refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f4ba363 031/434: Improved README.md, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 744fdf6 174/434: Added TODO item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d360e8a 176/434: Added failing unit test for FIRST function with starting e-identifier, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c1cdf20 197/434: Fixed issue with lex analyzer reached end of input, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 446cbe9 217/434: Refactored unit tests and separated k=2 case, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1818b9d 199/434: Added error in action-tables generation if no accept action is found, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 54857e4 220/434: Added failing unit test for translation via LRk,
ELPA Syncer <=
- [elpa] externals/parser-generator a96ab3a 222/434: More debugging LR k > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 783ea61 227/434: Added translation-symbol-table to incremental parser and translater, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 439d894 228/434: Passed all LR k=1 tests with more work on generalized solution, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 47fb35e 229/434: More work on a more generalized LR Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9b6e076 231/434: Using lowercase epsilon for e-identifier comment, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 01173e2 230/434: Added EOF identifier, passing all unit tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a76bb98 240/434: Added comments, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3807a72 237/434: Added failing unit test for LR-items k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 40473d3 252/434: Fixed bug with data in full look-ahead in parse function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e1315c3 246/434: Updated so E-FREE-FIRST(x) only uses E-FREE-FIRST on first symbol, ELPA Syncer, 2021/11/29