[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 9eca533 410/434: Added test and implem
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 9eca533 410/434: Added test and implementation of calculating FIRST on multiple symbols were first is a non-terminal that expands into an e-identifier |
Date: |
Mon, 29 Nov 2021 16:00:26 -0500 (EST) |
branch: externals/parser-generator
commit 9eca533a5e414366a3a0c2fd44bd14e02582f36e
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added test and implementation of calculating FIRST on multiple symbols were
first is a non-terminal that expands into an e-identifier
---
parser-generator.el | 14 ++++++++++++++
test/parser-generator-test.el | 22 +++++++++++++++++++++-
2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/parser-generator.el b/parser-generator.el
index 37cd085..39d7e4b 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -1819,6 +1819,20 @@
(message
"main-symbol-f-set: %s"
(car symbol-f-set)))
+
+ ;; When there a symbols left on stack, make
alternative trail by skipping this symbol
+ (when (and
+ (parser-generator--valid-e-p (car (car
symbol-f-set)))
+ (not disallow-e-first)
+ (< input-tape-index (1- input-tape-length)))
+ (parser-generator--debug
+ (message
+ "Pushed alternative trail from non-terminal
expansion to stack since first symbol is the e-identifier: %s"
+ `(,(1+ input-tape-index) ,first-length
,first)))
+ (push
+ `(,(1+ input-tape-index) ,first-length ,first)
+ stack))
+
(setq
first-length
(+ first-length (length (car symbol-f-set))))
diff --git a/test/parser-generator-test.el b/test/parser-generator-test.el
index 980b3dc..f9f62e6 100644
--- a/test/parser-generator-test.el
+++ b/test/parser-generator-test.el
@@ -406,7 +406,27 @@
(equal
'((a) (c) (e))
(parser-generator--first '(e Sp))))
- (message "Passed first 11 with multiple items")
+ (message "Passed first 11 with multiple items with e-identifiers")
+
+ (parser-generator-set-grammar
+ '(
+ (Sp S A B C)
+ (a b c)
+ (
+ (Sp S)
+ (S (A C B))
+ (A a)
+ (B b)
+ (C e)
+ )
+ Sp))
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-process-grammar)
+ (should
+ (equal
+ (parser-generator--first '(C B))
+ '((b) (e))))
+ (message "Passed first 12 with multiple non-terminals and e-identifiers")
(message "Passed tests for (parser-generator--first)"))
- [elpa] externals/parser-generator 1b2a150 403/434: Added failing test for e-identifier in the middle of a rule, (continued)
- [elpa] externals/parser-generator 1b2a150 403/434: Added failing test for e-identifier in the middle of a rule, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator aa8a2bf 391/434: Work on the tests for the exported lr-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a8c092d 386/434: More work on precedence logic, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7a3e653 390/434: Added test for testing precedence of context-sensitive attribute, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5cb63eb 399/434: Improve error message of invalid global declaration, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f9223ea 400/434: Added a flag to use shift conflict resolution in cases were precedence is missing, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ded7700 387/434: Added more test for infix precedence, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9e8b89b 392/434: More work on exporting LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fc48311 409/434: Added test for FIRST calculation of multiple symbols and e-identifiers, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6733b57 415/434: Added feature to move lex-analyzer forward, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9eca533 410/434: Added test and implementation of calculating FIRST on multiple symbols were first is a non-terminal that expands into an e-identifier,
ELPA Syncer <=
- [elpa] externals/parser-generator ca21bcd 412/434: Shortened doc-string, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0a3f5f5 426/434: Added test for LR(1) PHP 8.0 match grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c9906f7 420/434: Move order of export of LR lex-analyzer, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a4c5d9f 429/434: Syntax-directed translations now have access to terminal data if any is available, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 428207c 432/434: Fixed bug with exported lr-parser with partial translation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fa43f05 301/434: More cpu optimizations, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a65b652 307/434: Added TODO-items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ac7207a 292/434: Passed translate test on exported parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 63bd6c0 423/434: LR-parser now has SDT as optional feature to speed up plain parses, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9c41807 424/434: Code-styling fix, ELPA Syncer, 2021/11/29