[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 2181545d26 64/82: Implemented test for
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 2181545d26 64/82: Implemented test for validation of LL(1) grammar |
Date: |
Thu, 12 May 2022 13:28:19 -0400 (EDT) |
branch: externals/parser-generator
commit 2181545d262dfa8b43283cccb303ced539d40257
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Implemented test for validation of LL(1) grammar
---
parser-generator-ll.el | 27 ++++++++-----
test/parser-generator-ll-test.el | 82 +++++++++++++++++++++++++++++++++++++++-
2 files changed, 97 insertions(+), 12 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index fd40b6e8d4..b38843cdf2 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -122,10 +122,11 @@
(look-ahead-list
(parser-generator-lex-analyzer--peek-next-look-ahead))
(look-ahead))
- (message "\nstack: %S" stack)
- (message "output: %S" output)
- (message "state: %S" state)
- (message "state-action-table: %S" state-action-table)
+ (parser-generator--debug
+ (message "\nstack: %S" stack)
+ (message "output: %S" output)
+ (message "state: %S" state)
+ (message "state-action-table: %S" state-action-table))
(unless state-action-table
(signal
@@ -138,7 +139,8 @@
(if look-ahead-list
(progn
- (message "look-ahead-list: %S" look-ahead-list)
+ (parser-generator--debug
+ (message "look-ahead-list: %S" look-ahead-list))
(dolist (look-ahead-list-item look-ahead-list)
(push (car look-ahead-list-item) look-ahead))
(setq look-ahead (reverse look-ahead)))
@@ -146,7 +148,8 @@
look-ahead
eof-look-ahead))
- (message "look-ahead: %S" look-ahead)
+ (parser-generator--debug
+ (message "look-ahead: %S" look-ahead))
(unless (gethash
(format "%S" look-ahead)
@@ -172,19 +175,23 @@
(format "%S" look-ahead)
state-action-table))
(action-type action))
- (message "action: %S" action)
+ (parser-generator--debug
+ (message "action: %S" action))
(when (listp action)
(setq action-type (car action)))
- (message "action-type: %S" action-type)
+ (parser-generator--debug
+ (message "action-type: %S" action-type))
(cond
((equal action-type 'pop)
- (message "pushed: %S" look-ahead)
+ (parser-generator--debug
+ (message "pushed: %S" look-ahead))
(parser-generator-lex-analyzer--pop-token)
(pop stack))
((equal action-type 'reduce)
- (message "reduced: %S" (nth 1 action))
+ (parser-generator--debug
+ (message "reduced: %S" (nth 1 action)))
(pop stack)
(unless (equal (nth 1 action) e-reduction)
(dolist (reduce-item (reverse (nth 1 action)))
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index 299124950e..e25bef4014 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -471,7 +471,45 @@
parser-generator-ll--table
t)))
- ;; TODO Should test k = 1 here as well
+ (parser-generator-set-eof-identifier '$)
+ (parser-generator-set-e-identifier 'e)
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-set-grammar
+ '(
+ (S A)
+ (a b)
+ (
+ (S (a A S) b)
+ (A a (b S A))
+ )
+ S
+ )
+ )
+ (parser-generator-process-grammar)
+ (parser-generator-ll-generate-table)
+ ;; (message "parsing-table: %S" (parser-generator--hash-to-list
parser-generator-ll--table t))
+ (should
+ (equal
+ '(
+ ("S"
+ (
+ ("(b)" (reduce (b) 1))
+ ("(a)" (reduce (a A S) 0))
+ )
+ )
+ ("A"
+ (
+ ("(b)" (reduce (b S A) 3))
+ ("(a)" (reduce (a) 2))
+ )
+ )
+ ("b" (("(b)" pop)))
+ ("a" (("(a)" pop)))
+ ("$" (("($)" accept)))
+ )
+ (parser-generator--hash-to-list
+ parser-generator-ll--table
+ t)))
(message "Passed tests for (parser-generator-ll-generate-table)"))
@@ -643,7 +681,47 @@
"Test `parser-generator-ll--valid-grammar-k-eq-1-p'."
(message "Started tests for (parser-generator-ll--valid-grammar-k-eq-1-p)")
- ;; TODO Implement this
+ (parser-generator-set-eof-identifier '$)
+ (parser-generator-set-e-identifier 'e)
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-set-grammar
+ '(
+ (S A B)
+ (a b)
+ (
+ (S (a A S) b B)
+ (A a (b S A))
+ (B a)
+ )
+ S
+ )
+ )
+ (parser-generator-process-grammar)
+ (should
+ (equal
+ nil
+ (parser-generator-ll--valid-grammar-k-eq-1-p)))
+
+ (parser-generator-set-eof-identifier '$)
+ (parser-generator-set-e-identifier 'e)
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-set-grammar
+ '(
+ (S A B)
+ (a b c)
+ (
+ (S (a A S) b B)
+ (A a (b S A))
+ (B c)
+ )
+ S
+ )
+ )
+ (parser-generator-process-grammar)
+ (should
+ (equal
+ t
+ (parser-generator-ll--valid-grammar-k-eq-1-p)))
(message "Passed tests for (parser-generator-ll--valid-grammar-k-eq-1-p)"))
- [elpa] externals/parser-generator cf4332ef0e 40/82: Started on LLk parsing algorithm, (continued)
- [elpa] externals/parser-generator cf4332ef0e 40/82: Started on LLk parsing algorithm, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator f5f7b2c82b 41/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2e76c4b57e 42/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 8f9e4d4537 46/82: Passing 2 parse examples with k=2, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator fe0decba88 50/82: Passed one test for LLk where k=1, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 72bbadddc0 51/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2e2496d51f 54/82: Added notes, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2598402cc7 56/82: Added TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7f3c384b6d 55/82: Passing more LLk tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 0856bb7784 58/82: Started on refactor were k=1 will be treated with different algorithm, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2181545d26 64/82: Implemented test for validation of LL(1) grammar,
Christian Johansson <=
- [elpa] externals/parser-generator 4051737aeb 65/82: Added TODO item for LL(k) translation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 08af836006 69/82: More work on SDT for LL grammar, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7d87a2d154 79/82: Implemented exported LL(k) and LL(1) parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 75323b10e5 81/82: Merge branch 'feature/llk-parser', Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator db91a5f203 82/82: Removed unused function, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 315e40eff8 10/82: More work on LL table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 34ab0f1718 21/82: More various tweaks, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 064bd259ff 26/82: Passing LLk validation tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator f0de6698b9 29/82: Added todo item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 97919972a7 35/82: Improved debug message, added TODO item, Christian Johansson, 2022/05/12