[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator b2a0d71 112/434: Passed test for actio
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator b2a0d71 112/434: Passed test for action-table generation |
Date: |
Mon, 29 Nov 2021 15:59:20 -0500 (EST) |
branch: externals/parser-generator
commit b2a0d715e58bb0f6f1e0354558966ac4364f1a29
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passed test for action-table generation
---
parser-lr.el | 39 ++++++++++++++++++---------------------
1 file changed, 18 insertions(+), 21 deletions(-)
diff --git a/parser-lr.el b/parser-lr.el
index c234817..c79e4b3 100644
--- a/parser-lr.el
+++ b/parser-lr.el
@@ -43,7 +43,7 @@
"Generate action-tables for lr-grammar."
(unless parser-lr--action-tables
(let ((action-tables)
- (states '(shift reduce accept error))
+ (states '(shift reduce error))
(added-actions (make-hash-table :test 'equal)))
(dolist (goto-table parser-lr--goto-tables)
;; (message "goto-table: %s" goto-table)
@@ -76,8 +76,7 @@
;; (message "Cv: %s" Cv)
(when Cv
(let ((eff (parser--e-free-first Cv)))
- ;; TODO This does not return correct
- (message "EFF%s: %s" Cv eff)
+ ;; (message "EFF%s: %s" Cv eff)
(when eff
;; Go through eff-items and see if any item
is a valid look-ahead of grammar
;; in that case save in action table a shift
action here
@@ -122,24 +121,21 @@
(let ((production-number
(parser--get-grammar-production-number production)))
(unless production-number
(error "Expecting production number for
%s from LR-item %s!" production lr-item))
- ;; save reduction action in action table
- ;; (message "%s x %s -> 'reduce %s"
goto-index u production-number)
- (push (list u 'reduce production-number)
action-table)
- (setq found-action t)))))))))
- ((eq state 'accept)
- ;; TODO (c) f(e) = accept if [S' -> S ., e] is in a
- (when (and
- (nth 1 lr-item)
- (not (nth 2 lr-item))
- (eq (nth 3 lr-item) `(,parser--e-identifier)))
- (let ((hash-key (format "%s-%s-%s" goto-index state
parser--e-identifier)))
- (unless (gethash hash-key added-actions)
- (puthash hash-key t added-actions)
- ;; TODO Save in action table accept action for e
- (push (list (parser--e-identifier) 'accept)
action-table)
- (setq found-action t)
- (setq continue-loop nil)))))
+ (if (and
+ (= production-number 0)
+ (= (length u) 1)
+ (parser--valid-e-p (car u)))
+ (progn
+ ;; Reduction by first production
+ ;; of empty look-ahead means grammar
has been accepted
+ (push (list u 'accept) action-table)
+ (setq found-action t))
+
+ ;; save reduction action in action table
+ ;; (message "%s x %s -> 'reduce %s"
goto-index u production-number)
+ (push (list u 'reduce production-number)
action-table)
+ (setq found-action t))))))))))
((eq state 'error)
(unless found-action
@@ -151,7 +147,8 @@
)
(setq lr-item-index (1+ lr-item-index)))))))
- (message "%s actions %s" goto-index action-table)
+ (parser--debug
+ (message "%s actions %s" goto-index action-table))
(when action-table
(push (list goto-index (sort action-table 'parser--sort-list))
action-tables))))
(setq parser-lr--action-tables (sort (nreverse action-tables)
'parser--sort-list)))))
- [elpa] externals/parser-generator fe6037b 088/434: Generating valid GOTO-table, (continued)
- [elpa] externals/parser-generator fe6037b 088/434: Generating valid GOTO-table, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d5284b5 091/434: Added algorithm 5.10, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0304b78 092/434: Added a unit-test to invalidate LR-items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 69bfe16 006/434: Removed white-space, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1613e2e 096/434: Byte-compilation and unit tests working after refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 31c7ba7 098/434: Work on function that generates all possible look-aheads, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 53980d4 102/434: More documentation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 882d725 105/434: Added TODO item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 65d9ce2 106/434: Fixed a bug with E-FREE-FIRST function and function that validates a set of LR-items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 343fd72 104/434: Some parts of the action-table is generated, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b2a0d71 112/434: Passed test for action-table generation,
ELPA Syncer <=
- [elpa] externals/parser-generator 1c1177f 116/434: More work on LR-parser algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9db14cd 118/434: Added TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5784f3f 126/434: Updated README with link to separate document for grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator edfb7b4 131/434: Moved lex-analyzer to separate file, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8cda060 149/434: Made some functions public, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c1d3707 150/434: Passing test for including SDT in Produductions, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d36051c 103/434: Parser now creates hash table over productions to their production number, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e3d3007 109/434: Tweaking of action-table generation for canonical LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d7daabf 111/434: Fixed bug with e-free-first function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2be434c 114/434: Removed obsolete debug messages, ELPA Syncer, 2021/11/29