[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 80dd506b65 33/82: More work on LL-help
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 80dd506b65 33/82: More work on LL-helper functions |
Date: |
Thu, 12 May 2022 13:28:15 -0400 (EDT) |
branch: externals/parser-generator
commit 80dd506b650acfd0f0258bc9378b404bae3ff650
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on LL-helper functions
---
parser-generator-ll.el | 40 ++++++++++++++++++++++++++++------------
parser-generator.el | 17 ++++++++++-------
2 files changed, 38 insertions(+), 19 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index 973571e575..a7acf6f73e 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -47,6 +47,7 @@
(let ((tables (make-hash-table :test 'equal))
(distinct-item-p (make-hash-table :test 'equal))
(stack)
+ (distinct-stack-item-p (make-hash-table :test 'equal))
(stack-item)
(k (max 1 parser-generator--look-ahead-number)))
@@ -54,13 +55,21 @@
(let* ((start (parser-generator--get-grammar-start))
(start-rhss (parser-generator--get-grammar-rhs start)))
(dolist (start-rhs start-rhss)
- (let* ((production (list (list start) start-rhs)))
+ (let* ((production
+ (list (list start) start-rhs))
+ (initial-stack-item
+ (list
+ (list start)
+ start-rhs
+ (list parser-generator--eof-identifier))))
+ (puthash
+ initial-stack-item
+ t
+ distinct-stack-item-p)
(push
- (list
- (list start)
- start-rhs
- (list parser-generator--eof-identifier))
+ initial-stack-item
stack))))
+
(setq stack (nreverse stack))
(parser-generator--debug
(message "stack: %S" stack))
@@ -171,13 +180,20 @@
(list sub-symbol)
sub-symbol-rhs
local-follow)))
- (parser-generator--debug
- (message
- "new-stack-item: %S"
- new-stack-item))
- (push
- new-stack-item
- stack)))))))
+ (unless (gethash
+ new-stack-item
+ distinct-stack-item-p)
+ (parser-generator--debug
+ (message
+ "new-stack-item: %S"
+ new-stack-item))
+ (puthash
+ new-stack-item
+ t
+ distinct-stack-item-p)
+ (push
+ new-stack-item
+ stack))))))))
(setq
sub-symbol-index
(1+ sub-symbol-index))))
diff --git a/parser-generator.el b/parser-generator.el
index e956ffc033..617d9f1088 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -2090,13 +2090,16 @@
(defun parser-generator-generate-terminal-saturated-first-set (first-set)
"Generated a set from FIRST-SET with items that does not end with the
e-identifier if there is alternative items that continues with terminals."
- (let* ((max-terminal-count
- (parser-generator-calculate-max-terminal-count
- first-set))
- (saturated-list
- (parser-generator-generate-sets-of-terminals
- first-set
- max-terminal-count)))
+ (let ((max-terminal-count
+ (parser-generator-calculate-max-terminal-count
+ first-set))
+ (saturated-list))
+ (when (> max-terminal-count 0)
+ (setq
+ saturated-list
+ (parser-generator-generate-sets-of-terminals
+ first-set
+ max-terminal-count)))
saturated-list))
(defun parser-generator-generate-sets-of-terminals (sets count)
- [elpa] externals/parser-generator f07939a440 76/82: Added example from Wikipedia and passing test, (continued)
- [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, 2022/05/12
- [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 <=
- [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, 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