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

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

[elpa] externals/parser-generator e1315c3 246/434: Updated so E-FREE-FIR


From: ELPA Syncer
Subject: [elpa] externals/parser-generator e1315c3 246/434: Updated so E-FREE-FIRST(x) only uses E-FREE-FIRST on first symbol
Date: Mon, 29 Nov 2021 15:59:50 -0500 (EST)

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

    Updated so E-FREE-FIRST(x) only uses E-FREE-FIRST on first symbol
---
 parser-generator-lr.el        | 3 ---
 parser-generator.el           | 4 +++-
 test/parser-generator-test.el | 4 ++--
 3 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index a8c06e9..e2fffd3 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -25,7 +25,6 @@
 
 ;; Main Algorithms
 
-;; TODO Test this function with above 1 as look-ahead number
 (defun parser-generator-lr-generate-parser-tables ()
   "Generate parsing tables for grammar."
   (let ((table-lr-items
@@ -178,7 +177,6 @@
         (setq table-index (1+ table-index))))))
 
 ;; Algorithm 5.9, p. 389
-;; TODO Test this function with above 1 as look-ahead number
 (defun parser-generator-lr--generate-goto-tables ()
   "Calculate set of valid LR(k) items for grammar and a GOTO-table."
   (let ((lr-item-set-new-index 0)
@@ -598,7 +596,6 @@
            (message "γ: %s" γ))
           prefix-previous)))))
 
-;; TODO Make this function work with k > 1
 (defun parser-generator-lr--items-for-goto (previous-lr-item x)
   "Calculate LR-items for GOTO(PREVIOUS-LR-ITEM, X)."
   (let ((lr-new-item)
diff --git a/parser-generator.el b/parser-generator.el
index a834882..1babaad 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -1202,7 +1202,9 @@
                     (parser-generator--debug
                      (message "non-terminal symbol: %s" symbol))
                     (let ((symbol-f-set))
-                      (if disallow-e-first
+                      (if (and
+                           disallow-e-first
+                           (= first-length 0))
                           (setq symbol-f-set (nth 1 (gethash symbol 
parser-generator--f-free-sets)))
                         (setq symbol-f-set (nth 1 (gethash symbol 
parser-generator--f-sets))))
                       (parser-generator--debug
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index 7ee76af..4a880b4 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -439,12 +439,12 @@
     (parser-generator--e-free-first '(e a))))
   (should
    (equal
-    '((a e))
+    '((a a) (a e))
     (parser-generator--e-free-first '(a S))))
   (message "Passed empty-free-first 2 with trailing e-identifier 2")
   (should
    (equal
-    '((a b))
+    '((a a) (a e))
     (parser-generator--e-free-first '(a S b))))
   (message "Passed empty-free-first 2 with trailing e-identifier 1")
 



reply via email to

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