[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 878b2900f2 05/82: Improved calculation
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 878b2900f2 05/82: Improved calculation of merged max terminals when one of the set is undefined |
Date: |
Thu, 12 May 2022 13:28:12 -0400 (EDT) |
branch: externals/parser-generator
commit 878b2900f29fecf79736b5c917a912b98747217b
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Improved calculation of merged max terminals when one of the set is
undefined
---
parser-generator-ll.el | 6 +++---
parser-generator.el | 56 +++++++++++++++++++++++++++++++++++++++++---------
2 files changed, 49 insertions(+), 13 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index bdbc0ca76a..219a1424ae 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -64,14 +64,14 @@
(not first-dot-look-ahead))
(setq
look-aheads
- (parser-generator--merge-max-terminals
+ (parser-generator--merge-max-terminal-sets
first-production
nil)))
((and first-dot-look-ahead
(not first-production))
(setq
look-aheads
- (parser-generator--merge-max-terminals
+ (parser-generator--merge-max-terminal-sets
nil
first-dot-look-ahead)))
((and first-production
@@ -80,7 +80,7 @@
look-aheads
(parser-generator--merge-max-terminal-sets
first-production
- first-dot-look-ahead))))
+ first-dot-look-ahead)))
(t (error
"Unexpected empty FIRST for production: %S and dot-look-ahead: %S"
production
diff --git a/parser-generator.el b/parser-generator.el
index 5cf4d9374f..c8cb20166a 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -1232,20 +1232,57 @@
(defun parser-generator--merge-max-terminal-sets (a b)
"Calculate list of all lists of L1 (+) L2 which is a merge of all terminals
in lists A combined with all terminals in lists B but with maximum length of
the set look-ahead number."
- (let ((a-length
- (length a))
+ (let ((a-length (length a))
(a-index 0)
- (b-length
- (length b))
+ (b-length (length b))
(merged-lists))
- (while (< a-index a-length)
- (let ((a-element (nth a-index a))
- (b-index 0))
+ (cond
+ ((and a b)
+ (while (< a-index a-length)
+ (let ((a-element (nth a-index a))
+ (b-index 0))
+ (while (< b-index b-length)
+ (let ((b-element (nth b-index b)))
+ (let ((merged-element
+ (parser-generator--merge-max-terminals
+ a-element
+ b-element)))
+ (if merged-lists
+ (setq
+ merged-lists
+ (append
+ merged-lists
+ (list merged-element)))
+ (setq
+ merged-lists
+ (list merged-element)))))
+ (setq b-index (1+ b-index)))
+ (setq a-index (1+ a-index)))))
+ (a
+ (while (< a-index a-length)
+ (let ((a-element (nth a-index a)))
+ (let ((merged-element
+ (parser-generator--merge-max-terminals
+ a-element
+ nil)))
+ (if merged-lists
+ (setq
+ merged-lists
+ (append
+ merged-lists
+ (list merged-element)))
+ (setq
+ merged-lists
+ (list merged-element)))))
+ (setq a-index (1+ a-index))))
+
+ (b
+ (let ((b-index 0))
(while (< b-index b-length)
(let ((b-element (nth b-index b)))
(let ((merged-element
(parser-generator--merge-max-terminals
- a-element
+ nil
b-element)))
(if merged-lists
(setq
@@ -1256,8 +1293,7 @@
(setq
merged-lists
(list merged-element)))))
- (setq b-index (1+ b-index)))
- (setq a-index (1+ a-index))))
+ (setq b-index (1+ b-index))))))
(setq
merged-lists
(parser-generator--distinct
- [elpa] externals/parser-generator updated (bf7229332f -> db91a5f203), Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 8c467b1bb1 07/82: Added another test for merge max terminal sets, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1199586dad 11/82: More work on generating LL item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 89105668e8 01/82: Started on LL(k) implementation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 878b2900f2 05/82: Improved calculation of merged max terminals when one of the set is undefined,
Christian Johansson <=
- [elpa] externals/parser-generator d397a1d48e 12/82: Improved variable naming, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator b09b22c0be 13/82: Passing test for LL(k) table Example 5.15, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7c10be74b8 06/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1d1e4e4bf8 03/82: More work on LL(k) parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4cb0a0b941 08/82: More work on LL table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 29bad0440f 09/82: More work on LL table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 87435188dd 15/82: Added function to set EOF-identifier, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator bab123bdda 17/82: Added reference to PHP 8.1, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator a2a629c16d 18/82: More work on data structure for LL-tables, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 542a50d9c1 20/82: Remove usage of a hash-table, Christian Johansson, 2022/05/12