[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 60a33b3 06/62: More work on PHP 8.0 lex analy
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode 60a33b3 06/62: More work on PHP 8.0 lex analyzer |
Date: |
Tue, 20 Apr 2021 10:56:13 -0400 (EDT) |
branch: externals/phps-mode
commit 60a33b37d06464b84a818b11d6e7b248de956948
Author: Christian Johansson <christian@mediastrategi.se>
Commit: Christian Johansson <christian@mediastrategi.se>
More work on PHP 8.0 lex analyzer
---
phps-mode-lexer.el | 176 +++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 131 insertions(+), 45 deletions(-)
diff --git a/phps-mode-lexer.el b/phps-mode-lexer.el
index 3419587..003eb7c 100644
--- a/phps-mode-lexer.el
+++ b/phps-mode-lexer.el
@@ -503,7 +503,7 @@
(phps-mode-lexer--match-macro
(and (or ST_IN_SCRIPTING ST_LOOKING_FOR_PROPERTY)
(looking-at phps-mode-lexer--WHITESPACE))
- (phps-mode-lexer--return-whitespace))
+ (phps-mode-lexer--return-whitespace))
(phps-mode-lexer--match-macro
(and ST_LOOKING_FOR_PROPERTY (looking-at "->"))
@@ -1132,14 +1132,58 @@
(phps-mode-lexer--yy-pop-state)
(phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE))
+ ;; TODO New token below
+ (phps-mode-lexer--match-macro
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "namespace"
+ "\\("
+ "\\\\"
+ phps-mode-lexer--LABEL
+ "\\)+")))
+ (phps-mode-lexer--return-token-with-str
+ 'T_NAME_RELATIVE
+ (1- (length "namespace\\"))))
- ;; TODO Was here
+ ;; TODO New token below
+ (phps-mode-lexer--match-macro
+ (and
+ ST_IN_SCRIPTING
+ (looking-at (concat
+ phps-mode-lexer--LABEL
+ "\\("
+ "\\\\"
+ phps-mode-lexer--LABEL
+ "\\)+")))
+ (phps-mode-lexer--return-token-with-str
+ 'T_NAME_QUALIFIED
+ 0))
+ ;; TODO New token below
+ (phps-mode-lexer--match-macro
+ (and
+ ST_IN_SCRIPTING
+ (looking-at (concat
+ "\\\\"
+ phps-mode-lexer--LABEL
+ "\\("
+ "\\\\"
+ phps-mode-lexer--LABEL
+ "\\)*")))
+ (phps-mode-lexer--return-token-with-str
+ 'T_NAME_FULLY_QUALIFIED
+ 1))
(phps-mode-lexer--match-macro
- (and (or ST_IN_SCRIPTING ST_VAR_OFFSET) (looking-at
phps-mode-lexer--LABEL))
- ;; (message "Adding T_STRING from %s to %s" (match-beginning 0)
(match-end 0))
- (phps-mode-lexer--return-token 'T_STRING (match-beginning 0) (match-end
0)))
+ (and ST_IN_SCRIPTING (looking-at "\\\\"))
+ (phps-mode-lexer--RETURN_TOKEN 'T_NS_SEPARATOR))
+
+ (phps-mode-lexer--match-macro
+ (and
+ (or ST_IN_SCRIPTING ST_VAR_OFFSET)
+ (looking-at phps-mode-lexer--LABEL))
+ (phps-mode-lexer--return-token-with-str 'T_STRING 0))
(phps-mode-lexer--match-macro
(and ST_IN_SCRIPTING (looking-at "\\(#\\|//\\)"))
@@ -1148,12 +1192,14 @@
(_data (buffer-substring-no-properties start end))
(line (buffer-substring-no-properties end (line-end-position))))
(if (string-match "\\?>" line)
- (progn
- (phps-mode-lexer--return-token 'T_COMMENT start (+ end
(match-beginning 0))))
- (progn
- ;; TODO Handle expecting values here
- ;; (message "Found comment 2 from %s to %s" start
(line-end-position))
- (phps-mode-lexer--return-token 'T_COMMENT start
(line-end-position))))))
+ (phps-mode-lexer--return-or-skip-token
+ 'T_COMMENT
+ start
+ (+ end (match-beginning 0)))
+ (phps-mode-lexer--return-or-skip-token
+ 'T_COMMENT
+ start
+ (line-end-position)))))
(phps-mode-lexer--match-macro
(and ST_IN_SCRIPTING
@@ -1176,20 +1222,31 @@
'phps-lexer-error
(list
(format
- "Un-terminated comment starting at %d"
+ "Unterminated comment starting at %d"
start)
start)))))))
(phps-mode-lexer--match-macro
- (and ST_IN_SCRIPTING (looking-at (concat "\\?>"
phps-mode-lexer--NEWLINE "?")))
+ (and ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "\\?>"
+ phps-mode-lexer--NEWLINE
+ "?")))
(let ((start (match-beginning 0))
(end (match-end 0)))
(when (= (- end start) 3)
(setq end (1- end)))
(phps-mode-lexer--begin 'ST_INITIAL)
(when (phps-mode-parser-grammar-macro-CG 'parser-mode)
- (phps-mode-lexer--return-token ";" start end))
- (phps-mode-lexer--return-token 'T_CLOSE_TAG start end)))
+ (phps-mode-lexer--return-token
+ ";"
+ start
+ end))
+ (phps-mode-lexer--return-token
+ 'T_CLOSE_TAG
+ start
+ end)))
(phps-mode-lexer--match-macro
(and ST_IN_SCRIPTING (looking-at "'"))
@@ -1198,12 +1255,17 @@
(_data (buffer-substring-no-properties start end))
(un-escaped-end (phps-mode-lexer--get-next-unescaped "'")))
(if un-escaped-end
- (progn
- (phps-mode-lexer--return-token 'T_CONSTANT_ENCAPSED_STRING
start un-escaped-end))
- (progn
- ;; Unclosed single quotes
- (phps-mode-lexer--return-token 'T_ENCAPSED_AND_WHITESPACE start
(point-max))
- (phps-mode-lexer--move-forward (point-max))))))
+ (phps-mode-lexer--return-token
+ 'T_CONSTANT_ENCAPSED_STRING
+ start
+ un-escaped-end)
+ ;; Unclosed single quotes
+ (phps-mode-lexer--return-token-with-val
+ 'T_ENCAPSED_AND_WHITESPACE
+ start
+ (point-max))
+ (phps-mode-lexer--move-forward
+ (point-max)))))
;; Double quoted string
(phps-mode-lexer--match-macro
@@ -1257,17 +1319,13 @@
(let ((_double-quoted-string
(buffer-substring-no-properties start (+
string-start 1))))
;; (message "Double quoted string: %s"
_double-quoted-string)
- (phps-mode-lexer--return-token
+ (phps-mode-lexer--return-token-with-val
'T_CONSTANT_ENCAPSED_STRING
start
(+ string-start 1)))
;; (message "Found variable after '%s' at %s-%s"
(buffer-substring-no-properties start string-start) start string-start)
(phps-mode-lexer--begin 'ST_DOUBLE_QUOTES)
- (phps-mode-lexer--return-token "\"" start (1+ start))
- (phps-mode-lexer--return-token
- 'T_ENCAPSED_AND_WHITESPACE
- (1+ start)
- string-start))))
+ (phps-mode-lexer--return-token "\"" start (1+ start)))))
(progn
(setq open-quote nil)
(signal
@@ -1292,7 +1350,10 @@
phps-mode-lexer--NEWLINE)))
(let* ((start (match-beginning 0))
(end (match-end 0))
- (data (buffer-substring-no-properties (match-beginning 1)
(match-end 1))))
+ (data
+ (buffer-substring-no-properties
+ (match-beginning 1)
+ (match-end 1))))
;; Determine if it's HEREDOC or NOWDOC and extract label here
(if (string= (substring data 0 1) "'")
@@ -1332,10 +1393,12 @@
(and ST_IN_SCRIPTING (looking-at "[`]"))
;; (message "Begun backquote at %s-%s" (match-beginning 0) (match-end
0))
(phps-mode-lexer--begin 'ST_BACKQUOTE)
- (phps-mode-lexer--return-token "`" (match-beginning 0) (match-end 0)))
+ (phps-mode-lexer--return-token "`"))
(phps-mode-lexer--match-macro
- (and ST_END_HEREDOC (looking-at (concat phps-mode-lexer--ANY_CHAR)))
+ (and ST_END_HEREDOC
+ (looking-at
+ (concat phps-mode-lexer--ANY_CHAR)))
(let* ((start (match-beginning 0))
(end (+ start
(length
@@ -1350,21 +1413,23 @@
(phps-mode-lexer--match-macro
(and (or ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC) (looking-at (concat
"{\\$")))
(phps-mode-lexer--yy-push-state 'ST_IN_SCRIPTING)
+ (phps-mode-lexer--yyless 1)
+ (phps-mode-lexer--enter-nesting "{")
(phps-mode-lexer--return-token 'T_CURLY_OPEN (match-beginning 0) (-
(match-end 0) 1)))
(phps-mode-lexer--match-macro
(and ST_DOUBLE_QUOTES (looking-at "[\"]"))
(phps-mode-lexer--begin 'ST_IN_SCRIPTING)
- ;; (message "Ended double-quote at %s" (match-beginning 0))
- (phps-mode-lexer--return-token "\"" (match-beginning 0) (match-end 0)))
+ (phps-mode-lexer--return-token "\""))
(phps-mode-lexer--match-macro
(and ST_BACKQUOTE (looking-at "[`]"))
(phps-mode-lexer--begin 'ST_IN_SCRIPTING)
- (phps-mode-lexer--return-token "`" (match-beginning 0) (match-end 0)))
+ (phps-mode-lexer--return-token "`"))
(phps-mode-lexer--match-macro
- (and ST_DOUBLE_QUOTES (looking-at phps-mode-lexer--ANY_CHAR))
+ (and ST_DOUBLE_QUOTES
+ (looking-at phps-mode-lexer--ANY_CHAR))
(let ((start (point))
(start-error (car (cdr (nth 2 phps-mode-lexer--tokens)))))
(let ((string-start (search-forward-regexp "[^\\\\]\"" nil t)))
@@ -1379,9 +1444,15 @@
(let ((variable-start (+ start (match-beginning 0))))
;; (message "Found starting expression inside
double-quoted string at: %s %s" start variable-start)
- (phps-mode-lexer--return-token
'T_CONSTANT_ENCAPSED_STRING start variable-start)))
+ (phps-mode-lexer--return-token-with-val
+ 'T_CONSTANT_ENCAPSED_STRING
+ start
+ variable-start)))
(progn
- (phps-mode-lexer--return-token
'T_CONSTANT_ENCAPSED_STRING start end)
+ (phps-mode-lexer--return-token-with-val
+ 'T_CONSTANT_ENCAPSED_STRING
+ start
+ end)
;; (message "Found end of quote at %s-%s, moving ahead
after '%s'" start end (buffer-substring-no-properties start end))
)))
(progn
@@ -1398,7 +1469,10 @@
(if string-start
(let ((start (- (match-end 0) 1)))
;; (message "Skipping backquote forward over %s"
(buffer-substring-no-properties old-start start))
- (phps-mode-lexer--return-token 'T_CONSTANT_ENCAPSED_STRING
old-start start))
+ (phps-mode-lexer--return-token-with-val
+ 'T_ENCAPSED_AND_WHITESPACE
+ old-start
+ start))
(progn
(signal
'phps-lexer-error
@@ -1427,7 +1501,7 @@
(let* ((start (match-beginning 0))
(end (match-end 0))
(data (buffer-substring-no-properties start end)))
- ;; (message "Found something ending at %s" data)
+ ;; (message "Found something ending at %s" data)
(cond
@@ -1438,12 +1512,19 @@
";?\n"
) data)
;; (message "Found heredoc end at %s-%s" start end)
- (phps-mode-lexer--return-token 'T_ENCAPSED_AND_WHITESPACE
old-start start)
- (phps-mode-lexer--begin 'ST_END_HEREDOC))
+ (phps-mode-lexer--begin
+ 'ST_END_HEREDOC)
+ (phps-mode-lexer--return-token-with-val
+ 'T_ENCAPSED_AND_WHITESPACE
+ old-start
+ start))
(t
;; (message "Found variable at '%s'.. Skipping forward to
%s" data start)
- (phps-mode-lexer--return-token 'T_ENCAPSED_AND_WHITESPACE
old-start start)
+ (phps-mode-lexer--return-token-with-val
+ 'T_ENCAPSED_AND_WHITESPACE
+ old-start
+ start)
)
))
@@ -1469,8 +1550,12 @@
(_data (buffer-substring-no-properties start end)))
;; (message "Found something ending at %s" _data)
;; (message "Found nowdoc end at %s-%s" start end)
- (phps-mode-lexer--return-token 'T_ENCAPSED_AND_WHITESPACE
old-start start)
- (phps-mode-lexer--begin 'ST_END_HEREDOC))
+ (phps-mode-lexer--return-token-with-val
+ 'T_ENCAPSED_AND_WHITESPACE
+ old-start
+ start)
+ (phps-mode-lexer--begin
+ 'ST_END_HEREDOC))
(progn
(signal
'phps-lexer-error
@@ -1479,7 +1564,8 @@
start)))))))
(phps-mode-lexer--match-macro
- (and (or ST_IN_SCRIPTING ST_VAR_OFFSET) (looking-at
phps-mode-lexer--ANY_CHAR))
+ (and (or ST_IN_SCRIPTING ST_VAR_OFFSET)
+ (looking-at phps-mode-lexer--ANY_CHAR))
(signal
'phps-lexer-error
(list
@@ -1492,4 +1578,4 @@
(provide 'phps-mode-lexer)
-;;; phps-mode-lexer.el ends here
+;;; phps-mode-lexer.el ends here
- [elpa] externals/phps-mode updated (a8dcba3 -> 209055b), Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode 8647f09 01/62: Started on adding support for PHP 8.0 lex analyzer, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode 846b3b0 03/62: More work on PHP 8.0 lex analyzer, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode 83c7648 04/62: More work on PHP 8 lex analyzer, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode a1aa0a2 05/62: More work on PHP 8.0 lex analyzer, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode 60a33b3 06/62: More work on PHP 8.0 lex analyzer,
Christian Johansson <=
- [elpa] externals/phps-mode 111335b 11/62: Added TODO item, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode fbea5d9 07/62: Improved naming in lex analyzer, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode 79bbd0c 10/62: Fixed a regex issue, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode de5fea6 12/62: Added new token and lex analyzer functions, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode 04d0065 08/62: Added syntax coloring for new tokens, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode c56268f 13/62: Implement new lex-analyzer function, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode 11313cc 15/62: Removed unnecessary code, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode cd7ebb7 17/62: Removed unnecessary comment, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode 09d0bca 18/62: Passing old unit tests for lexer simple tokens, Christian Johansson, 2021/04/20
- [elpa] externals/phps-mode ae7a460 21/62: Added another new test for PHP 8.0 lex analysis, Christian Johansson, 2021/04/20