[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 9d0d9e5 027/434: Various debugging
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 9d0d9e5 027/434: Various debugging |
Date: |
Mon, 29 Nov 2021 15:59:01 -0500 (EST) |
branch: externals/parser-generator
commit 9d0d9e59d3096272fda58b125d4d04b9f0954c51
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Various debugging
---
parser.el | 52 +++++++++++++++++++++++++++++-----------------------
test/parser-test.el | 4 ++--
2 files changed, 31 insertions(+), 25 deletions(-)
diff --git a/parser.el b/parser.el
index 82a8358..1d2dab2 100644
--- a/parser.el
+++ b/parser.el
@@ -385,19 +385,27 @@
(let ((sub-terminal-index 0))
(dolist (sub-terminal-alternative-set
sub-terminal-sets)
(unless (= sub-terminal-index 0)
- (parser--debug (message
"Sub-terminal-alternative-set: %s" sub-terminal-alternative-set))
-
- ;; When we have a leading terminal and
sub-terminal set is empty, don't append it
- (when (and
- (< input-tape-index (1-
input-tape-length))
- (parser--valid-e-p (car
sub-terminal-alternative-set)))
- (setq sub-terminal-alternative-set
nil))
-
- (let ((sub-rhs-leading-terminals
(append leading-terminals sub-terminal-alternative-set)))
- (when (> (length
sub-rhs-leading-terminals) k)
- (setq sub-rhs-leading-terminals
(butlast sub-rhs-leading-terminals (- (length sub-rhs-leading-terminals) k))))
- (push `(,sub-rhs-leading-terminals
,all-leading-terminals-p ,(1+ input-tape-index)) stack)))
- (setq sub-terminal-index (1+
sub-terminal-index)))))
+ (let
((alternative-all-leading-terminals-p all-leading-terminals-p))
+ (parser--debug (message
"Sub-terminal-alternative-set: %s" sub-terminal-alternative-set))
+
+ ;; When sub-set only contains the e
symbol
+ (when (parser--valid-e-p (car
sub-terminal-alternative-set))
+ (parser--debug (message
"alternative-set is e symbol"))
+ (if disallow-e-first
+ (when (=
leading-terminals-count 0)
+ (setq
alternative-all-leading-terminals-p nil))
+ (when (or
+ (>
leading-terminals-count 0)
+ (< input-tape-index (1-
input-tape-length)))
+ (setq
sub-terminal-alternative-set nil)
+ (parser--debug (message
"Cleared sub-terminal-alternative-set")))))
+
+ (let ((sub-rhs-leading-terminals
(append leading-terminals sub-terminal-alternative-set)))
+ (parser--debug (message
"sub-rhs-leading-terminals: %s" sub-rhs-leading-terminals))
+ (when (> (length
sub-rhs-leading-terminals) k)
+ (setq sub-rhs-leading-terminals
(butlast sub-rhs-leading-terminals (- (length sub-rhs-leading-terminals) k))))
+ (push `(,sub-rhs-leading-terminals
,alternative-all-leading-terminals-p ,(1+ input-tape-index)) stack)))
+ (setq sub-terminal-index (1+
sub-terminal-index))))))
(parser--debug (message "Sub-terminal-set: %s"
sub-terminal-set))
(when (or
@@ -413,16 +421,14 @@
(setq all-leading-terminals-p nil)))
((equal rhs-type 'EMPTY)
- (if all-leading-terminals-p
- (if disallow-e-first
- (when (= leading-terminals-count 0)
- (setq all-leading-terminals-p nil))
- (when (and
- (= leading-terminals-count 0)
- (= input-tape-index (1- input-tape-length)))
- (setq leading-terminals (append leading-terminals
rhs-element))
- (setq leading-terminals-count (1+
leading-terminals-count))))
- (setq all-leading-terminals-p nil)))
+ (if disallow-e-first
+ (when (= leading-terminals-count 0)
+ (setq all-leading-terminals-p nil))
+ (when (and
+ (= leading-terminals-count 0)
+ (= input-tape-index (1- input-tape-length)))
+ (setq leading-terminals (append leading-terminals
rhs-element))
+ (setq leading-terminals-count (1+
leading-terminals-count)))))
((equal rhs-type 'TERMINAL)
(when all-leading-terminals-p
diff --git a/test/parser-test.el b/test/parser-test.el
index 1b27845..ac865e8 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -99,10 +99,10 @@
(message "Passed first 1 with complex grammar")
;; Example 5.28 p 382
- (parser--set-grammar '((S A B C) ("a" "b" "c") ((S A B) (A (B "a") e) (B (C
"b") C) (C "c" e)) S) 2)
+ (parser--set-grammar '((S A B C) (a b c) ((S (A B)) (A (B a) e) (B (C b) C)
(C c e)) S) 2)
(should
(equal
- '(("a") ("a" "b") ("a" "c") ("b") ("b" "a") ("c") ("c" "a") ("c" "b") (e))
+ '((a) (a c) (a b) (c a) (b a) (e) (c) (b) (c b))
(parser--first 'S)))
(message "Passed first 2 with complex grammar")
- [elpa] externals/parser-generator 42d92f1 014/434: More refactoring, (continued)
- [elpa] externals/parser-generator 42d92f1 014/434: More refactoring, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f648b52 020/434: Passing first unit test for FIRST after new data-structure refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a4bbb2f 026/434: Using PDA algorithm for FIRST when β is above 1 symbol, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e02d5d7 049/434: More work on calculating valid LR-items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0465b58 045/434: Improved commenting, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 85dde51 009/434: Added License and Travis build logos, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7bc3b70 017/434: Updated tests to use new data structure, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ab4b4db 021/434: Passed second FIRST test again, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 80cf73d 019/434: Passing tests for valid-grammar syntax, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bbbdea3 034/434: More improvement of documentation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9d0d9e5 027/434: Various debugging,
ELPA Syncer <=
- [elpa] externals/parser-generator e644708 018/434: Improved validation of grammar syntax, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fbb8cad 012/434: Starting a refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 563cbdd 023/434: Passed FIRST tests for semi-complex grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator dc78de7 025/434: Fixed page comment reference, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3e02435 028/434: Passing complex 2 test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8e99d0c 035/434: Fixed typo, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bc1ec12 036/434: Improved documentation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fe94691 048/434: Added hash-table for production RHS, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator afa7cb9 050/434: Added unit tests for retrieving grammar RHS, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 603df44 040/434: Added failing unit tests for (parser--sort-list), ELPA Syncer, 2021/11/29