[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 3f5c008 09/96: Optimization for lexer to only
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode 3f5c008 09/96: Optimization for lexer to only need to execute once per index |
Date: |
Fri, 29 Oct 2021 11:14:30 -0400 (EDT) |
branch: externals/phps-mode
commit 3f5c008b6405633f58f23caac9c050473a058fb2
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Optimization for lexer to only need to execute once per index
---
phps-mode-automation-grammar.el | 65 +++++++++++++++++++++++++++++++++++------
phps-mode-lexer.el | 6 ++++
phps-mode-parser.el | 12 ++++++--
3 files changed, 71 insertions(+), 12 deletions(-)
diff --git a/phps-mode-automation-grammar.el b/phps-mode-automation-grammar.el
index 5881e8f..9c4631a 100644
--- a/phps-mode-automation-grammar.el
+++ b/phps-mode-automation-grammar.el
@@ -1450,17 +1450,64 @@
(defconst
phps-mode-automation-grammar--lex-analyzer-function
- (lambda(index)
- (with-current-buffer "*phps-mode-lex-analyzer*"
+ (lambda (index)
+ (save-current-buffer
+ (set-buffer "*phps-mode-lex-analyzer*")
(unless (= (point) index)
(goto-char index))
- (phps-mode-lexer--re2c)
- (when
- (boundp
- 'phps-mode-lexer--generated-new-tokens)
- (car
- (nreverse
- phps-mode-lexer--generated-new-tokens)))))
+
+ (when (< index (point-max))
+
+ ;; Only lex if we have not lexed this position recently
+ (unless (and
+ phps-mode-lexer--generated-new-tokens-index
+ (=
+ phps-mode-lexer--generated-new-tokens-index
+ index))
+ (phps-mode-lexer--re2c))
+
+ (let ((first (car (nreverse phps-mode-lexer--generated-new-tokens))))
+
+ (cond
+
+ ;; Lexer has moved forward - lex again
+ ((and
+ (not first)
+ (not (equal index semantic-lex-end-point)))
+ (setq
+ phps-mode-parser-lex-analyzer--index
+ semantic-lex-end-point)
+ (setq
+ first
+ (funcall
+ phps-mode-parser-lex-analyzer--function
+ phps-mode-parser-lex-analyzer--index)))
+
+ ;; Skip open and close tag
+ ((or
+ (equal (car first) 'T_OPEN_TAG)
+ (equal (car first) 'T_CLOSE_TAG))
+ (setq
+ phps-mode-parser-lex-analyzer--index
+ (cdr (cdr first)))
+ (setq
+ first
+ (funcall
+ phps-mode-parser-lex-analyzer--function
+ phps-mode-parser-lex-analyzer--index)))
+
+ ;; Open tag with echo is replaced with echo
+ ((equal (car first) 'T_OPEN_TAG_WITH_ECHO)
+ (setf
+ (car first)
+ 'T_ECHO)
+ (setq
+ phps-mode-parser-lex-analyzer--index
+ (cdr (cdr first))))
+
+ )
+
+ first))))
"The custom lex-analyzer.")
(defconst
diff --git a/phps-mode-lexer.el b/phps-mode-lexer.el
index 46bbc73..cdd1c14 100644
--- a/phps-mode-lexer.el
+++ b/phps-mode-lexer.el
@@ -120,6 +120,9 @@
(defvar-local phps-mode-lexer--generated-new-tokens nil
"List of current newly generated tokens.")
+(defvar-local phps-mode-lexer--generated-new-tokens-index nil
+ "Index started at when generated new tokens.")
+
(defvar-local phps-mode-lexer--state nil
"Current state of lexer.")
@@ -473,6 +476,9 @@
(setq phps-mode-lexer--generated-new-tokens nil)
(setq phps-mode-lexer--restart-flag nil)
(let ((old-start (point)))
+ (setq
+ phps-mode-lexer--generated-new-tokens-index
+ old-start)
(phps-mode-debug-message
(let ((start (point))
(end (+ (point) 5))
diff --git a/phps-mode-parser.el b/phps-mode-parser.el
index 19f2430..58a1eb7 100644
--- a/phps-mode-parser.el
+++ b/phps-mode-parser.el
@@ -69,10 +69,16 @@
(goto-char index))
(when (< index (point-max))
- (phps-mode-lexer--re2c)
- (let ((first (car (nreverse phps-mode-lexer--generated-new-tokens))))
- (message "first: %S" first)
+ ;; Only lex if we have not lexed this position recently
+ (unless (and
+ phps-mode-lexer--generated-new-tokens-index
+ (=
+ phps-mode-lexer--generated-new-tokens-index
+ index))
+ (phps-mode-lexer--re2c))
+
+ (let ((first (car (nreverse phps-mode-lexer--generated-new-tokens))))
(cond
- [elpa] externals/phps-mode 3421b6a 01/96: Improved parser generator location, (continued)
- [elpa] externals/phps-mode 3421b6a 01/96: Improved parser generator location, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 60344ea 02/96: Improved recovery in automation by dumping generated data, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode f4c9f8b 04/96: Added generated parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode d2872f7 05/96: Started on parser test, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 7a0eecd 07/96: First test passing for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 2189d31 11/96: Fixes for lexer in parser to handle T_CLOSE_TAG, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 50ed917 12/96: Using non-parser mode for lexer, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode c15fa0c 10/96: Using parser-mode for lexer, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode ab56c99 13/96: More work on debugging parser-lexer, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 1dd3bd3 06/96: More working on trying to get parser test working, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 3f5c008 09/96: Optimization for lexer to only need to execute once per index,
Christian Johansson <=
- [elpa] externals/phps-mode 2b167f3 08/96: Fixes for parsing start and end, Christian Johansson, 2021/10/29
- [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