[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 9d6ca94d0e 02/82: More work on LL(k) p
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 9d6ca94d0e 02/82: More work on LL(k) parser |
Date: |
Thu, 12 May 2022 13:28:12 -0400 (EDT) |
branch: externals/parser-generator
commit 9d6ca94d0e346d1bfc83205b5f881982698991fa
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on LL(k) parser
---
parser-generator-ll.el | 21 ++++++++++++++++++++-
test/parser-generator-ll-test.el | 17 +++++++++++++++++
2 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index c488f3af48..b120cce04a 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -45,7 +45,26 @@
;; Algorithm 5.2 p. 350
(defun parser-generator-ll--generate-tables ()
"Construction of LL(k)-tables. Output the set of LL(k) tables needed to
construct a parsing table for the grammar G."
- )
+
+ (let ((tables)
+ (distinct-table-p (make-hash-table :test 'equal))
+ ;; (1) Construct T_0, the LL(k) table associated with S {e}
+ (stack `((,(parser-generator--get-grammar-start) nil)))
+ (stack-item))
+ (while stack
+ (setq stack-item (pop stack))
+ (let* ((production (nth 0 stack-item))
+ (dot-look-ahead (nth 1 stack-item))
+ (first-production (parser-generator--first production nil t t))
+ (first-dot-look-ahead (parser-generator--first dot-look-ahead nil
t t))
+ (look-aheads (parser-generator--merge-max-terminals
first-production first-dot-look-ahead)))
+ (parser-generator--debug
+ (message "production: %S" production)
+ (message "dot-look-ahead: %S" dot-look-ahead)
+ (message "first-production: %S" first-production)
+ (message "first-dot-look-ahead: %S" first-dot-look-ahead)
+ (message "look-aheads: %S" look-aheads))))
+ tables))
;; TODO
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index 9c13d1fc95..11f4d773e7 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -23,6 +23,23 @@
"Test `parser-generator-ll--generate-parsing-table'."
(message "Started tests for (parser-generator-ll--generate-parsing-table)")
+ ;; Example 5.15 p. 351
+ (parser-generator-set-e-identifier 'e)
+ (parser-generator-set-look-ahead-number 2)
+ (parser-generator-set-grammar
+ '(
+ (S A)
+ (a b)
+ (
+ (S (a A a a) (b A b a))
+ (A b e)
+ )
+ S
+ )
+ )
+ (parser-generator-process-grammar)
+ (let ((tables (parser-generator-ll--generate-tables)))
+ (message "tables: %S" tables))
(message "Passed tests for (parser-generator-ll--generate-parsing-table)"))
- [elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item, (continued)
- [elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator af3740c46a 59/82: More refactoring, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 3d373f4dfa 60/82: Updated docs, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 020969094c 61/82: More refactoring, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 08ed55d35a 62/82: More work on k=1, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4f85cc5616 66/82: Passes byte-compilation tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7a265c9a84 67/82: LL-tests now runs on make tests command, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator a046c8584d 73/82: Started on documentation for LL(k) and LL(1), Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator f07939a440 76/82: Added example from Wikipedia and passing test, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 03a11c4369 14/82: Started test for LL(k) parser-table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 9d6ca94d0e 02/82: More work on LL(k) parser,
Christian Johansson <=
- [elpa] externals/parser-generator 6ce0dd9429 04/82: Improved function to calculate merge max terminal sets, Christian Johansson, 2022/05/12
- [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