branch: externals/phps-mode
commit ea4178f999f366e5c3ce1d5b8a414ce53cf5842f
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
Made lexer rules easier to maintain
---
phps-mode-lexer.el | 22 +++++-----------------
1 file changed, 5 insertions(+), 17 deletions(-)
diff --git a/phps-mode-lexer.el b/phps-mode-lexer.el
index 8016837b31..a1ff3ce78b 100644
--- a/phps-mode-lexer.el
+++ b/phps-mode-lexer.el
@@ -9,14 +9,9 @@
;; any higher order meta-lexer logic goes into `phps-mode-lex-analyzer.el'.
;;
;; Features:
-;; * Defines the lexer for this grammar based on the Zend PHP 8.1 Lexer at
-;;
https://raw.githubusercontent.com/php/php-src/PHP-8.1/Zend/zend_language_scanner.l
+;; * Defines the lexer for this grammar based on the Zend PHP 8.2 Lexer at
+;;
https://raw.githubusercontent.com/php/php-src/PHP-8.2/Zend/zend_language_scanner.l
;; which is using re2c.
-;;
-;; Instructions on how to generate new lexer rules
-;; 1. Make edits in lexer rules in function
`phps-mode-lexer--generate-lexer-rules'
-;; 2. Run `eval-buffer' and then `phps-mode-lexer--generate-lexer-rules'
-;; 3. Update inline value of `phps-mode-lexer--lambdas-by-state' by running
code "(insert (format "%S" phps-mode-lexer--lambdas-by-state))"
;;; Code:
@@ -121,12 +116,7 @@
;; VARIABLES
-(defvar phps-mode-lexer--lambdas-by-state #s(hash-table size 65 test equal
rehash-size 1.5 rehash-threshold 0.8125 data (ST_IN_SCRIPTING (((lambda nil
(looking-at "exit")) (lambda nil (phps-mode-lexer--return-token-with-indent
'T_EXIT))) ((lambda nil (looking-at "die")) (lambda nil
(phps-mode-lexer--return-token-with-indent 'T_EXIT))) ((lambda nil (looking-at
"fn")) (lambda nil (phps-mode-lexer--return-token-with-indent 'T_FN))) ((lambda
nil (looking-at "function")) (lambda nil (phps-mod [...]
-]*" "\\(\\$\\|\\.\\.\\.\\)"))) (lambda nil (phps-mode-lexer--yyless 1)
(phps-mode-lexer--return-token 'T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG
(match-beginning 0) (- (match-end 0) 1)))) ((lambda nil (looking-at "&"))
(lambda nil (phps-mode-lexer--return-token
'T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG))) ((lambda nil (looking-at (concat
"\\(" "]" "\\|" ")" "\\)"))) (lambda nil
(phps-mode-lexer--return-exit-nesting-token))) ((lambda nil (looking-at (concat
"\\(" "\\[" "\\|" "(" "\\)"))) (la [...]
-[ ]*\\(" phps-mode-lexer--heredoc-label "\\)\\|\\$"
phps-mode-lexer--label "\\|{\\$" phps-mode-lexer--label "\\|\\${"
phps-mode-lexer--label "\\)") nil t))) (if string-start (let* ((start
(match-beginning 0)) (end (match-end 0)) (data (match-string 0))) (cond
((string-match-p (concat "
-[ ]*" phps-mode-lexer--heredoc-label) data) (setq start (match-beginning
2)) (setq end (match-beginning 2)) (phps-mode-lexer--return-token-with-val
'T_ENCAPSED_AND_WHITESPACE old-end start) (phps-mode-lexer--begin
'ST_END_HEREDOC)) (t (phps-mode-lexer--return-token-with-val
'T_ENCAPSED_AND_WHITESPACE old-end start)))) (progn (signal 'phps-lexer-error
(list (format "Found no ending of heredoc starting at %d" old-start)
old-start))))))))) ST_LOOKING_FOR_VARNAME (((lambda nil (looking-at ( [...]
-
'#]"))) (lambda nil (phps-mode-lexer--yyless 0)
(phps-mode-lexer--yy-pop-state) (phps-mode-lexer--return-token-with-val
'T_ENCAPSED_AND_WHITESPACE))) ((lambda nil (looking-at phps-mode-lexer--label))
(lambda nil (phps-mode-lexer--return-token-with-str 'T_STRING 0))) ((lambda nil
(looking-at phps-mode-lexer--any-char)) (lambda nil (signal 'phps-lexer-error
(list (format "Unexpected character at %d" (match-beginning 0))
(match-beginning 0)))))) quote (((lambda nil (looking-at (concat "#!.* [...]
-[ ]*\\(" phps-mode-lexer--heredoc-label "\\)") nil t))) (if string-start
(let* ((start (match-beginning 1)) (end (match-end 1)) (_data
(buffer-substring-no-properties start end)))
(phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE
phps-mode-lexer--generated-new-tokens-index start) (phps-mode-lexer--begin
'ST_END_HEREDOC)) (progn (signal 'phps-lexer-error (list (format "Found no
ending of nowdoc starting at %d" start) start)))))))))))
+(defvar phps-mode-lexer--lambdas-by-state nil
"Hash-table of lex-analyzer rules organized by state.")
(defvar-local phps-mode-lexer--generated-tokens nil
@@ -478,10 +468,8 @@
;; Setup lexer rules
-(defun phps-mode-lexer--generate-lexer-rules ()
- "Generate lexer rules."
- (eval-when-compile
- (setq phps-mode-lexer--lambdas-by-state (make-hash-table :test 'equal)))
+(eval-when-compile
+ (setq phps-mode-lexer--lambdas-by-state (make-hash-table :test 'equal))
(phps-mode-lexer--match-macro
ST_IN_SCRIPTING