[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 7c66145 30/96: Refactor of parsers lex-analyz
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode 7c66145 30/96: Refactor of parsers lex-analyzer complete |
Date: |
Fri, 29 Oct 2021 11:14:40 -0400 (EDT) |
branch: externals/phps-mode
commit 7c661451baa0c51c6a152786d8015949f76faeaa
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Refactor of parsers lex-analyzer complete
---
phps-mode-automation-grammar.el | 97 ++++++++++++++++++++++-------------------
phps-mode-parser.el | 93 ++++++++++++++++++++-------------------
2 files changed, 100 insertions(+), 90 deletions(-)
diff --git a/phps-mode-automation-grammar.el b/phps-mode-automation-grammar.el
index 04121e3..f8b4d10 100644
--- a/phps-mode-automation-grammar.el
+++ b/phps-mode-automation-grammar.el
@@ -33,6 +33,11 @@
"Position of parser.")
(defvar
+ phps-mode-parser-tokens
+ nil
+ "Reversed list of tokens.")
+
+(defvar
phps-mode-automation-grammar--context-sensitive-attributes
'(%prec)
"List of context-sensitive attributes.")
@@ -1441,7 +1446,7 @@
(defvar
phps-mode-automation-grammar--header
- "(require 'phps-mode-lexer)\n(require 'semantic)\n(require
'semantic/lex)\n\n(defvar-local\n phps-mode-parser-position\n nil\n \"Position
of parser.\")\n"
+ "(require 'phps-mode-lexer)\n(require 'semantic)\n(require
'semantic/lex)\n\n(defvar-local\n phps-mode-parser-position\n nil\n \"Position
of parser.\")\n(defvar-local\n phps-mode-parser-tokens\n nil\n \"Reversed list
of lexer tokens.\")\n"
"Header contents for parser.")
(defvar
@@ -1459,7 +1464,6 @@
'$
"The EOF-identifier of grammar.")
-;; TODO Need to use a separate reversed list of tokens
(defvar
phps-mode-automation-grammar--lex-analyzer-function
(lambda (buffer-index)
@@ -1478,44 +1482,45 @@
(let ((token-list-index))
;; Unless we have lexed the buffer
- (unless phps-mode-lexer--generated-tokens
-
- ;; Reset lexer
- (setq-local
- phps-mode-lexer--generated-tokens
- nil)
- (setq-local
- phps-mode-lexer--state
- 'ST_INITIAL)
- (setq-local
- phps-mode-lexer--states
- nil)
+ (unless phps-mode-parser-tokens
+ (unless phps-mode-lexer--generated-tokens
+ ;; Reset lexer
+ (setq-local
+ phps-mode-lexer--generated-tokens
+ nil)
+ (setq-local
+ phps-mode-lexer--state
+ 'ST_INITIAL)
+ (setq-local
+ phps-mode-lexer--states
+ nil)
+ (setq-local
+ phps-mode-lexer--state-stack
+ nil)
+ (setq-local
+ phps-mode-lexer--heredoc-label
+ nil)
+ (setq-local
+ phps-mode-lexer--heredoc-label-stack
+ nil)
+ (setq-local
+ phps-mode-lexer--nest-location-stack
+ nil)
+ (goto-char (point-min))
+
+ ;; Run lexer on entire buffer here
+ (let ((index (point))
+ (max-index (point-max)))
+ (while (< index max-index)
+ (phps-mode-lexer--re2c)
+ (setq
+ index
+ semantic-lex-end-point)
+ (goto-char index))))
(setq-local
- phps-mode-lexer--state-stack
- nil)
- (setq-local
- phps-mode-lexer--heredoc-label
- nil)
- (setq-local
- phps-mode-lexer--heredoc-label-stack
- nil)
- (setq-local
- phps-mode-lexer--nest-location-stack
- nil)
- (goto-char (point-min))
-
- ;; Run lexer on entire buffer here
- (let ((index (point))
- (max-index (point-max)))
- (while (< index max-index)
- (phps-mode-lexer--re2c)
- (setq
- index
- semantic-lex-end-point)
- (goto-char index)))
- (setq
- phps-mode-lexer--generated-tokens
- (reverse phps-mode-lexer--generated-tokens))
+ phps-mode-parser-tokens
+ (reverse
+ phps-mode-lexer--generated-tokens))
;; Reset buffer-index to token-list-index connections
(setq-local
@@ -1525,10 +1530,10 @@
(if (and
phps-mode-parser-position
(= (car (car phps-mode-parser-position)) buffer-index))
- (progn
- (setq
- token-list-index
- (car (cdr (car phps-mode-parser-position)))))
+ (progn
+ (setq
+ token-list-index
+ (car (cdr (car phps-mode-parser-position)))))
;; Search from last requested index and forward until
;; we find a token starting at or after buffer-index and
@@ -1546,7 +1551,7 @@
previous-token-list-index)
(token-list-size
(length
- phps-mode-lexer--generated-tokens))
+ phps-mode-parser-tokens))
(continue t))
(while (and
continue
@@ -1556,7 +1561,7 @@
(let ((token
(nth
temp-token-list-index
- phps-mode-lexer--generated-tokens)))
+ phps-mode-parser-tokens)))
;; When token starts at cursor we found correct index
;; Save it
@@ -1610,7 +1615,7 @@
(let ((token
(nth
token-list-index
- phps-mode-lexer--generated-tokens)))
+ phps-mode-parser-tokens)))
(when (equal (car token) 'T_OPEN_TAG_WITH_ECHO)
(setf
(car token)
diff --git a/phps-mode-parser.el b/phps-mode-parser.el
index 4964fd6..0175782 100644
--- a/phps-mode-parser.el
+++ b/phps-mode-parser.el
@@ -14,6 +14,10 @@
phps-mode-parser-position
nil
"Position of parser.")
+(defvar-local
+ phps-mode-parser-tokens
+ nil
+ "Reversed list of lexer tokens.")
;;; Constants:
@@ -86,44 +90,45 @@
(let ((token-list-index))
;; Unless we have lexed the buffer
- (unless phps-mode-lexer--generated-tokens
-
- ;; Reset lexer
- (setq-local
- phps-mode-lexer--generated-tokens
- nil)
- (setq-local
- phps-mode-lexer--state
- 'ST_INITIAL)
- (setq-local
- phps-mode-lexer--states
- nil)
- (setq-local
- phps-mode-lexer--state-stack
- nil)
- (setq-local
- phps-mode-lexer--heredoc-label
- nil)
- (setq-local
- phps-mode-lexer--heredoc-label-stack
- nil)
+ (unless phps-mode-parser-tokens
+ (unless phps-mode-lexer--generated-tokens
+ ;; Reset lexer
+ (setq-local
+ phps-mode-lexer--generated-tokens
+ nil)
+ (setq-local
+ phps-mode-lexer--state
+ 'ST_INITIAL)
+ (setq-local
+ phps-mode-lexer--states
+ nil)
+ (setq-local
+ phps-mode-lexer--state-stack
+ nil)
+ (setq-local
+ phps-mode-lexer--heredoc-label
+ nil)
+ (setq-local
+ phps-mode-lexer--heredoc-label-stack
+ nil)
+ (setq-local
+ phps-mode-lexer--nest-location-stack
+ nil)
+ (goto-char (point-min))
+
+ ;; Run lexer on entire buffer here
+ (let ((index (point))
+ (max-index (point-max)))
+ (while (< index max-index)
+ (phps-mode-lexer--re2c)
+ (setq
+ index
+ semantic-lex-end-point)
+ (goto-char index))))
(setq-local
- phps-mode-lexer--nest-location-stack
- nil)
- (goto-char (point-min))
-
- ;; Run lexer on entire buffer here
- (let ((index (point))
- (max-index (point-max)))
- (while (< index max-index)
- (phps-mode-lexer--re2c)
- (setq
- index
- semantic-lex-end-point)
- (goto-char index)))
- (setq
- phps-mode-lexer--generated-tokens
- (reverse phps-mode-lexer--generated-tokens))
+ phps-mode-parser-tokens
+ (reverse
+ phps-mode-lexer--generated-tokens))
;; Reset buffer-index to token-list-index connections
(setq-local
@@ -133,10 +138,10 @@
(if (and
phps-mode-parser-position
(= (car (car phps-mode-parser-position)) buffer-index))
- (progn
- (setq
- token-list-index
- (car (cdr (car phps-mode-parser-position)))))
+ (progn
+ (setq
+ token-list-index
+ (car (cdr (car phps-mode-parser-position)))))
;; Search from last requested index and forward until
;; we find a token starting at or after buffer-index and
@@ -154,7 +159,7 @@
previous-token-list-index)
(token-list-size
(length
- phps-mode-lexer--generated-tokens))
+ phps-mode-parser-tokens))
(continue t))
(while (and
continue
@@ -164,7 +169,7 @@
(let ((token
(nth
temp-token-list-index
- phps-mode-lexer--generated-tokens)))
+ phps-mode-parser-tokens)))
;; When token starts at cursor we found correct index
;; Save it
@@ -218,7 +223,7 @@
(let ((token
(nth
token-list-index
- phps-mode-lexer--generated-tokens)))
+ phps-mode-parser-tokens)))
(when (equal (car token) 'T_OPEN_TAG_WITH_ECHO)
(setf
(car token)
- [elpa] externals/phps-mode c62ec64 27/96: Started refactor of parsers lex-analyzer, (continued)
- [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
- [elpa] externals/phps-mode 7323416 31/96: Added failing test for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 7c66145 30/96: Refactor of parsers lex-analyzer complete,
Christian Johansson <=
- [elpa] externals/phps-mode 0e89b6e 35/96: Fixed bug in automation grammar, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 65152f4 36/96: Added TODO item, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode add17a7 24/96: T_COMMENT and T_DOC_COMMENT are excluded from parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode f46b98f 25/96: More work on integrating parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 6b3a298 29/96: More work on parsers lex-analyzer refactor, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 45508e1 32/96: Reverted integration of parser into other files due to immaturity, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 37dda7a 34/96: Added another failing test for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 339e39b 37/96: Started on YACC grammar parser generator, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 244a62b 39/96: Parser generator now can parse PHP YACC productions, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode a449b5b 42/96: Improved formatting of generated productions, Christian Johansson, 2021/10/29