[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 412fd2a 273/434: Passing generation of
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 412fd2a 273/434: Passing generation of GOTO-table for LR(0) grammar |
Date: |
Mon, 29 Nov 2021 15:59:56 -0500 (EST) |
branch: externals/parser-generator
commit 412fd2a3251b6813340dd431fc5e7d0ec2fe537b
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passing generation of GOTO-table for LR(0) grammar
---
parser-generator-lr.el | 3 +-
test/parser-generator-lr-test.el | 114 ++++++++++++++++-----------------------
2 files changed, 49 insertions(+), 68 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 64ae584..088a30a 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -192,7 +192,8 @@
((eq state 'error)
(unless found-action
(error
- "Failed to find any action in set %s"
+ "Failed to find any action in set %d: %s"
+ lr-item-index
lr-items))
(setq continue-loop nil)))
(setq lr-item-index (1+ lr-item-index)))))))
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index e664dea..39938cb 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -815,99 +815,79 @@
lr-items)))
(message "Passed LR-items k = 0")
- ;; TODO Replace all below
-
(parser-generator--debug
- (message "GOTO-tables k = 0: %s"
- (parser-generator--hash-to-list
- parser-generator-lr--goto-tables
- t)))
-
- ;; state | a | b | c | $ | S | R | T
- ;; -------+-----+-----+-----+-----+-----+-----+-----
- ;; 1 | 2 | | | | 10 | 8 |
- ;; -------+-----+-----+-----+-----+-----+-----+-----
- ;; 2 | | 3 | | | | |
- ;; -------+-----+-----+-----+-----+-----+-----+-----
- ;; 3 | 4 | | 5 | | | | 7
- ;; -------+-----+-----+-----+-----+-----+-----+-----
- ;; 4 | 4 | | 5 | | | | 6
- ;; -------+-----+-----+-----+-----+-----+-----+-----
- ;; 5 | | | | | | |
- ;; -------+-----+-----+-----+-----+-----+-----+-----
- ;; 6 | | | | | | |
- ;; -------+-----+-----+-----+-----+-----+-----+-----
- ;; 7 | | | | | | |
- ;; -------+-----+-----+-----+-----+-----+-----+-----
- ;; 8 | 2 | | | | 9 | 8 |
- ;; -------+-----+-----+-----+-----+-----+-----+-----
- ;; 9 | | | | | | |
- ;; -------+-----+-----+-----+-----+-----+-----+-----
+ (message
+ "GOTO-tables k = 0: %s"
+ (parser-generator--hash-to-list
+ parser-generator-lr--goto-tables
+ t)))
+
+ ;; * + 0 1 E B
+ ;; 0 1 2 3 4
+ ;; 1
+ ;; 2
+ ;; 3 5 6
+ ;; 4
+ ;; 5 1 2 7
+ ;; 6 1 2 8
+ ;; 7
+ ;; 8
(should
(equal
- '((0 ((R 1) (S 2) (a 3)))
- (1 ((R 1) (S 9) (a 3)))
+ '((0 (("0" 1) ("1" 2) (B 3) (E 4))) ;; 3-4
+ (1 nil)
(2 nil)
- (3 ((b 4)))
- (4 ((T 5) (a 6) (c 7)))
- (5 nil)
- (6 ((T 8) (a 6) (c 7)))
+ (3 nil)
+ (4 (("*" 5) ("+" 6))) ;; 5-6
+ (5 (("0" 1) ("1" 2) (B 8))) ;;7-8
+ (6 (("0" 1) ("1" 2) (B 7))) ;; 7-8
(7 nil)
(8 nil))
(parser-generator--hash-to-list
parser-generator-lr--goto-tables)))
(message "Passed GOTO-tables k = 2")
- ;; state | aa | ab | ac | a$ | ba | bb | bc | b$ | ca | cb | cc | c$ | $$
- ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
- ;; 1 | | S | | | | | | | | | | |
- ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
- ;; 2 | | | | | S | | S | S | | | | |
- ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
- ;; 3 | S | R | S | S | | | | | S | | | S | R
- ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
- ;; 4 | S | R | S | S | | | | | S | | | S | R
- ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
- ;; 5 | | R | | | | | | | | | | | R
- ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
- ;; 6 | | R | | | | | | | | | | | R
- ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
- ;; 7 | | R | | | | | | | | | | | R
- ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
- ;; 8 | | S | | | | | | | | | | | R
- ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
- ;; 9 | | | | | | | | | | | | | R
- ;; ------+----+----+----+----+----+----+----+----+----+----+----+----+----
- ;; 10 | | | | | | | | | | | | | A
+ ;; * + 0 1 $
+ ;; 0 s1 s2
+ ;; 1 r4 r4 r4 r4 r4
+ ;; 2 r5 r5 r5 r5 r5
+ ;; 3 s5 s6 acc
+ ;; 4 r3 r3 r3 r3 r3
+ ;; 5 s1 s2
+ ;; 6 s1 s2
+ ;; 7 r1 r1 r1 r1 r1
+ ;; 8 r2 r2 r2 r2 r2
(parser-generator-lr--generate-action-tables
lr-items)
(parser-generator--debug
(message
- "Action-tables k = 2: %s"
- (parser-generator--hash-to-list parser-generator-lr--action-tables)))
+ "Action-tables k = 0: %s"
+ (parser-generator--hash-to-list
+ parser-generator-lr--action-tables)))
(should
(equal
'(
- (0 (((a b) shift)))
- (1 ((($ $) reduce 2) ((a b) shift)))
- (2 ((($ $) accept)))
- (3 (((b $) shift) ((b c) shift) ((b a) shift)))
- (4 ((($ $) reduce 6) ((a b) reduce 6) ((a $) shift) ((a c) shift) ((a
a) shift) ((c a) shift) ((c $) shift)))
- (5 ((($ $) reduce 3) ((a b) reduce 3)))
- (6 ((($ $) reduce 6) ((a b) reduce 6) ((a $) shift) ((a c) shift) ((a
a) shift) ((c a) shift) ((c $) shift)))
- (7 ((($ $) reduce 5) ((a b) reduce 5)))
- (8 ((($ $) reduce 4) ((a b) reduce 4)))
- (9 ((($ $) reduce 1)))
+ (0 ((("0") shift) (("1") shift)))
+ (1 ((("*") reduce 3) (("+" reduce 3)) (("0") reduce 3) (("1") reduce
3) (($) reduce 3)))
+ (2 ((("*") reduce 6) (("+") reduce 6) (("0") reduce 6) (("1") reduce
6) (($) reduce 6)))
+ (3 ((("*") reduce 4) (("+") reduce 4) (("0") reduce 4) (("1") reduce
4) (($) accept)))
+ (4 ((("*") shift) (("+") shift) (($) accept)))
+ (5 ((("0") shift) (("1") shift)))
+ (6 ((("0") shift) (("1") shift)))
+ (7 ((("*") reduce 2) (("+") reduce 2) (("0") reduce 2) (("1") reduce
2) (($) reduce 1)))
+ (8 ((("*") reduce 1) (("+") reduce 1) (("0") reduce 1) (("1") reduce
1) (($) reduce 2)))
)
(parser-generator--hash-to-list
parser-generator-lr--action-tables)))
- (message "Passed ACTION-tables k = 2")
+ (message "Passed ACTION-tables k = 0")
)
+ ;; TODO Replace below with parse of k=0
+
(let ((buffer (generate-new-buffer "*a*")))
(switch-to-buffer buffer)
(kill-region (point-min) (point-max))
- [elpa] externals/parser-generator 80f99cf 241/434: Added failing unit test for lr-items set k=2, (continued)
- [elpa] externals/parser-generator 80f99cf 241/434: Added failing unit test for lr-items set k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5032a77 233/434: Fixed typo in Lex Analyzer error, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 07320b9 249/434: Updated test-case k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d49f74f 244/434: Added failing test for action-tables LRk parser k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fe05328 250/434: Passed unit tests for LRk parser k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d1f4682 248/434: Added a function that converts a FIRST-item to a look-ahead item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6845262 243/434: Passed GOTO-tables k=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3a0d4cd 255/434: Added translation test for LRk=2, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 03ca2e9 247/434: Look-ahead generation now supports EOF symbol, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3563720 266/434: Updated docs about lexical analysis, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 412fd2a 273/434: Passing generation of GOTO-table for LR(0) grammar,
ELPA Syncer <=
- [elpa] externals/parser-generator bc23604 274/434: Fixed look-ahead, first and e-free-first with k = 0, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1879cb0 271/434: Merge branch 'master' of git.cvj.se:/home/git/emacs-parser-generator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 16bb2d8 262/434: Added translation example LRk parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d173c1e 281/434: More work on exporting parser as code function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bd887ff 277/434: LR(0) Parser passing translation test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 852f969 283/434: Merge branch 'master' of git.cvj.se:/home/git/emacs-parser-generator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0d6d46d 294/434: Debugging incremental issue with exported translator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c4c68b2 302/434: Added progress-indicator to goto-table generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 586789d 308/434: Added cache to first calculation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 236a124 322/434: More work on resolving conflicts, ELPA Syncer, 2021/11/29