[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 33634dd 193/434: Passing all tests aft
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 33634dd 193/434: Passing all tests after refactor |
Date: |
Mon, 29 Nov 2021 15:59:39 -0500 (EST) |
branch: externals/parser-generator
commit 33634ddda5a1a6bae2bf524d0b7fe7aa04059fc9
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passing all tests after refactor
---
parser-generator-lex-analyzer.el | 40 ++++++++++++++++++------------
test/parser-generator-lex-analyzer-test.el | 8 +++---
test/parser-generator-lr-test.el | 36 ++++++++++++++++++---------
3 files changed, 53 insertions(+), 31 deletions(-)
diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index 6f0609f..e2aa7e4 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -58,7 +58,7 @@
(unless parser-generator-lex-analyzer--function
(error "Missing lex-analyzer function!"))
(unless parser-generator--look-ahead-number
- (error "Missing look-ahead number!"))
+ (error "Missing look-ahead-number!"))
(let ((look-ahead)
(look-ahead-length 0)
(index parser-generator-lex-analyzer--index))
@@ -97,21 +97,29 @@
(error "Missing lex-analyzer index!"))
(unless parser-generator-lex-analyzer--function
(error "Missing lex-analyzer function!"))
- (condition-case error
- (progn
- (let ((token (funcall
- parser-generator-lex-analyzer--function
- parser-generator-lex-analyzer--index)))
- (unless (listp (car token))
- (setq token (list token)))
- (let ((first-token (car token)))
- (setq parser-generator-lex-analyzer--index
- (cdr (cdr first-token)))
- first-token)))
- (error (error
- "Lex-analyze failed to pop token at %s, error: %s"
- parser-generator-lex-analyzer--index
- (car (cdr error))))))
+ (unless parser-generator--look-ahead-number
+ (error "Missing look-ahead-number!"))
+ (let ((iteration 0)
+ (tokens))
+ (while (< iteration parser-generator--look-ahead-number)
+ (condition-case error
+ (progn
+ (let ((token
+ (funcall
+ parser-generator-lex-analyzer--function
+ parser-generator-lex-analyzer--index)))
+ (unless (listp (car token))
+ (setq token (list token)))
+ (let ((first-token (car token)))
+ (setq parser-generator-lex-analyzer--index
+ (cdr (cdr first-token)))
+ (push first-token tokens))))
+ (error (error
+ "Lex-analyze failed to pop token at %s, error: %s"
+ parser-generator-lex-analyzer--index
+ (car (cdr error)))))
+ (setq iteration (1+ iteration)))
+ (nreverse tokens)))
(defun parser-generator-lex-analyzer--reset ()
"Reset lex-analyzer."
diff --git a/test/parser-generator-lex-analyzer-test.el
b/test/parser-generator-lex-analyzer-test.el
index e3fcc9c..5cee3f0 100644
--- a/test/parser-generator-lex-analyzer-test.el
+++ b/test/parser-generator-lex-analyzer-test.el
@@ -113,17 +113,19 @@
(message "Passed failing lex analysis 2")
+ (setq parser-generator--look-ahead-number 1)
+
(should
(equal
- '("a" 1 . 2)
+ '(("a" 1 . 2))
(parser-generator-lex-analyzer--pop-token)))
(should
(equal
- '("b" 2 . 3)
+ '(("b" 2 . 3))
(parser-generator-lex-analyzer--pop-token)))
(should
(equal
- nil
+ '(nil)
(parser-generator-lex-analyzer--pop-token)))
(message "Ended tests for (parser-generator-lex-analyzer--pop-token)"))
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index f0327b4..89fe758 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -272,7 +272,6 @@
(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)
@@ -286,12 +285,10 @@
(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 symbols")
(setq
@@ -307,19 +304,14 @@
(push (nth (1- index) string) tokens)
(setq index (1+ index)))
(nreverse tokens))))
-
(should-error
(parser-generator-lr--parse))
-
(message "Passed test with terminals as symbols, invalid syntax")
- ;; Test with terminals as strings here
-
(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)
(parser-generator-process-grammar)
(parser-generator-lr-generate-parser-tables)
-
(setq
parser-generator-lex-analyzer--function
(lambda (index)
@@ -333,12 +325,10 @@
(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")
(setq
@@ -354,10 +344,8 @@
(push (nth (1- index) string) tokens)
(setq index (1+ index)))
(nreverse tokens))))
-
(should-error
(parser-generator-lr--parse))
-
(message "Passed test with terminals as string, invalid syntax")
(setq
@@ -378,6 +366,30 @@
(message "Passed incremental-tests")
+ ;; (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)
+ ;; (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 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-translate ()
- [elpa] externals/parser-generator a18a23d 172/434: Updated info about SDT and SA, (continued)
- [elpa] externals/parser-generator a18a23d 172/434: Updated info about SDT and SA, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d6afd0b 180/434: Added TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bbcb22f 182/434: Optimized memory usage for f-sets, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e2f4347 183/434: More work on f-set generation with e-identifiers, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 046e239 187/434: Passing first 3 complex tests for first, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4811521 185/434: Various tweakings, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7b6c1dc 186/434: First function passing first complex grammar test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7e96f9d 188/434: Passing all unit tests for first function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7a90a75 190/434: Updated max interation count, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 796b41b 192/434: Passed unit tests for follow function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 33634dd 193/434: Passing all tests after refactor,
ELPA Syncer <=
- [elpa] externals/parser-generator ba8e501 194/434: Added failing first test with complex case, ELPA Syncer, 2021/11/29
- [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