[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 2ceb6e5 23/96: Added potential support for in
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode 2ceb6e5 23/96: Added potential support for incremental parsing |
Date: |
Fri, 29 Oct 2021 11:14:37 -0400 (EDT) |
branch: externals/phps-mode
commit 2ceb6e5e0abc558301e5cdfad64af5ad04110cb1
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added potential support for incremental parsing
---
phps-mode-lex-analyzer.el | 103 ++++++++++++++++++++++++++++++++++------------
1 file changed, 76 insertions(+), 27 deletions(-)
diff --git a/phps-mode-lex-analyzer.el b/phps-mode-lex-analyzer.el
index e83cadd..337bd38 100644
--- a/phps-mode-lex-analyzer.el
+++ b/phps-mode-lex-analyzer.el
@@ -366,12 +366,16 @@
(defun phps-mode-lex-analyzer--parse-string
(
string
+ &optional
+ start
+ before-lexer-state
+ before-parser-state
)
- "Parse entire STRING."
+ "Parse entire STRING, optionally from START and with BEFORE-LEXER-STATE and
BEFORE-PARSER-STATE."
(interactive)
(require 'phps-mode-parser)
(require 'phps-mode-macros)
- (phps-mode-debug-message (message "Parse entire string run"))
+ (phps-mode-debug-message (message "(phps-mode-lex-analyzer--parse-string)"))
(let ((buffer (generate-new-buffer "*PHPs Lexer*")))
;; Create temporary buffer and run lexer in it
@@ -379,59 +383,104 @@
(with-current-buffer buffer
(insert string)
- ;; Reset lexer
+ ;; Setup lexer state
(setq-local
phps-mode-lexer--generated-tokens
- nil)
+ (if before-lexer-state
+ (nth 6 before-lexer-state)
+ nil))
(setq-local
phps-mode-lexer--state
- 'ST_INITIAL)
+ (if
+ before-lexer-state
+ (nth 1 before-lexer-state)
+ 'ST_INITIAL))
(setq-local
phps-mode-lexer--states
- nil)
+ (if before-lexer-state
+ (nth 0 before-lexer-state)
+ nil))
(setq-local
phps-mode-lexer--state-stack
- nil)
+ (if before-lexer-state
+ (nth 2 before-lexer-state)
+ nil))
(setq-local
phps-mode-lexer--heredoc-label
- nil)
+ (if before-lexer-state
+ (nth 3 before-lexer-state)
+ nil))
(setq-local
phps-mode-lexer--heredoc-label-stack
- nil)
+ (if before-lexer-state
+ (nth 4 before-lexer-state)
+ nil))
(setq
phps-mode-lexer--nest-location-stack
- nil)
+ (if before-lexer-state
+ (nth 4 before-lexer-state)
+ nil))
;; Catch errors to kill generated buffer
(let ((got-error t)
- (after-parser-parse))
+ (after-parser-state)
+ (before-parser-input-tape-index)
+ (before-parser-pushdown-list)
+ (before-parser-output)
+ (before-parser-translation)
+ (before-parser-translation-symbol-table-list)
+ (before-parser-history))
+
+ ;; Setup parser state
+ (when before-parser-state
+ (setq
+ before-parser-input-tape-index
+ (nth 0 before-parser-state))
+ (setq
+ before-parser-pushdown-list
+ (nth 1 before-parser-state))
+ (setq
+ before-parser-output
+ (nth 2 before-parser-state))
+ (setq
+ before-parser-translation
+ (nth 3 before-parser-state))
+ (setq
+ before-parser-translation-symbol-table-list
+ (nth 4 before-parser-state))
+ (setq
+ before-parser-history
+ (nth 5 before-parser-state)))
+
(unwind-protect
;; Run lexer or incremental lexer
(progn
(setq
- after-parser-parse
- (phps-mode-parser--parse))
+ after-parser-state
+ (phps-mode-parser--parse
+ before-parser-input-tape-index
+ before-parser-pushdown-list
+ before-parser-output
+ before-parser-translation
+ before-parser-translation-symbol-table-list
+ before-parser-history))
(setq got-error nil))
(when got-error
(kill-buffer)))
;; Copy lexer variables outside of buffer
- (let ((after-lexer-state phps-mode-lexer--state)
- (after-lexer-state-stack phps-mode-lexer--state-stack)
- (after-lexer-states phps-mode-lexer--states)
- (after-lexer-tokens (nreverse
phps-mode-lexer--generated-tokens))
- (after-lexer-heredoc-label phps-mode-lexer--heredoc-label)
- (after-lexer-heredoc-label-stack
phps-mode-lexer--heredoc-label-stack))
+ (let ((after-lexer-state
+ (list
+ phps-mode-lexer--state
+ phps-mode-lexer--state-stack
+ phps-mode-lexer--states
+ (nreverse phps-mode-lexer--generated-tokens)
+ phps-mode-lexer--heredoc-label
+ phps-mode-lexer--heredoc-label-stack)))
(kill-buffer)
(list
- (list
- after-lexer-tokens
- after-lexer-states
- after-lexer-state
- after-lexer-state-stack
- after-lexer-heredoc-label
- after-lexer-heredoc-label-stack)
- after-parser-parse)))))))
+ after-lexer-state
+ after-parser-state)))))))
(defun phps-mode-lex-analyzer--re2c-run (&optional force-synchronous)
"Run lexer, optionally FORCE-SYNCHRONOUS."
- [elpa] externals/phps-mode 376e690 15/96: Verified parse, (continued)
- [elpa] externals/phps-mode 376e690 15/96: Verified parse, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 2a9fb96 16/96: Added more tests for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 5c7c6f4 14/96: Parser passes basic lexing test, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 569505e 17/96: Added parser header and fixed byte-compilation for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 0d1843f 20/96: Started on parser integration, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode b714471 21/96: Added parse function in lex-analyzer and a test for it, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 50a014a 18/96: Using same lexer buffer for parser as the lex-analyzer is using, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode fb9905f 19/96: Added basic translation test, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode ec18c1e 22/96: Using parser to be able to implement incremental parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 1ee3094 28/96: More refactoring of the parsers lex-analyzer, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 2ceb6e5 23/96: Added potential support for incremental parsing,
Christian Johansson <=
- [elpa] externals/phps-mode e59d30e 26/96: Improvements in lex-analyzer for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode c62ec64 27/96: Started refactor of parsers lex-analyzer, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 9acda54 33/96: Added more passing tests for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode c470e37 38/96: More work on grammar parser generator, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 6b9c1a4 40/96: More pasing of grammar, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 3fa1b13 41/96: Translation of productions now working, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode b0ad204 44/96: Improved YACC grammar parser for productions, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 3824d7d 46/96: More work on automatically parsing YACC grammar, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 42c4e0e 48/96: Work on automatically generating terminals, non-terminals and start from YACC grammar, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode f56ba64 49/96: Terminals, non-terminals and start is automatically generated from YACC, Christian Johansson, 2021/10/29