[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 8e462cf 378/434: Validated generated a
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 8e462cf 378/434: Validated generated action and goto-tables after precedence modification |
Date: |
Mon, 29 Nov 2021 16:00:20 -0500 (EST) |
branch: externals/parser-generator
commit 8e462cf976986db5226252f90e089da0971481f0
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Validated generated action and goto-tables after precedence modification
---
parser-generator-lr.el | 1 -
parser-generator.el | 2 +-
test/parser-generator-lr-test.el | 60 ++++++++++++++++++++++++++--------------
3 files changed, 41 insertions(+), 22 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index deedd45..6e4efb4 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -1801,7 +1801,6 @@
parser-generator-lex-analyzer--index
possible-look-aheads))
- ;; Maybe push both tokens here?
(push (car a-full) pushdown-list)
(push next-index pushdown-list)
(parser-generator-lex-analyzer--pop-token))))))
diff --git a/parser-generator.el b/parser-generator.el
index 3f7af8e..f92cb19 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -17,7 +17,7 @@
(defvar
parser-generator--debug
- t
+ nil
"Whether to print debug messages or not.")
(defvar
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 7fb3b84..61904bc 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -125,6 +125,7 @@
(setq
parser-generator--context-sensitive-attributes
'(%prec))
+ (parser-generator-set-look-ahead-number 1)
(parser-generator-set-grammar
'(
(Sp S A B)
@@ -136,7 +137,6 @@
(B (a b c %prec FIRST))
)
Sp))
- (parser-generator-set-look-ahead-number 1)
(parser-generator-process-grammar)
(should-error
(parser-generator-lr-generate-parser-tables))
@@ -183,33 +183,53 @@
b-precedence))
(t nil))))))
(parser-generator-lr-generate-parser-tables)
- ;; TODO Verify generated action-table here
(should
(equal
- '(1 2 3)
+ '((0 ((A 1) (B 2) (S 3) (a 4))) (1 ((c 7))) (2 nil) (3 nil) (4 ((b 5))) (5
((c 6))) (6 nil) (7 nil))
(parser-generator-lr--get-expanded-goto-tables)))
(should
(equal
'((0 (((a) shift))) (1 (((c) shift))) (2 ((($) reduce 2))) (3 ((($)
accept))) (4 (((b) shift))) (5 (((c) shift))) (6 ((($) reduce 4))) (7 ((($)
reduce 1))))
(parser-generator-lr--get-expanded-action-tables)))
- (message "Grammar not conflicting anymore")
- (error "Quit here")
+ (message "Grammar not conflicting anymore solution #1")
- (let ((table-lr-items
- (parser-generator-lr--generate-goto-tables)))
- (parser-generator-lr--generate-action-tables
- table-lr-items)
- (should
- (equal
- '((0 (((a) shift)))
- (1 (((c) shift)))
- (2 ((($) reduce 2)))
- (3 ((($) accept)))
- (4 (((b) shift)))
- (5 (((c) shift)))
- (6 ((($) reduce 4)))
- (7 ((($) reduce 1))))
- (parser-generator-lr--get-expanded-action-tables))))
+ ;; Make a new context-sensitive precedence that
+ ;; makes production 1 take precedence over production 4
+ (parser-generator-set-grammar
+ '(
+ (Sp S A B)
+ (a b c)
+ (
+ (Sp S)
+ (S (A c) B)
+ (A (a b %prec FIRST))
+ (B (a b c))
+ )
+ Sp))
+ (parser-generator-process-grammar)
+ (parser-generator-lr-generate-parser-tables)
+ (should
+ (equal
+ '((0 ((A 1) (B 2) (S 3) (a 4))) (1 ((c 7))) (2 nil) (3 nil) (4 ((b 5))) (5
((c 6))) (6 nil) (7 nil))
+ (parser-generator-lr--get-expanded-goto-tables)))
+ (should
+ (equal
+ '((0 (((a) shift))) (1 (((c) shift))) (2 ((($) reduce 2))) (3 ((($)
accept))) (4 (((b) shift))) (5 (((c) reduce 3))) (6 ((($) reduce 4))) (7 ((($)
reduce 1))))
+ (parser-generator-lr--get-expanded-action-tables)))
+ (message "Grammar not conflicting anymore solution #2")
+ ;; Parse "a b c"
+ ;; stack 0
+ ;; a -> action shift, goto 4
+ ;; stack a 4
+ ;; b -> action shift, goto 5
+ ;; stack a 4 b 5
+ ;; c -> reduce 3 -> pop 4 = A, goto 1
+ ;; stack 0 A 1
+ ;; c -> shift, goto 7
+ ;; stack 0 A 1 c 7
+ ;; $ -> reduce 1 -> pop 4 = S, goto 3
+ ;; stack 0 S 3
+ ;; $ -> accept
(message "Passed tests for (parser-generator-lr--generate-action-tables)"))
- [elpa] externals/parser-generator 43f3bd4 332/434: Fixed issue were non-terminals named as emacs-lisp functions was not accepted in grammar, (continued)
- [elpa] externals/parser-generator 43f3bd4 332/434: Fixed issue were non-terminals named as emacs-lisp functions was not accepted in grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8165c55 333/434: Conflicting grammar causes expected error, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator feaa9ff 338/434: Removed debug outputs, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator cf01b59 341/434: Fixed action-table generation with symbols with context-sensitive attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ae18945 353/434: Passing some calculations thanks to precedence / associativity, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fce14ea 355/434: Fixed bug with context-sensitive attributes being lost in LR-item generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2592481 361/434: Added TODO notes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 18b2f7b 365/434: Added context-sensitive precedence to infix example, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3170e8d 370/434: Context-sensitive precedence now avoids conflict-detection, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1be5fda 374/434: More work on support for conflict resolution, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8e462cf 378/434: Validated generated action and goto-tables after precedence modification,
ELPA Syncer <=
- [elpa] externals/parser-generator 6a7343e 383/434: Started on refactoring precedence table generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8013f69 384/434: Unit tests for testing precedence table generation now passes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e070522 396/434: Fixed broken link in documentation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5b95baf 401/434: More work on last feature, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4da88bf 406/434: Added another test for e-identifier in middle of rule, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 72796d0 408/434: Fixed bug with FIRST calculation with multiple symbols and e-identifiers, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 843bc57 398/434: Fixed invalid reference to parser-generator to fetch translation by production number, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7eb8cab 397/434: Small fixes to documentation about syntax analysis, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3a178ed 393/434: Exported LR parser now passes all tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c606043 389/434: Passing all tests with new precedence generation, ELPA Syncer, 2021/11/29