emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/parser-generator d1f4682 248/434: Added a function that


From: ELPA Syncer
Subject: [elpa] externals/parser-generator d1f4682 248/434: Added a function that converts a FIRST-item to a look-ahead item
Date: Mon, 29 Nov 2021 15:59:51 -0500 (EST)

branch: externals/parser-generator
commit d1f46827a56fa1307fd4b2c435efef0b6262b628
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>

    Added a function that converts a FIRST-item to a look-ahead item
---
 parser-generator-lr.el | 13 ++++++++++---
 parser-generator.el    | 14 ++++++++++++++
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 1def311..7cc030e 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -95,15 +95,22 @@
                                     (while (and
                                             searching-match
                                             (< eff-index eff-length))
-                                      (setq eff-item (nth eff-index eff))
-                                      (if 
(parser-generator--valid-look-ahead-p eff-item)
+                                      (setq
+                                       eff-item
+                                       (parser-generator--first-to-lookahead
+                                        (nth eff-index eff)))
+                                      (if
+                                          (parser-generator--valid-look-ahead-p
+                                           eff-item)
                                           (let ((hash-key
                                                  (format "%s-%s-%s" goto-index 
state eff-item)))
                                             (unless (gethash hash-key 
added-actions)
                                               (puthash hash-key t 
added-actions)
                                               (setq searching-match nil)))
                                         (parser-generator--debug
-                                         (message "Not valid look-ahead: %s" 
eff-item)))
+                                         (message
+                                          "Not valid look-ahead: %s"
+                                          eff-item)))
                                       (setq eff-index (1+ eff-index)))
 
                                     (unless searching-match
diff --git a/parser-generator.el b/parser-generator.el
index 296cc0a..9ab4716 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -827,6 +827,20 @@
     (parser-generator--debug
      (message "Generated F-sets"))))
 
+(defun parser-generator--first-to-lookahead (first)
+  "Replace all e-identifiers with eof-identifiers in FIRST."
+  (let ((look-ahead))
+    (dolist (symbol first)
+      (if (parser-generator--valid-e-p
+           symbol)
+          (push
+           parser-generator--eof-identifier
+           look-ahead)
+        (push
+         symbol
+         look-ahead)))
+    (nreverse look-ahead)))
+
 (defun parser-generator--merge-max-terminals (a b k)
   "Merge terminals from A and B to a maximum length of K."
   (let ((merged)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]