branch: externals/parser-generator
commit 53c09f755b637e07687ba99676c870e8a95cdc3e
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
Added hash-table for productions indexed by production-number
---
parser.el | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/parser.el b/parser.el
index 4e6ca78..dd7df4a 100644
--- a/parser.el
+++ b/parser.el
@@ -53,6 +53,10 @@
nil
"Hash-table indexed by production and value is production-number.")
+(defvar parser--table-productions-number-reverse
+ nil
+ "Hash-table indexed by production-number and value is production.")
+
(defvar parser--table-terminal-p
nil
"Hash-table of non-terminals for quick checking.")
@@ -153,9 +157,15 @@
(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!"))
+ (error "Table for production-numbers is undefined!"))
(gethash production parser--table-productions-number))
+(defun parser--get-grammar-production-by-number (production-number)
+ "If PRODUCTION-NUMBER exist, return it's production."
+ (unless parser--table-productions-number-reverse
+ (error "Table for reverse production-numbers is undefined!"))
+ (gethash production-number parser--table-productions-number-reverse))
+
(defun parser--get-grammar-productions (&optional G)
"Return productions of grammar G."
(unless G
@@ -237,6 +247,7 @@
(puthash lhs (nreverse new-value) parser--table-productions-rhs))))
(setq parser--table-productions-number (make-hash-table :test 'equal))
+ (setq parser--table-productions-number-reverse (make-hash-table :test
'equal))
(let ((production-index 0))
(dolist (p productions)
(let ((lhs (car p))
@@ -249,6 +260,7 @@
(parser--debug
(message "Production %s: %s" production-index production))
(puthash production production-index
parser--table-productions-number)
+ (puthash production-index production
parser--table-productions-number-reverse)
(setq production-index (1+ production-index)))))))
(let ((look-aheads (parser--get-grammar-look-aheads)))