emacs-elpa-diffs
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]