[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator d36051c 103/434: Parser now creates ha
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator d36051c 103/434: Parser now creates hash table over productions to their production number |
Date: |
Mon, 29 Nov 2021 15:59:18 -0500 (EST) |
branch: externals/parser-generator
commit d36051c3f12d7dfaf05336668265cda89a10bda5
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Parser now creates hash table over productions to their production number
---
parser.el | 41 +++++++++++++++++++++++++++++++++--------
1 file changed, 33 insertions(+), 8 deletions(-)
diff --git a/parser.el b/parser.el
index 782b328..61df8fd 100644
--- a/parser.el
+++ b/parser.el
@@ -41,9 +41,13 @@
nil
"Hash-table of terminals for quick checking.")
-(defvar parser--table-productions
+(defvar parser--table-productions-rhs
nil
- "Hash-table of productions for quick retrieving.")
+ "Hash-table of productions RHS indexed by LHS for quick retrieving.")
+
+(defvar parser--table-productions-number
+ nil
+ "Hash-table indexed by production and value is production-number.")
(defvar parser--table-terminal-p
nil
@@ -141,6 +145,12 @@
(error "No grammar G defined!")))
(nth 0 G))
+(defun parser--get-grammar-production-number (production)
+ "If PRODUCTION exist, return it's number."
+ (unless parser--table-productions-number
+ (error "Table for production numbers is undefined!"))
+ (gethash production parser--table-productions-number))
+
(defun parser--get-grammar-productions (&optional G)
"Return productions of grammar G."
(unless G
@@ -151,9 +161,9 @@
(defun parser--get-grammar-rhs (lhs)
"Return right hand sides of LHS if there is any."
- (unless parser--table-productions
- (error "Table for productions is undefined!"))
- (gethash lhs parser--table-productions))
+ (unless parser--table-productions-rhs
+ (error "Table for productions RHS indexed by LHS is undefined!"))
+ (gethash lhs parser--table-productions-rhs))
(defun parser--get-grammar-start (&optional G)
"Return start of grammar G."
@@ -210,16 +220,31 @@
(puthash non-terminal t parser--table-non-terminal-p)))
(let ((productions (parser--get-grammar-productions)))
- (setq parser--table-productions (make-hash-table :test 'equal))
+ (setq parser--table-productions-rhs (make-hash-table :test 'equal))
(dolist (p productions)
(let ((lhs (car p))
(rhs (cdr p)))
- (let ((new-value (gethash lhs parser--table-productions)))
+ (let ((new-value (gethash lhs parser--table-productions-rhs)))
(dolist (rhs-element rhs)
(unless (listp rhs-element)
(setq rhs-element (list rhs-element)))
(push rhs-element new-value))
- (puthash lhs (nreverse new-value) parser--table-productions)))))
+ (puthash lhs (nreverse new-value) parser--table-productions-rhs))))
+
+ (setq parser--table-productions-number (make-hash-table :test 'equal))
+ (let ((production-index 1))
+ (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--debug
+ (message "Production %s: %s" production-index production))
+ (puthash production production-index
parser--table-productions-number)
+ (setq production-index (1+ production-index)))))))
(let ((look-aheads (parser--get-grammar-look-aheads)))
(setq parser--table-look-aheads-p (make-hash-table :test 'equal))
- [elpa] externals/parser-generator 882d725 105/434: Added TODO item, (continued)
- [elpa] externals/parser-generator 882d725 105/434: Added TODO item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 65d9ce2 106/434: Fixed a bug with E-FREE-FIRST function and function that validates a set of LR-items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 343fd72 104/434: Some parts of the action-table is generated, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b2a0d71 112/434: Passed test for action-table generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1c1177f 116/434: More work on LR-parser algorithm, ELPA Syncer, 2021/11/29
- [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 <=
- [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, 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