[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator b73c4ed 072/434: Made e-symbol customi
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator b73c4ed 072/434: Made e-symbol customizable |
Date: |
Mon, 29 Nov 2021 15:59:11 -0500 (EST) |
branch: externals/parser-generator
commit b73c4ed6c88740f8e422ade0358dc4cd2cd78c6e
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Made e-symbol customizable
---
README.md | 2 +-
parser.el | 36 ++++++++++++++++++++----------------
2 files changed, 21 insertions(+), 17 deletions(-)
diff --git a/README.md b/README.md
index 8c514f2..aa3667c 100644
--- a/README.md
+++ b/README.md
@@ -49,7 +49,7 @@ Grammar consists of `N`, `T`, `P` and `S`, where `N` is
non-terminals, `T` is te
### e
-The symbol `'e` is hard-coded to be the empty symbol. The symbol is allowed in
some grammars and not in others.
+The symbol defined in variable `parser--e-identifier`, with default-value:
'e`, symbolizes the e symbol. The symbol is allowed in some grammars and not in
others.
### Non-terminals
diff --git a/parser.el b/parser.el
index a2f2b32..efa4dfe 100644
--- a/parser.el
+++ b/parser.el
@@ -14,29 +14,33 @@
nil
"Whether to print debug messages or not.")
-(defvar parser--table-non-terminal-p
+(defvar parser--e-identifier
+ 'e
+ "The identifier used for e-symbol. Default value 'e.")
+
+(defvar parser--grammar
nil
- "Hash-table of terminals for quick checking.")
+ "Current grammar used in parser.")
-(defvar parser--table-productions
+(defvar parser--f-sets
nil
- "Hash-table of productions for quick retrieving.")
+ "Generated F-sets for grammar.")
-(defvar parser--table-terminal-p
+(defvar parser--look-ahead-number
nil
- "Hash-table of non-terminals for quick checking.")
+ "Current look-ahead number used.")
-(defvar parser--grammar
+(defvar parser--table-non-terminal-p
nil
- "Current grammar used in parser.")
+ "Hash-table of terminals for quick checking.")
-(defvar parser--look-ahead-number
+(defvar parser--table-productions
nil
- "Current look-ahead number used.")
+ "Hash-table of productions for quick retrieving.")
-(defvar parser--f-sets
+(defvar parser--table-terminal-p
nil
- "Generated F-sets for grammar.")
+ "Hash-table of non-terminals for quick checking.")
;; Macros
@@ -167,7 +171,7 @@
(defun parser--valid-e-p (symbol)
"Return whether SYMBOL is the e identifier or not."
- (eq symbol 'e))
+ (eq symbol parser--e-identifier))
(defun parser--valid-grammar-p (G)
"Return if grammar G is valid or not. Grammar should contain list with 4
elements: non-terminals (N), terminals (T), productions (P), start (S) where N,
T and P are lists containing symbols and/or strings and S is a symbol or
string."
@@ -649,7 +653,7 @@
(let ((S)
(marked-sets (make-hash-table :test 'equal))
(symbols (append (parser--get-grammar-non-terminals)
(parser--get-grammar-terminals))))
- (let ((e-set (parser--lr-items-for-prefix 'e)))
+ (let ((e-set (parser--lr-items-for-prefix parser--e-identifier)))
;; TODO (1) Place V(e) in S. The set V(e) is initially unmarked.
)
(let ((found-unmarked t))
@@ -731,7 +735,7 @@
;; Set follow to nil if it's the e-identifier
(when (and
(= (length sub-rhs) 1)
- (eq (car sub-rhs) 'e))
+ (parser--valid-e-p (car sub-rhs)))
(setq sub-rhs nil))
(parser--debug
@@ -756,7 +760,7 @@
;; 2 Suppose that we have constructed V(X1,X2,...,Xi-1) we construct
V(X1,X2,...,Xi) as follows:
(unless (and
(= (length γ) 1)
- (eq (car γ) 'e))
+ (parser--valid-e-p (car γ)))
(let ((prefix-acc)
(prefix-previous (gethash '(e) lr-items)))
(dolist (prefix γ)
- [elpa] externals/parser-generator 603df44 040/434: Added failing unit tests for (parser--sort-list), (continued)
- [elpa] externals/parser-generator 603df44 040/434: Added failing unit tests for (parser--sort-list), ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator aadb31a 042/434: Updated README.md about FOLLOW-sets, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 586a38e 047/434: More work on algorithm 5.8, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 00ffcde 052/434: Added TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7e051d3 054/434: Algorithm 5.8 completed but not tested, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8e436df 056/434: More tweaking, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a60952c 057/434: More debugging of new algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ab0559d 060/434: More work, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d7f43d7 066/434: Sorting lr-items for prefix before return, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ca85ef4 068/434: Created TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b73c4ed 072/434: Made e-symbol customizable,
ELPA Syncer <=
- [elpa] externals/parser-generator 55bf9a9 073/434: Removed references to 'e, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 01df803 051/434: Improved documentation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3e1f2b6 058/434: Passed first for calculating valid LR-sets for viable prefix γ, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 51cab75 061/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f940be9 033/434: Added list of functions and usage examples, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b8d6476 038/434: Setting look-ahead-number clears cache storage, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2829d36 039/434: More work on FOLLOW, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0f8b422 043/434: Added another unit test for follow function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f8f5fe2 046/434: Started on function to calculate lk-items for a viable prefix, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8d0a93e 053/434: More work on algorithm, ELPA Syncer, 2021/11/29