[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 96f128f 155/434: More various stuff
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 96f128f 155/434: More various stuff |
Date: |
Mon, 29 Nov 2021 15:59:30 -0500 (EST) |
branch: externals/parser-generator
commit 96f128f0424884a22db9d57a4a874ce902ecf0c5
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More various stuff
---
parser-generator.el | 13 +++++++++----
test/parser-generator-lr-test.el | 26 ++++++++++++++++++++++++++
test/parser-generator-test.el | 23 ++++++++++++++++++++++-
3 files changed, 57 insertions(+), 5 deletions(-)
diff --git a/parser-generator.el b/parser-generator.el
index c151273..bb83211 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -245,7 +245,8 @@
(dolist (non-terminal non-terminals)
(puthash non-terminal t parser-generator--table-non-terminal-p)))
- (let ((productions (parser-generator--get-grammar-productions)))
+ (let ((productions (parser-generator--get-grammar-productions))
+ (purified-production))
(setq parser-generator--table-productions-rhs (make-hash-table :test
'equal))
(dolist (p productions)
(let ((lhs (car p))
@@ -254,7 +255,11 @@
(dolist (rhs-element rhs)
(unless (listp rhs-element)
(setq rhs-element (list rhs-element)))
- (push rhs-element new-value))
+ (let ((new-rhs))
+ (dolist (rhs-sub-element rhs-element)
+ (unless (functionp rhs-sub-element)
+ (push rhs-sub-element new-rhs)))
+ (push (nreverse new-rhs) new-value)))
(puthash lhs (nreverse new-value)
parser-generator--table-productions-rhs))))
(setq parser-generator--table-productions-number (make-hash-table :test
'equal))
@@ -309,7 +314,7 @@
(defun parser-generator-set-grammar (G)
"Set grammar G.."
(unless (parser-generator--valid-grammar-p G)
- (error "Invalid grammar G!"))
+ (error "Invalid grammar G! %s" G))
(setq parser-generator--grammar G))
(defun parser-generator-process-grammar ()
@@ -721,7 +726,7 @@
(unless (listp β)
(setq β (list β)))
(unless (parser-generator--valid-sentential-form-p β)
- (error "Invalid sentential form β!"))
+ (error "Invalid sentential form β! %s" β))
(let ((productions (parser-generator--get-grammar-productions))
(k parser-generator--look-ahead-number))
(let ((i-max (length productions)))
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 4b2e12e..5c18c97 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -319,6 +319,32 @@
(message "Passed test with terminals as string, invalid syntax")
+ ;; TODO Test translation with terminals as strings here
+
+ (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b"
(lambda(args) (nreverse args)))) (S e)) Sp))
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-process-grammar)
+ (parser-generator-lr-generate-parser-tables)
+
+ (setq
+ parser-generator-lex-analyzer--function
+ (lambda (index)
+ (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4) ("b" 4 . 5)))
+ (string-length (length string))
+ (max-index (1+ index))
+ (tokens))
+ (while (and
+ (< index string-length)
+ (< index max-index))
+ (push (nth index string) tokens)
+ (setq index (1+ index)))
+ (nreverse tokens))))
+
+ (should
+ (equal
+ '((2 2 2 1 1) nil)
+ (parser-generator-lr--parse)))
+
(message "Passed tests for (parser-generator-lr--parse)"))
(defun parser-generator-lr-test ()
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index c31587e..b8a82c3 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -377,6 +377,14 @@
t
(parser-generator--valid-grammar-p '((A B C) ("a" "b" "c") ((A "a"
(lambda(a) (message "Was here: %s" a)))) A))))
+ (should (equal
+ t
+ (parser-generator--valid-grammar-p '((A B C) ("a" "b" "c") ((A "a"
(lambda(a) (message "Was here: %s" a)) "b")) A))))
+
+ (should (equal
+ t
+ (parser-generator--valid-grammar-p '((A B C) ("a" "b" "c") ((A ("a"
(lambda(a) (message "Was here: %s" a))))) A))))
+
(message "Passed tests for (parser-generator--valid-grammar-p)"))
(defun parser-generator-test--valid-look-ahead-number-p ()
@@ -413,7 +421,20 @@
"Test `parser-generator--valid-sentential-form-p'."
(message "Starting tests for (parser-generator--valid-sentential-form-p)")
- ;; TODO Add tests for this
+ (parser-generator-set-grammar '((S A B) ("a" "b") ((S A) (A ("b" "a")) (B
"b" (lambda(b) (message "Was here: %s" b)))) S))
+ (parser-generator-process-grammar)
+
+ (should
+ (equal
+ nil
+ (parser-generator--valid-sentential-form-p
+ '(B "b" (lambda(b) (message "Was here: %s" b))))))
+
+ (should
+ (equal
+ t
+ (parser-generator--valid-sentential-form-p
+ '(B "b"))))
(message "Passed tests for (parser-generator--valid-sentential-form-p)"))
- [elpa] externals/parser-generator 5784f3f 126/434: Updated README with link to separate document for grammar, (continued)
- [elpa] externals/parser-generator 5784f3f 126/434: Updated README with link to separate document for grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator edfb7b4 131/434: Moved lex-analyzer to separate file, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8cda060 149/434: Made some functions public, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c1d3707 150/434: Passing test for including SDT in Produductions, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d36051c 103/434: Parser now creates hash table over productions to their production number, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e3d3007 109/434: Tweaking of action-table generation for canonical LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d7daabf 111/434: Fixed bug with e-free-first function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2be434c 114/434: Removed obsolete debug messages, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 89d128c 123/434: Added TODO item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 044f33a 151/434: Added more support for SDT, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 96f128f 155/434: More various stuff,
ELPA Syncer <=
- [elpa] externals/parser-generator a586a0e 162/434: More work on incremental parsing, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6d323a4 120/434: Implemented reduce action of LR-parser algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9b44827 124/434: Optimized LR-parser with hash-tables, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 01fc56f 127/434: Updated list of grammars, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4ef0430 133/434: White-space fix, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b2fd896 136/434: Added support for indexed tokens, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4746c64 137/434: Updated example for LR parse with indexed tokens, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 04a3ec5 141/434: Added separate file for syntax analysis, ELPA Syncer, 2021/11/29
- [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