[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 6733b57 415/434: Added feature to move
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 6733b57 415/434: Added feature to move lex-analyzer forward |
Date: |
Mon, 29 Nov 2021 16:00:27 -0500 (EST) |
branch: externals/parser-generator
commit 6733b57ec590df6f9980dea206e5210b2db26fa3
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added feature to move lex-analyzer forward
---
parser-generator-lex-analyzer.el | 82 ++++++++++++++++++++++++++--------------
1 file changed, 54 insertions(+), 28 deletions(-)
diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index 6da1c1f..9a9c981 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -33,6 +33,11 @@
nil
"Function used when resetting lex-analyzer.")
+(defvar-local
+ parser-generator-lex-analyzer--move-to-index-flag
+ nil
+ "Non-nil means move index to value.")
+
;; Functions
@@ -75,24 +80,32 @@
k)
(condition-case error
(progn
+ (setq-local
+ parser-generator-lex-analyzer--move-to-index-flag
+ nil)
(let ((next-look-ahead
(funcall
parser-generator-lex-analyzer--function
index)))
- (if next-look-ahead
+ (if parser-generator-lex-analyzer--move-to-index-flag
(progn
- (unless (listp (car next-look-ahead))
- (setq next-look-ahead (list next-look-ahead)))
- (dolist (next-look-ahead-item next-look-ahead)
- (when (<
- look-ahead-length
- k)
- (push next-look-ahead-item look-ahead)
- (setq look-ahead-length (1+ look-ahead-length))
- (setq index (cdr (cdr next-look-ahead-item))))))
- (push (list parser-generator--eof-identifier) look-ahead)
- (setq look-ahead-length (1+ look-ahead-length))
- (setq index (1+ index)))))
+ (setq
+ index
+ parser-generator-lex-analyzer--move-to-index-flag))
+ (if next-look-ahead
+ (progn
+ (unless (listp (car next-look-ahead))
+ (setq next-look-ahead (list next-look-ahead)))
+ (dolist (next-look-ahead-item next-look-ahead)
+ (when (<
+ look-ahead-length
+ k)
+ (push next-look-ahead-item look-ahead)
+ (setq look-ahead-length (1+ look-ahead-length))
+ (setq index (cdr (cdr next-look-ahead-item))))))
+ (push (list parser-generator--eof-identifier) look-ahead)
+ (setq look-ahead-length (1+ look-ahead-length))
+ (setq index (1+ index))))))
(error
(error
"Lex-analyze failed to peek next look-ahead at %s, error: %s"
@@ -108,28 +121,41 @@
(error "Missing lex-analyzer function!"))
(unless parser-generator--look-ahead-number
(error "Missing look-ahead-number!"))
- (let ((iteration 0)
+ (let ((continue t)
(tokens))
- (while (< iteration 1)
+ (while continue
(condition-case error
(progn
+ (setq-local
+ parser-generator-lex-analyzer--move-to-index-flag
+ nil)
(let ((token
(funcall
parser-generator-lex-analyzer--function
parser-generator-lex-analyzer--index)))
- (when token
- (unless (listp (car token))
- (setq token (list token)))
- (let ((first-token (car token)))
- (setq
- parser-generator-lex-analyzer--index
- (cdr (cdr first-token)))
- (push first-token tokens)))))
- (error (error
- "Lex-analyze failed to pop token at %s, error: %s"
- parser-generator-lex-analyzer--index
- (car (cdr error)))))
- (setq iteration (1+ iteration)))
+ (if parser-generator-lex-analyzer--move-to-index-flag
+ (progn
+ (setq-local
+ parser-generator-lex-analyzer--index
+ parser-generator-lex-analyzer--move-to-index-flag))
+ (when token
+ (unless (listp (car token))
+ (setq token (list token)))
+ (let ((first-token (car token)))
+ (setq
+ parser-generator-lex-analyzer--index
+ (cdr (cdr first-token)))
+ (push
+ first-token
+ tokens)))
+ (setq
+ continue
+ nil))))
+ (error
+ (error
+ "Lex-analyze failed to pop token at %s, error: %s"
+ parser-generator-lex-analyzer--index
+ (car (cdr error))))))
(nreverse tokens)))
(defun parser-generator-lex-analyzer--reset ()
- [elpa] externals/parser-generator aad1a17 404/434: Removed unnecessary logic in LR(0) action-table generation, (continued)
- [elpa] externals/parser-generator aad1a17 404/434: Removed unnecessary logic in LR(0) action-table generation, ELPA Syncer, 2021/11/29
- [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 <=
- [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, 2021/11/29
- [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