[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 2e76c4b57e 42/82: Added TODO items
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 2e76c4b57e 42/82: Added TODO items |
Date: |
Thu, 12 May 2022 13:28:16 -0400 (EDT) |
branch: externals/parser-generator
commit 2e76c4b57eca28495014e42d5d4d5a140624785e
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added TODO items
---
parser-generator-ll.el | 42 +++++++++++++++++++++++++++++++++-------
test/parser-generator-ll-test.el | 31 ++++++++++++++++++++++++++---
2 files changed, 63 insertions(+), 10 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index 5c830d728e..7ce053e521 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -30,13 +30,40 @@
(message "\n;; Starting generation of LL(k) parser-tables..\n")
(unless (parser-generator-ll--valid-grammar-p)
(error "Invalid grammar specified!"))
- (let ((parsing-table)
- (parser-generator-ll--generate-parsing-table
- (parser-generator-ll--generate-tables)))
- ;; TODO Generate hash-based parsing table here
+ (let ((list-parsing-table
+ (parser-generator-ll--generate-parsing-table
+ (parser-generator-ll--generate-tables)))
+ (hash-parsing-table (make-hash-table :test 'equal)))
+ (dolist (state-list list-parsing-table)
+ (let ((state-key (nth 0 state-list))
+ (state-look-aheads (nth 1 state-list))
+ (state-hash-table (make-hash-table :test 'equal)))
+ (dolist (state-look-ahead-list state-look-aheads)
+ (let ((state-look-ahead-string (nth 0 state-look-ahead-list))
+ (state-look-ahead-action (nth 1 state-look-ahead-list)))
+ (if (equal state-look-ahead-action 'reduce)
+ (let ((state-look-ahead-reduction
+ (nth 2 state-look-ahead-list))
+ (state-look-ahead-production-number
+ (nth 3 state-look-ahead-list)))
+ (puthash
+ state-look-ahead-string
+ (list
+ state-look-ahead-action
+ state-look-ahead-reduction
+ state-look-ahead-production-number)
+ state-hash-table))
+ (puthash
+ state-look-ahead-string
+ state-look-ahead-action
+ state-hash-table))))
+ (puthash
+ state-key
+ state-hash-table
+ hash-parsing-table)))
(setq
parser-generator-ll--parsing-table
- parsing-table))
+ hash-parsing-table))
(message "\n;; Completed generation of LL(k) parser-tables.\n"))
@@ -351,8 +378,9 @@
(list
parser-generator--eof-identifier
(list
- eof-look-ahead
- 'accept))
+ (list
+ eof-look-ahead
+ 'accept)))
parsing-table)
(let ((stack-item (nth 0 terminal-mutation)))
(when (and
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index 96bda89fe0..f2c6f0554d 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -186,7 +186,9 @@
)
(
$
- (($ $) accept)
+ (
+ (($ $) accept)
+ )
)
)
parser-tables)))
@@ -262,7 +264,9 @@
)
(
$
- (($ $) accept)
+ (
+ (($ $) accept)
+ )
)
)
parser-tables)))
@@ -285,7 +289,28 @@
"Test `parser-generator-ll-generate-parser-tables'."
(message "Started tests for (parser-generator-ll-generate-parser-tables)")
- ;; TODO Do testing of hash-table generation here
+ (parser-generator-set-eof-identifier '$)
+ (parser-generator-set-e-identifier 'e)
+ (parser-generator-set-look-ahead-number 2)
+ (parser-generator-set-grammar
+ '(
+ (S A)
+ (a b)
+ (
+ (S e (a b A))
+ (A (S a a) b)
+ )
+ S
+ )
+ )
+ (parser-generator-process-grammar)
+ (parser-generator-ll-generate-parser-tables)
+ (message "parser-generator-ll--parsing-table: %S"
parser-generator-ll--parsing-table)
+ (should
+ (equal
+ #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125
data (((S) ($)) #s(hash-table size 65 test equal rehash-size 1.5
rehash-threshold 0.8125 data ((a b) (reduce (a b ((A) ($))) 1) ($ $) (reduce
(e) 0))) ((A) ($)) #s(hash-table size 65 test equal rehash-size 1.5
rehash-threshold 0.8125 data ((b $) (reduce (b) 3) (a a) (reduce (((S) (a a)) a
a) 2) (a b) (reduce (((S) (a a)) a a) 2))) ((S) (a a)) #s(hash-table size 65
test equal rehash-size 1.5 rehash-threshold 0.81 [...]
+ parser-generator-ll--parsing-table))
+ ;; TODO Make this pass
(message "Passed tests for (parser-generator-ll-generate-parser-tables)"))
- [elpa] externals/parser-generator 52734d7160 16/82: Updated TODO items, (continued)
- [elpa] externals/parser-generator 52734d7160 16/82: Updated TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7b77032f71 22/82: Parser table generation for LLk now works for productions, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator fe728f8ad8 23/82: Passing test for generating LLk parser table, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 3b9977b51b 28/82: More work on LLk test, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator f23bc217d8 30/82: More wrestling, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 6e91a4b498 32/82: More work on helper functions, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 80dd506b65 33/82: More work on LL-helper functions, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator e6f9ac545f 37/82: Cleanup after byte-compilation, Christian Johansson, 2022/05/12
- [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 <=
- [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, 2022/05/12
- [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