[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 5c0bcd5f9a 36/82: Passing test for LL-
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 5c0bcd5f9a 36/82: Passing test for LL-table generation example 5.17 |
Date: |
Thu, 12 May 2022 13:28:15 -0400 (EDT) |
branch: externals/parser-generator
commit 5c0bcd5f9abbdd5d2b20bf514d58c4e0f6445c5c
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passing test for LL-table generation example 5.17
---
parser-generator-ll.el | 23 +++++++++++++++------
test/parser-generator-ll-test.el | 44 +++++++++++++++++-----------------------
2 files changed, 36 insertions(+), 31 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index e8c1ff7f7e..c31b8ec216 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -142,10 +142,15 @@
"\nnon-terminal sub-symbol: %S" sub-symbol))
(let* ((follow-set
(nthcdr (1+ sub-symbol-index) production-rhs))
- (merged-follow
- (append follow-set parent-follow))
+ (first-follow-set
+ (parser-generator--first follow-set nil t t))
+ (saturated-first-follow-set
+ (parser-generator-generate-terminal-saturated-first-set
+ first-follow-set))
(local-follow-set
- (parser-generator--first merged-follow nil t t))
+ (parser-generator--merge-max-terminal-sets
+ saturated-first-follow-set
+ (list parent-follow)))
(sub-symbol-rhss
(parser-generator--get-grammar-rhs
sub-symbol)))
@@ -156,13 +161,19 @@
(parser-generator--debug
(message
- "follow-set: %S for %S in %S"
+ "\nfollow-set: %S for %S in %S"
follow-set
(nth sub-symbol-index production-rhs)
production-rhs)
(message
- "merged-follow: %S"
- follow-set)
+ "first-follow-set: %S"
+ first-follow-set)
+ (message
+ "saturated-first-follow-set: %S"
+ saturated-first-follow-set)
+ (message
+ "parent-follow: %S"
+ parent-follow)
(message
"local-follow-set: %S"
local-follow-set)
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index 8a3068dcca..fd6f70c598 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -16,8 +16,6 @@
"Test `parser-generator-ll--generate-tables'."
(message "Started tests for (parser-generator-ll--generate-tables)")
- ;; Example 5.14 p. 350
- ;; Example 5.15 p. 351
(parser-generator-set-e-identifier 'e)
(parser-generator-set-look-ahead-number 2)
(parser-generator-set-grammar
@@ -63,9 +61,8 @@
)
)
))
- (message "Passed Example 5.14 p. 350")
+ (message "Passed Example 5.14 p. 350 and 5.15 p. 351")
- ;; TODO Pass Example 5.17 here
(parser-generator-set-eof-identifier '$)
(parser-generator-set-e-identifier 'e)
(parser-generator-set-look-ahead-number 2)
@@ -83,45 +80,44 @@
(parser-generator-process-grammar)
(let* ((tables
(parser-generator-ll--generate-tables)))
- (message "tables: %S" tables)
(should
(equal
tables
'(
(
- ((S) ($)) ;; T0
- (
- (($ $) (e) nil)
- ((a b) (a b A) $)
- )
- )
- (
- ((A) ($)) ;; T1
+ ((A) (a a)) ;; T3
(
- ((b $) (b) nil)
- ((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 a) (e) nil)
- ((a b) (a B a) ((a a)))
)
)
(
- ((A) (a a)) ;; T3
+ ((A) ($)) ;; T1
(
- ((a a) (S a a) ((a a)))
((a b) (S a a) ((a a)))
- ((b a) (b) nil)
+ ((a a) (S a a) ((a a)))
+ ((b $) (b) nil)
+ )
+ )
+ (
+ ((S) ($)) ;; T0
+ (
+ (($ $) (e) nil)
+ ((a b) (a b A) (($)))
)
)
)
))
)
- (message "Passed Example 5.17")
+ (message "Passed Example 5.17 p. 354")
(message "Passed tests for (parser-generator-ll--generate-tables)"))
@@ -163,8 +159,6 @@
(parser-tables
(parser-generator-ll--generate-parsing-table
tables)))
- ;; (message "parser-tables: %S" parser-tables)
-
(should
(equal
'(
@@ -212,9 +206,9 @@
)
)
parser-tables)))
- (message "Passed Example 5.16")
+ (message "Passed Example 5.16 p. 352")
- ;; TODO Test Example 5.17 here
+ ;; TODO Make this pass
(parser-generator-set-eof-identifier '$)
(parser-generator-set-e-identifier 'e)
(parser-generator-set-look-ahead-number 2)
@@ -248,7 +242,7 @@
)
)
parser-tables)))
- (message "Passed example 5.17")
+ (message "Passed example 5.17 p. 354")
(message "Passed tests for (parser-generator-ll--generate-parsing-table)"))
- [elpa] externals/parser-generator 1d1e4e4bf8 03/82: More work on LL(k) parser, (continued)
- [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
- [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 <=
- [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, 2022/05/12
- [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