[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator b2f1d7a 236/434: More debugging k > 1
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator b2f1d7a 236/434: More debugging k > 1 |
Date: |
Mon, 29 Nov 2021 15:59:48 -0500 (EST) |
branch: externals/parser-generator
commit b2f1d7a3168be9e904bc5c5a5cc60aa73a806f70
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More debugging k > 1
---
parser-generator-lr.el | 118 +++++++++++++++++++++++++++----------------------
1 file changed, 66 insertions(+), 52 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 42c0858..275cc55 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -191,10 +191,7 @@
(parser-generator--get-grammar-non-terminals)
(parser-generator--get-grammar-terminals)))
(table-lr-items (make-hash-table :test 'equal))
- (e-list
- (parser-generator--generate-list-of-symbol
- parser-generator--look-ahead-number
- parser-generator--e-identifier)))
+ (e-list parser-generator--e-identifier))
(parser-generator--debug
(message "symbols: %s" symbols))
@@ -394,6 +391,8 @@
(setq γ (list γ)))
(unless (parser-generator--valid-sentential-form-p γ)
(error "Invalid sentential form γ!"))
+ (parser-generator--debug
+ (message "γ: %s" γ))
(let ((lr-item-exists (make-hash-table :test 'equal)))
@@ -403,9 +402,7 @@
(let ((lr-items-e)
(start-productions
(parser-generator--get-grammar-rhs start))
- (e-list (parser-generator--generate-list-of-symbol
- parser-generator--look-ahead-number
- parser-generator--e-identifier))
+ (e-list parser-generator--e-identifier)
(eof-list (parser-generator--generate-list-of-symbol
parser-generator--look-ahead-number
parser-generator--eof-identifier)))
@@ -442,54 +439,58 @@
(let ((rhs-first (car rhs)))
(parser-generator--debug
(message "rhs-first: %s" rhs-first))
- (when
+ (if
(parser-generator--valid-non-terminal-p
rhs-first)
- (let ((rhs-rest (append (cdr rhs) suffix)))
- (let ((rhs-rest-first
- (parser-generator--first rhs-rest)))
- (parser-generator--debug
- (message "rhs-rest-first: %s" rhs-rest-first))
- (unless rhs-rest-first
- (setq rhs-rest-first `(,eof-list)))
- (let ((sub-production
- (parser-generator--get-grammar-rhs
- rhs-first)))
+ (let ((rhs-rest (append (cdr rhs) suffix)))
+ (let ((rhs-rest-first
+ (parser-generator--first rhs-rest)))
(parser-generator--debug
- (message "sub-production: %s" sub-production))
-
- ;; For each production with B as LHS
- (dolist (sub-rhs sub-production)
+ (message "is non-terminal")
+ (message "rhs-rest: %s from %s + %s" rhs-rest
(cdr rhs) suffix)
+ (message "rhs-rest-first: %s" rhs-rest-first))
+ (unless rhs-rest-first
+ (setq rhs-rest-first `(,eof-list)))
+ (let ((sub-production
+ (parser-generator--get-grammar-rhs
+ rhs-first)))
+ (parser-generator--debug
+ (message "sub-production: %s" sub-production))
- ;; Set follow to nil if it's the e-identifier
- (when (and
- (>= (length sub-rhs) 1)
- (parser-generator--valid-e-p (car
sub-rhs)))
- (setq sub-rhs nil))
+ ;; For each production with B as LHS
+ (dolist (sub-rhs sub-production)
- (parser-generator--debug
- (message "sub-rhs: %s" sub-rhs))
+ ;; Set follow to nil if it's the e-identifier
+ (when (and
+ (= (length sub-rhs) 1)
+ (parser-generator--valid-e-p (car
sub-rhs)))
+ (setq sub-rhs nil))
- ;; For each x in FIRST(αu)
- (dolist (f rhs-rest-first)
(parser-generator--debug
- (message "f: %s" f))
+ (message "sub-rhs: %s" sub-rhs))
- ;; Add [B -> . β, x] to V(e), provided it is
not already there
- (unless
- (gethash
+ ;; For each x in FIRST(αu)
+ (dolist (f rhs-rest-first)
+ (parser-generator--debug
+ (message "f: %s" f))
+
+ ;; Add [B -> . β, x] to V(e), provided it is
not already there
+ (unless
+ (gethash
+ `(,e-list ,(list rhs-first) nil
,sub-rhs ,f)
+ lr-item-exists)
+ (puthash
`(,e-list ,(list rhs-first) nil ,sub-rhs
,f)
+ t
lr-item-exists)
- (puthash
- `(,e-list ,(list rhs-first) nil ,sub-rhs ,f)
- t
- lr-item-exists)
- (push
- `(,(list rhs-first) nil ,sub-rhs ,f)
- lr-items-e)
+ (push
+ `(,(list rhs-first) nil ,sub-rhs ,f)
+ lr-items-e)
- ;; (c) Repeat (b) until no more items can be
added to V(e)
- (setq found-new t))))))))))))))
+ ;; (c) Repeat (b) until no more items can
be added to V(e)
+ (setq found-new t)))))))
+ (parser-generator--debug
+ (message "is not non-terminal")))))))))
(parser-generator--debug
(message "V(e) = %s" lr-items-e))
@@ -507,7 +508,7 @@
(γ-index 0))
(unless
(and
- (>= γ-length 1)
+ (= γ-length 1)
(parser-generator--valid-e-p (car γ)))
(while (and
@@ -531,7 +532,9 @@
(message "prefix-previous: %s" prefix-previous)
(message "lr-new-item: %s" lr-new-item))
- (setq prefix-previous lr-new-item)))))
+ (setq
+ prefix-previous
+ lr-new-item)))))
(parser-generator--debug
(message "γ: %s" γ))
@@ -560,18 +563,23 @@
(parser-generator--debug
(message "lr-item: %s" lr-item)
+ (message "lr-item-prefix: %s" lr-item-prefix)
(message "lr-item-suffix: %s" lr-item-suffix)
(message "lr-item-suffix-first: %s" lr-item-suffix-first)
- (message "lr-item-suffix-rest: %s" lr-item-suffix-rest))
+ (message "lr-item-suffix-rest: %s" lr-item-suffix-rest)
+ (message "lr-item-look-ahead: %s" lr-item-look-ahead))
;; (a) If [A -> a . XiB, u] is in V(X1,...,Xi-1)
- (when (equal
- lr-item-suffix-first
- x)
+ (when
+ (equal
+ lr-item-suffix-first
+ x)
;; Add [A -> aXi . B, u] to V(X1,...,Xi)
(let ((combined-prefix
- (append lr-item-prefix (list x))))
+ (append
+ lr-item-prefix
+ (list x))))
(parser-generator--debug
(message
"lr-new-item-1: %s"
@@ -608,7 +616,13 @@
lr-item-suffix-rest)))
(unless lr-item-suffix-rest-first
(setq lr-item-suffix-rest-first (list nil)))
- (let ((sub-production
+
+ ;; TODO Verify this
+ (parser-generator--debug
+ (message
+ "lr-item-suffix-rest-first: %s"
+ lr-item-suffix-rest-first))
+ (let ((sub-production
(parser-generator--get-grammar-rhs
lr-item-suffix-first)))
- [elpa] externals/parser-generator 1e0418d 295/434: Incremental parse and translate of exported parser passes tests, (continued)
- [elpa] externals/parser-generator 1e0418d 295/434: Incremental parse and translate of exported parser passes tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7584880 298/434: Added failing unit test for calculating FIRST in grammar with cycles, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f338734 303/434: Improved output of progress, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 98c9d94 213/434: Debugging parse with look-ahead > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2b0d5b8 215/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 640feed 216/434: Passing all tests for canonical LRk Parser with k = 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e5aa179 218/434: Some fixes for LRk parser k > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2a9a23e 219/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ddd5967 221/434: Passed test for nested translations, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bc817d1 224/434: Passing all tests for k=1 again, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b2f1d7a 236/434: More debugging k > 1,
ELPA Syncer <=
- [elpa] externals/parser-generator 16f6586 242/434: Fixed bug in lr-item generation were look-ahead was disregarded, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 36701c0 238/434: Optimized closure algorithm to only use possible next-symbols instead of iterating all symbols, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3e096f7 258/434: Improved translation handling for each production, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 96cd5de 259/434: Improved validation of grammar structure, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bbdbd18 269/434: Started on test for LR Parse k=0, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 56363c1 263/434: Fixed last TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 175a579 275/434: Passed test for generation action-table LR(0) grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ecbbf21 290/434: Added test for exported translator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator cecf8fd 287/434: More TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 688e685 291/434: Lex-analyzer index is now buffer-local variable, ELPA Syncer, 2021/11/29