[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator ab4ce4d668 25/82: Tests for validating
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator ab4ce4d668 25/82: Tests for validating LLk grammar passing |
Date: |
Thu, 12 May 2022 13:28:14 -0400 (EDT) |
branch: externals/parser-generator
commit ab4ce4d6686ced9283e6667d5d4df28e40b83143
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Tests for validating LLk grammar passing
---
parser-generator-ll.el | 78 ++++++++++++++++++++++++++++++--------------------
1 file changed, 47 insertions(+), 31 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index 035c5d8508..58d6d10576 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -383,40 +383,56 @@
(parser-generator--first local-follow nil t t))
(sub-symbol-rhss
(parser-generator--get-grammar-rhs sub-symbol))
- (first-sub-symbol-rhss-sets
- (parser-generator--first sub-symbol-rhss nil t t))
- (merged-terminal-sets
- (parser-generator--merge-max-terminal-sets
- first-local-follow-sets
- first-sub-symbol-rhss-sets))
(distinct-item-p
(make-hash-table :test 'equal)))
- (dolist (merged-terminal-set merged-terminal-sets)
- (if (gethash
- merged-terminal-set
- distinct-item-p)
- (progn
- (setq valid nil)
- (message "merged-terminal-set: %S was not distinct"
merged-terminal-set))
- (puthash
- merged-terminal-set
- t
- distinct-item-p)))
- (let ((production
- (list
- (list sub-symbol)
- sub-symbol-rhss)))
- (unless
- (gethash
+ (parser-generator--debug
+ (message "\nsub-symbol: %S" sub-symbol)
+ (message "local-follow: %S" local-follow)
+ (message "first-local-follow-sets: %S"
first-local-follow-sets)
+ (message "sub-symbol-rhss: %S" sub-symbol-rhss))
+
+ ;; Calculate following terminals to see if there is a
conflict
+ (dolist (sub-symbol-rhs sub-symbol-rhss)
+ (let ((first-sub-symbol-rhs (parser-generator--first
sub-symbol-rhs nil t t)))
+ (let ((merged-terminal-sets
+ (parser-generator--merge-max-terminal-sets
+ first-sub-symbol-rhs
+ first-local-follow-sets)))
+ (parser-generator--debug
+ (message "sub-symbol-rhs: %S" sub-symbol-rhs)
+ (message "first-sub-symbol-rhs: %S"
first-sub-symbol-rhs)
+ (message "merged-terminal-sets: %S"
merged-terminal-sets))
+ (dolist (merged-terminal-set merged-terminal-sets)
+ (if (gethash
+ merged-terminal-set
+ distinct-item-p)
+ (progn
+ (setq valid nil)
+ (parser-generator--debug
+ (message
+ "merged-terminal-set: %S was not distinct"
+ merged-terminal-set)))
+ (puthash
+ merged-terminal-set
+ t
+ distinct-item-p)))))
+
+ ;; Add production to stack if it has not been added already
+ (let ((production
+ (list
+ (list sub-symbol)
+ sub-symbol-rhs)))
+ (unless
+ (gethash
+ production
+ distinct-production-p)
+ (push
production
- distinct-production-p)
- (push
- production
- stack)
- (puthash
- production
- t
- distinct-production-p))))))
+ stack)
+ (puthash
+ production
+ t
+ distinct-production-p)))))))
(setq
sub-symbol-index
(1+ sub-symbol-index))))))
- [elpa] externals/parser-generator b09b22c0be 13/82: Passing test for LL(k) table Example 5.15, (continued)
- [elpa] externals/parser-generator b09b22c0be 13/82: Passing test for LL(k) table Example 5.15, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7c10be74b8 06/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1d1e4e4bf8 03/82: More work on LL(k) parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4cb0a0b941 08/82: More work on LL table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 29bad0440f 09/82: More work on LL table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 87435188dd 15/82: Added function to set EOF-identifier, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator bab123bdda 17/82: Added reference to PHP 8.1, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator a2a629c16d 18/82: More work on data structure for LL-tables, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 542a50d9c1 20/82: Remove usage of a hash-table, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 221446d647 24/82: Started implementation of LLk validation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator ab4ce4d668 25/82: Tests for validating LLk grammar passing,
Christian Johansson <=
- [elpa] externals/parser-generator 04eb4d066c 27/82: Started on test for Example 5.17, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 5c0bcd5f9a 36/82: Passing test for LL-table generation example 5.17, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1290048b84 39/82: Improved documentation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 57c6fdda2f 43/82: Passing test for generating LL-parser hash-table, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator af3740c46a 59/82: More refactoring, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 3d373f4dfa 60/82: Updated docs, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 020969094c 61/82: More refactoring, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 08ed55d35a 62/82: More work on k=1, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4f85cc5616 66/82: Passes byte-compilation tests, Christian Johansson, 2022/05/12