[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 044f33a 151/434: Added more support fo
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 044f33a 151/434: Added more support for SDT |
Date: |
Mon, 29 Nov 2021 15:59:29 -0500 (EST) |
branch: externals/parser-generator
commit 044f33aaac833bf86fb5e0b90c2980f6d108fe83
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added more support for SDT
---
parser-generator.el | 35 ++++++++++++++++++++++++++++-------
test/parser-generator-test.el | 6 +++++-
2 files changed, 33 insertions(+), 8 deletions(-)
diff --git a/parser-generator.el b/parser-generator.el
index d06f568..27c522b 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -62,6 +62,10 @@
nil
"Hash-table of non-terminals for quick checking.")
+(defvar parser-generator--table-translations
+ nil
+ "Hash-table indexed by production-number and value is translation function.")
+
;; Macros
@@ -249,19 +253,36 @@
(setq parser-generator--table-productions-number (make-hash-table :test
'equal))
(setq parser-generator--table-productions-number-reverse (make-hash-table
:test 'equal))
+ (setq parser-generator--table-translations (make-hash-table :test 'equal))
(let ((production-index 0))
(dolist (p productions)
(let ((lhs (car p))
(rhs (cdr p))
- (production))
- (dolist (rhs-element rhs)
- (unless (listp rhs-element)
- (setq rhs-element (list rhs-element)))
- (setq production (list lhs rhs-element))
- (parser-generator--debug
- (message "Production %s: %s" production-index production))
+ (production)
+ (translation))
+ (let ((rhs-element-index 0)
+ (rhs-length (length rhs))
+ (rhs-element))
+ (while (< rhs-element-index rhs-length)
+ (setq rhs-element (nth rhs-element-index rhs))
+ (unless (listp rhs-element)
+ (setq rhs-element (list rhs-element)))
+
+ (if (and
+ (functionp rhs-element)
+ (= rhs-element-index (1- rhs-length)))
+ (progn
+ (setq translation rhs-element)
+ (parser-generator--debug
+ (message "Translation %s: %s" production-index
translation)))
+ (setq production (list lhs rhs-element))
+ (parser-generator--debug
+ (message "Production %s: %s" production-index production)))
+ (setq rhs-element-index (1+ rhs-element-index)))
(puthash production production-index
parser-generator--table-productions-number)
(puthash production-index production
parser-generator--table-productions-number-reverse)
+ (when translation
+ (puthash production-index translation
parser-generator--table-translations))
(setq production-index (1+ production-index)))))))
(let ((look-aheads (parser-generator--get-grammar-look-aheads)))
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index d9c02d0..c31587e 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -373,6 +373,10 @@
nil
(parser-generator--valid-grammar-p '((A B C) (a (b c) "c") (A ("a"
"b") (a b)) (B b) (C "c")))))
+ (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 ()
@@ -451,7 +455,7 @@
"Test `parser-generator--get-grammar-rhs'."
(message "Started tests for (parser-generator--get-grammar-rhs)")
- (parser-generator-set-grammar '((S A) ("a" "b") ((S A) (A ("b" "a"))) S))
+ (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
- [elpa] externals/parser-generator 9db14cd 118/434: Added TODO items, (continued)
- [elpa] externals/parser-generator 9db14cd 118/434: Added TODO items, ELPA Syncer, 2021/11/29
- [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 <=
- [elpa] externals/parser-generator 96f128f 155/434: More various stuff, ELPA Syncer, 2021/11/29
- [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