[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator be557ba 013/434: More work on refactor
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator be557ba 013/434: More work on refactor |
Date: |
Mon, 29 Nov 2021 15:58:58 -0500 (EST) |
branch: externals/parser-generator
commit be557ba810149c25e8451b2ffa04d984a9119f0c
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on refactor
---
parser.el | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/parser.el b/parser.el
index a217ce7..5c1092a 100644
--- a/parser.el
+++ b/parser.el
@@ -57,7 +57,7 @@
(push element new-elements)))
(nreverse new-elements)))
-(defun parser--get-grammar-nonterminals (&optional G)
+(defun parser--get-grammar-non-terminals (&optional G)
"Return non-terminals of grammar G."
(unless G
(if parser--grammar
@@ -102,6 +102,8 @@
(defun parser--non-terminal-p (symbol)
"Return whether SYMBOL is a non-terminal in grammar or not."
+ (unless parser--table-non-terminal-p
+ (error "Table for non-terminals is undefined!"))
(if (gethash symbol parser--table-non-terminal-p)
t
nil))
@@ -123,6 +125,8 @@
(defun parser--terminal-p (symbol)
"Return whether SYMBOL is a terminal in grammar or not."
+ (unless parser--table-terminal-p
+ (error "Table for terminals is undefined!"))
(if (gethash symbol parser--table-terminal-p)
t
nil))
@@ -156,10 +160,10 @@
;; Main Algorithms
-;; page 402
-(defun parser--empty-free-first (k production productions)
- "Calculate empty-free-first K tokens of PRODUCTION in PRODUCTIONS."
- (parser--first k production productions t))
+;; p. 381
+(defun parser--e-free-first (α)
+ "For sentential string Α, Calculate e-free-first k terminals in grammar."
+ (parser--first α t))
(defun parser--f-set (input-tape state stack)
"A deterministic push-down transducer (DPDT) for building F-sets from
INPUT-TAPE, STATE and STACK."
@@ -288,14 +292,13 @@
(push leading-terminals f-set))))))
f-set))
-;; page 357, Algorithm 5.5
-(defun parser--first (β G k &optional disallow-empty-first)
- "For string β, in grammar G, calculate first K terminals, optionally
DISALLOW-EMPTY-FIRST."
- (unless (parser--valid-grammar-p G)
- (error "Invalid grammar G!"))
- (unless (parser--valid-look-ahead-number-p k)
- (error "Invalid look-ahead number k!"))
- (let ((productions (parser--get-grammar-productions G)))
+;; Algorithm 5.5, p. 357
+(defun parser--first (β &optional disallow-e-first)
+ "For sentential-form Β, in grammar, calculate first k terminals, optionally
DISALLOW-E-FIRST."
+ (unless (parser--sentential-form-p β)
+ (error "Invalid sentential form β!"))
+ (let ((productions (parser--get-grammar-productions))
+ (k parser--look-ahead-number))
(let ((f-sets (make-hash-table :test 'equal))
(i 0)
(i-max (length productions)))
@@ -316,7 +319,7 @@
(dolist (rhs-p production-rhs)
(let ((rhs-string (symbol-name rhs-p)))
(let ((rhs-leading-terminals
- (parser--f-set rhs-string `(,k ,i ,f-sets
,disallow-empty-first) '(("" t 0)))))
+ (parser--f-set rhs-string `(,k ,i ,f-sets
,disallow-e-first) '(("" t 0)))))
(parser--debug
(message "Leading %d terminals at index %s (%s) -> %s =
%s" k i production-lhs rhs-string rhs-leading-terminals))
(when rhs-leading-terminals
@@ -340,7 +343,7 @@
;; TODO Iterate each symbol in β
(sort (gethash (symbol-name production) (gethash (1- i-max) f-sets))
'string<))))
-(defun parser--v-set (y G k)
+(defun parser--v-set (y)
"Calculate valid LRk-sets for the viable-prefix Y in grammar G with
look-ahead K."
(let ((v-set))
(unless (parser--valid-grammar-p G)
- [elpa] externals/parser-generator a586a0e 162/434: More work on incremental parsing, (continued)
- [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
- [elpa] externals/parser-generator be557ba 013/434: More work on refactor,
ELPA Syncer <=
- [elpa] externals/parser-generator fdbdff7 157/434: Added unit test for SDT in LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2d56ab0 160/434: Made separate functions for parse and translate in LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7cfdea2 165/434: Passing tests for incremental lexer, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b072fdd 175/434: Passed test for trailing e-identifier in EFF function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d435e50 122/434: Passing unit test for LR-parse, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a31da28 173/434: Updated Parser WIP items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator aaec6fa 189/434: Work on e-free first tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 922033f 198/434: Various stuff, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fe10d4a 196/434: Passed tests for first 3 and first 4 of complex grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4cba5aa 203/434: Made new TODO items, ELPA Syncer, 2021/11/29