[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item |
Date: |
Thu, 12 May 2022 13:28:17 -0400 (EDT) |
branch: externals/parser-generator
commit b37ba1eddffab043ef33c4be9473af1cb2f3760a
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Created TODO item
---
parser-generator-ll.el | 33 ++++++------
parser-generator.el | 2 +-
test/parser-generator-ll-test.el | 110 ++++++++++++++++++++-------------------
3 files changed, 74 insertions(+), 71 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index dec9f6b668..4046699a19 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -259,8 +259,7 @@
;; push a new item to stack with a local-follow
;; and a new left-hand-side
(let ((sub-symbol-index 0)
- (sub-symbol-length (length production-rhs))
- (found-first-non-terminal-p))
+ (sub-symbol-length (length production-rhs)))
(while (< sub-symbol-index sub-symbol-length)
(let ((sub-symbol (nth sub-symbol-index production-rhs)))
(when (parser-generator--valid-non-terminal-p
@@ -302,15 +301,14 @@
(message
"sub-symbol-rhss: %S"
sub-symbol-rhss))
+ (push
+ local-follow-set
+ sets)
+ (parser-generator--debug
+ (message
+ "pushed local follow set to sets: %S"
+ local-follow-set))
(dolist (local-follow local-follow-set)
- (unless found-first-non-terminal-p
- (parser-generator--debug
- (message
- "pushed local follow to set: %S"
- local-follow))
- (push
- local-follow
- sets))
(dolist (sub-symbol-rhs sub-symbol-rhss)
(let* ((new-stack-item
(list
@@ -330,15 +328,17 @@
distinct-stack-item-p)
(push
new-stack-item
- stack)))))
- (unless found-first-non-terminal-p
- (setq
- found-first-non-terminal-p
- t)))))
+ stack))))))))
(setq
sub-symbol-index
(1+ sub-symbol-index))))
+ (setq sets (reverse sets))
+ (parser-generator--debug
+ (message
+ "\nsets: %S"
+ sets))
+
;; Add all distinct combinations of left-hand-side,
;; look-aheads and parent-follow to tables list here
(when look-aheads
@@ -381,8 +381,7 @@
(puthash
table-hash-key
(list table)
- tables)
- )))))
+ tables))))))
(parser-generator--debug
(message "\nproduction-lhs: %S" production-lhs)
diff --git a/parser-generator.el b/parser-generator.el
index 7ee5f722d6..e0b8500766 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -45,7 +45,7 @@
(defvar
parser-generator--debug
- nil
+ t
"Whether to print debug messages or not.")
(defvar
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index c06e25a076..2c566be67b 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -31,6 +31,7 @@
)
(parser-generator-process-grammar)
(let ((tables (parser-generator-ll--generate-tables)))
+ ;; (message "tables: %S" tables)
(should
(equal
tables
@@ -52,9 +53,9 @@
(
((S) ($)) ;; T0
(
- ((a b) (a A a a) ((a a)))
- ((a a) (a A a a) ((a a)))
- ((b b) (b A b a) ((b a)))
+ ((a b) (a A a a) (((a a))))
+ ((a a) (a A a a) (((a a))))
+ ((b b) (b A b a) (((b a))))
)
)
)
@@ -79,6 +80,7 @@
(parser-generator-process-grammar)
(let* ((tables
(parser-generator-ll--generate-tables)))
+ ;; (message "tables: %S" tables)
(should
(equal
tables
@@ -86,23 +88,23 @@
(
((A) (a a)) ;; T3
(
- ((a b) (S a a) ((a a)))
- ((a a) (S a a) ((a a)))
+ ((a b) (S a a) (((a a))))
+ ((a a) (S a a) (((a a))))
((b a) (b) nil)
)
)
(
((S) (a a)) ;; T2
(
- ((a b) (a b A) ((a a)))
+ ((a b) (a b A) (((a a))))
((a a) (e) nil)
)
)
(
((A) ($)) ;; T1
(
- ((a b) (S a a) ((a a)))
- ((a a) (S a a) ((a a)))
+ ((a b) (S a a) (((a a))))
+ ((a a) (S a a) (((a a))))
((b $) (b) nil)
)
)
@@ -110,7 +112,7 @@
((S) ($)) ;; T0
(
(($ $) (e) nil)
- ((a b) (a b A) (($)))
+ ((a b) (a b A) ((($))))
)
)
)
@@ -144,20 +146,20 @@
((A) (a))
(
((a) (a) nil)
- ((b) (b S A) ((b) (a)))
+ ((b) (b S A) (((a) (b)) ((a))))
)
)
(
((S) (a))
(
- ((a) (a A S) ((b) (a)))
+ ((a) (a A S) (((a) (b)) ((a))))
((b) (b) nil)
)
)
(
((S) (b))
(
- ((a) (a A S) ((b) (a)))
+ ((a) (a A S) (((a) (b)) ((b))))
((b) (b) nil)
)
)
@@ -165,20 +167,19 @@
((A) (b))
(
((a) (a) nil)
- ((b) (b S A) ((b) (a)))
+ ((b) (b S A) (((a) (b)) ((b))))
)
)
(
((S) ($))
(
- ((a) (a A S) ((b) (a)))
+ ((a) (a A S) (((a) (b)) (($))))
((b) (b) nil)
)
)
)
- )
)
- )
+ ))
(message "Passed Example 5.5 p. 340")
(parser-generator-set-eof-identifier '$)
@@ -203,59 +204,62 @@
(message "tables: %S" tables)
(should
(equal
- '(
+ '
+ (
+ (
+ ((E2) (")"))
(
- ((E2) (")"))
- (
- ((")") (e) nil)
- (("+") ("+" T E2) (("+")))
- )
+ ((")") (e) nil)
+ (("+") ("+" T E2) ((("+") (")")) ((")"))))
)
+ )
+ (
+ ((E) (")"))
(
- ((E) (")"))
- (
- (("(") (T E2) (("+")))
- (("a") (T E2) (("+")))
- )
+ (("(") (T E2) ((("+") (")")) ((")"))))
+ (("a") (T E2) ((("+") (")")) ((")"))))
)
+ )
+ (
+ ((F) ("*"))
(
- ((F) ("*"))
- (
- (("(") ("(" E ")") ((")")))
- (("a") ("a") nil)
- )
+ (("(") ("(" E ")") (((")"))))
+ (("a") ("a") nil)
)
+ )
+ (
+ ((T2) ("+"))
(
- ((T2) ("+"))
- (
- (("*") ("*" F T2) (("*")))
- (("+") (e) nil)
- )
+ (("*") ("*" F T2) ((("*") ("+")) (("+"))))
+ (("+") (e) nil)
)
+ )
+ (
+ ((T) ("+"))
(
- ((T) ("+"))
- (
- (("(") (F T2) (("*")))
- (("a") (F T2) (("*")))
- )
+ (("(") (F T2) ((("*") ("+")) (("+"))))
+ (("a") (F T2) ((("*") ("+")) (("+"))))
)
+ )
+ (
+ ((E2) ($))
(
- ((E2) ($))
- (
- (($) (e) nil)
- (("+") ("+" T E2) (("+")))
- )
+ (($) (e) nil)
+ (("+") ("+" T E2) ((("+") ($)) (($))))
)
+ )
+ (
+ ((E) ($))
(
- ((E) ($))
- (
- (("(") (T E2) (("+")))
- (("a") (T E2) (("+")))
- )
+ (("(") (T E2) ((("+") ($)) (($))))
+ (("a") (T E2) ((("+") ($)) (($))))
)
)
+ )
tables)))
- ;; TODO Verify above
+ ;; TODO Make above pass
+ ;; TODO There are issues calculating Y for a non-terminal
+ ;; were a non-terminal follows that has a alternative e-rule
(message "Passed Example 5.12 p. 346-347")
(message "Passed tests for (parser-generator-ll--generate-tables)"))
- [elpa] externals/parser-generator 87435188dd 15/82: Added function to set EOF-identifier, (continued)
- [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
- [elpa] externals/parser-generator 221446d647 24/82: Started implementation of LLk validation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator ab4ce4d668 25/82: Tests for validating LLk grammar passing, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 04eb4d066c 27/82: Started on test for Example 5.17, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 5c0bcd5f9a 36/82: Passing test for LL-table generation example 5.17, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1290048b84 39/82: Improved documentation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 57c6fdda2f 43/82: Passing test for generating LL-parser hash-table, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item,
Christian Johansson <=
- [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, 2022/05/12