[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 922033f 198/434: Various stuff
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 922033f 198/434: Various stuff |
Date: |
Mon, 29 Nov 2021 15:59:40 -0500 (EST) |
branch: externals/parser-generator
commit 922033f02cc10e09f1c26ca87cf6c2b770c2f1c5
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Various stuff
---
parser-generator-lr.el | 11 ++++++---
test/parser-generator-lr-test.el | 53 ++++++++++++++++++++++------------------
2 files changed, 36 insertions(+), 28 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 3ee60f2..c6078bd 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -108,15 +108,18 @@
(error "Expecting production number for %s
from LR-item %s!" production lr-item))
(if (and
- (= production-number 0)
- (= (length u) 1)
- (parser-generator--valid-e-p (car u)))
+ (>= (length u) 1)
+ (parser-generator--valid-e-p
+ (nth (1- (length u)) u)))
(progn
;; Reduction by first production
;; of empty look-ahead means grammar
has been accepted
+ (message "accept of %s" u)
(push (list u 'accept) action-table)
(setq found-action t))
+ (message "no accept of %s, p: %s" u
production-number)
+
;; save reduction action in action table
(push (list u 'reduce production-number)
action-table)
(setq found-action t))))))))))
@@ -592,7 +595,7 @@
;; transfer to an error recovery routine).
(error (format
- "Invalid syntax! Expected one of %s found %s at index
%s"
+ "Invalid syntax! Expected one of %s found %s at index
%s "
possible-look-aheads
look-ahead
parser-generator-lex-analyzer--index)
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 75c5fef..56f717a 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -312,6 +312,8 @@
(parser-generator-set-look-ahead-number 1)
(parser-generator-process-grammar)
(parser-generator-lr-generate-parser-tables)
+ (message "goto-tables: %s" (parser-generator--hash-values-to-list
parser-generator-lr--goto-tables t))
+ (message "action-tables: %s" (parser-generator--hash-values-to-list
parser-generator-lr--action-tables t))
(setq
parser-generator-lex-analyzer--function
(lambda (index)
@@ -365,29 +367,32 @@
(parser-generator-lr-test--parse-incremental-vs-regular)
(message "Passed incremental-tests")
- ;; (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S
"b")) (S e)) Sp))
- ;; (parser-generator-set-look-ahead-number 2)
- ;; (parser-generator-process-grammar)
- ;; (let ((lr-items (parser-generator--hash-values-to-list
(parser-generator-lr-generate-parser-tables) t)))
- ;; (message "lr-items: %s" lr-items))
- ;; (setq
- ;; parser-generator-lex-analyzer--function
- ;; (lambda (index)
- ;; (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4)))
- ;; (string-length (length string))
- ;; (max-index index)
- ;; (tokens))
- ;; (while (and
- ;; (< (1- index) string-length)
- ;; (< (1- index) max-index))
- ;; (push (nth (1- index) string) tokens)
- ;; (setq index (1+ index)))
- ;; (nreverse tokens))))
- ;; (should
- ;; (equal
- ;; '(2 2 2 1 1)
- ;; (parser-generator-lr-parse)))
- ;; (message "Passed test with terminals as string with look-ahead-number 2")
+ (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b"))
(S e)) Sp))
+ (parser-generator-set-look-ahead-number 2)
+ (parser-generator-process-grammar)
+ (let ((lr-items (parser-generator--hash-values-to-list
(parser-generator-lr-generate-parser-tables) t)))
+ (message "lr-items: %s" lr-items)
+ (message "goto-tables: %s" (parser-generator--hash-values-to-list
parser-generator-lr--goto-tables t))
+ ;; TODO Should generate accept somewhere in this action-table
+ (message "action-tables: %s" (parser-generator--hash-values-to-list
parser-generator-lr--action-tables t)))
+ (setq
+ parser-generator-lex-analyzer--function
+ (lambda (index)
+ (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4)))
+ (string-length (length string))
+ (max-index index)
+ (tokens))
+ (while (and
+ (< (1- index) string-length)
+ (< (1- index) max-index))
+ (push (nth (1- index) string) tokens)
+ (setq index (1+ index)))
+ (nreverse tokens))))
+ (should
+ (equal
+ '(2 2 2 1 1)
+ (parser-generator-lr-parse)))
+ (message "Passed test with terminals as string with look-ahead-number 2")
(message "Passed tests for (parser-generator-lr--parse)"))
@@ -551,7 +556,7 @@
(defun parser-generator-lr-test ()
"Run test."
- (setq debug-on-error t)
+ ;; (setq debug-on-error t)
(parser-generator-lr-test--items-for-prefix)
(parser-generator-lr-test--items-valid-p)
- [elpa] externals/parser-generator 71e4eaa 145/434: Merge branch 'master' of git.cvj.se:/home/git/emacs-parser-generator, (continued)
- [elpa] externals/parser-generator 71e4eaa 145/434: Merge branch 'master' of git.cvj.se:/home/git/emacs-parser-generator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 173fe94 152/434: Preparations for translation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator be557ba 013/434: More work on refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fdbdff7 157/434: Added unit test for SDT in LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2d56ab0 160/434: Made separate functions for parse and translate in LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7cfdea2 165/434: Passing tests for incremental lexer, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b072fdd 175/434: Passed test for trailing e-identifier in EFF function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d435e50 122/434: Passing unit test for LR-parse, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a31da28 173/434: Updated Parser WIP items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator aaec6fa 189/434: Work on e-free first tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 922033f 198/434: Various stuff,
ELPA Syncer <=
- [elpa] externals/parser-generator fe10d4a 196/434: Passed tests for first 3 and first 4 of complex grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4cba5aa 203/434: Made new TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ef60d96 204/434: Added failing test for new function the generates grammar prefixes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 76e30f1 210/434: Sorted lines in test file, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e88abf0 117/434: More work on parser, added error-handling, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8328ab3 130/434: Added unit test for failing LRk Grammar Parse, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e89a740 138/434: Fixed bug with goto-table generation were tokens were strings, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c667e18 121/434: Work on shift action in parsing algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fab7e46 128/434: Fixed link to LRk grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bd06863 132/434: LR-parser now uses lex-analyzer for parsing, ELPA Syncer, 2021/11/29