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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/phps-mode d51a2c4 276/405: Lexer grammar used same logi


From: Stefan Monnier
Subject: [elpa] externals/phps-mode d51a2c4 276/405: Lexer grammar used same logic as PHP language scanner
Date: Sat, 13 Jul 2019 10:00:31 -0400 (EDT)

branch: externals/phps-mode
commit d51a2c465a1e153fdb483dfbe2fecd6179a4c896
Author: Christian Johansson <address@hidden>
Commit: Christian Johansson <address@hidden>

    Lexer grammar used same logic as PHP language scanner
---
 phps-mode-lexer.el      | 850 ++++++++++++++++++++----------------------------
 phps-mode-test-lexer.el |  22 +-
 2 files changed, 370 insertions(+), 502 deletions(-)

diff --git a/phps-mode-lexer.el b/phps-mode-lexer.el
index 52394f2..45d7edf 100644
--- a/phps-mode-lexer.el
+++ b/phps-mode-lexer.el
@@ -151,10 +151,6 @@
   "[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*"
   "Labels are used for names.")
 
-(defvar phps-mode-lexer-NOT-LABEL
-  "[^a-zA-Z_\x80-\xff]"
-  "Characters not starting a label.")
-
 (defvar phps-mode-lexer-WHITESPACE "[ \n\r\t]+"
   "White-space.")
 
@@ -481,19 +477,19 @@
        (phps-mode-lexer-RETURN_TOKEN 'T_DIE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "function" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "function"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_FUNCTION (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_FUNCTION (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "const" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "const"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_CONST (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_CONST (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "return" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "return"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_RETURN (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_RETURN (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (looking-at (concat "yield" 
phps-mode-lexer-WHITESPACE "from" "[^a-zA-Z0-9_\x80-\xff]")))
@@ -501,174 +497,174 @@
        (phps-mode-lexer-RETURN_TOKEN 'T_YIELD_FROM (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "yield" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "yield"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_YIELD (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_YIELD (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "try" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "try"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_TRY (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_TRY (match-beginning 0) (match-end 
0))))0
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "catch" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "catch"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_CATCH (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_CATCH (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "finally" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "finally"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_FINALLY (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_FINALLY (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "throw" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "throw"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_THROW (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_THROW (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "if" phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "if"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_IF (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_IF (match-beginning 0) (match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "elseif" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "elseif"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ELSEIF (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ELSEIF (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "endif" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "endif"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ENDIF (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ENDIF (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "else" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "else"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ELSE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ELSE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "while" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "while"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_WHILE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_WHILE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "endwhile" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "endwhile"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ENDWHILE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ENDWHILE (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "do" phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "do"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_DO (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_DO (match-beginning 0) (match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "for" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "for"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_FOR (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_FOR (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "endfor" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "endfor"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOR (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOR (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "foreach" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "foreach"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_FOREACH (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_FOREACH (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "endforeach" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "endforeach"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOREACH (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ENDFOREACH (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "declare" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "declare"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_DECLARE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_DECLARE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "enddeclare" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "enddeclare"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ENDDECLARE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ENDDECLARE (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "instanceof" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "instanceof"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_INSTANCEOF (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_INSTANCEOF (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "as" phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "as"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_AS (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_AS (match-beginning 0) (match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "switch" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "switch"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_SWITCH (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_SWITCH (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "endswitch" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "endswitch"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ENDSWITCH (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ENDSWITCH (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "case" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "case"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_CASE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_CASE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "default" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "default"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_DEFAULT (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_DEFAULT (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "break" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "break"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_BREAK (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_BREAK (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "continue" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "continue"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_CONTINUE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_CONTINUE (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "goto" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "goto"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_GOTO (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_GOTO (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "echo" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "echo"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ECHO (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ECHO (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "print" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "print"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_PRINT (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_PRINT (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "class" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "class"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_CLASS (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_CLASS (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "interface" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "interface"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_INTERFACE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_INTERFACE (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "trait" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "trait"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "extends" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "extends"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_EXTENDS (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_EXTENDS (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "implements" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "implements"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_IMPLEMENTS (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_IMPLEMENTS (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (looking-at "->"))
@@ -726,24 +722,24 @@
        (phps-mode-lexer-RETURN_TOKEN 'T_ELLIPSIS (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "\\?\\?" "[^\\=]")))
+     (and ST_IN_SCRIPTING (looking-at "\\?\\?"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_COALESCE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_COALESCE (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "new" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "new"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_NEW (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_NEW (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "clone" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "clone"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_CLONE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_CLONE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "var" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "var"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_VAR (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_VAR (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (looking-at (concat "(" 
phps-mode-lexer-TABS_AND_SPACES "\\(int\\|integer\\)" 
phps-mode-lexer-TABS_AND_SPACES ")")))
@@ -781,100 +777,100 @@
        (phps-mode-lexer-RETURN_TOKEN 'T_UNSET_CAST (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "eval" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "eval"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_EVAL (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_EVAL (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "include" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "include"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "include_once" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "include_once"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE_ONCE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_INCLUDE_ONCE (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "require" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "require"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "require_once" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "require_once"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE_ONCE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_REQUIRE_ONCE (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "namespace" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "namespace"))
      (lambda()
        (setq phps-mode-lexer-declaring_namespace t)
-       (phps-mode-lexer-RETURN_TOKEN 'T_NAMESPACE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_NAMESPACE (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "use" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "use"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_USE (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_USE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "insteadof" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "insteadof"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_INSTEADOF (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_INSTEADOF (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "global" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "global"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_GLOBAL (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_GLOBAL (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "isset" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "isset"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ISSET (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ISSET (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "empty" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "empty"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_EMPTY (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_EMPTY (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "__halt_compiler" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "__halt_compiler"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_HALT_COMPILER (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_HALT_COMPILER (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "static" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "static"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_STATIC (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_STATIC (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "abstract" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "abstract"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ABSTRACT (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ABSTRACT (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "final" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "final"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_FINAL (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_FINAL (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "private" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "private"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_PRIVATE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_PRIVATE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "protected" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "protected"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_PROTECTED (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_PROTECTED (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "public" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "public"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_PUBLIC (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_PUBLIC (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "unset" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "unset"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_UNSET (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_UNSET (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (looking-at "=>"))
@@ -882,19 +878,19 @@
        (phps-mode-lexer-RETURN_TOKEN 'T_DOUBLE_ARROW (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "list" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "list"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_LIST (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_LIST (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "array" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "array"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_ARRAY (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_ARRAY (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "callable" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "callable"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_CALLABLE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_CALLABLE (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (looking-at "\\+\\+"))
@@ -1022,71 +1018,48 @@
        (phps-mode-lexer-RETURN_TOKEN 'T_BOOLEAN_AND (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "OR" phps-mode-lexer-NOT-LABEL)))
-     (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_OR (match-beginning 0) (1- 
(match-end 0)))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "AND" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "OR"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_AND (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_OR (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "XOR" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "AND"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_XOR (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_AND (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "<<" "[^<]")))
+     (and ST_IN_SCRIPTING (looking-at "XOR"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_SL (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_LOGICAL_XOR (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat ">>" "[^>]")))
+     (and ST_IN_SCRIPTING (looking-at "<<"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_SR (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_SL (match-beginning 0) (match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at "\\?>\n?"))
+     (and ST_IN_SCRIPTING (looking-at ">>"))
      (lambda()
-       (let ((start (match-beginning 0))
-             (end (match-end 0)))
-         (when (= (- end start) 3)
-           (setq end (1- end)))
-         (phps-mode-lexer-BEGIN phps-mode-lexer-ST_INITIAL)
-         (when phps-mode-lexer-PARSER_MODE
-           (phps-mode-lexer-RETURN_TOKEN ";" start end))
-         (phps-mode-lexer-RETURN_TOKEN 'T_CLOSE_TAG start end))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_SR (match-beginning 0) (match-end 0))))
 
-    ;; HEREDOC and NOWDOC
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "<<<" 
phps-mode-lexer-TABS_AND_SPACES "\\(" phps-mode-lexer-LABEL "\\|'" 
phps-mode-lexer-LABEL "'\\|\"" phps-mode-lexer-LABEL "\"\\)" 
phps-mode-lexer-NEWLINE)))
+     (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-TOKENS))
      (lambda()
        (let* ((start (match-beginning 0))
               (end (match-end 0))
-              (data (buffer-substring-no-properties (match-beginning 1) 
(match-end 1)))
-              (heredoc_label))
-
-         ;; Determine if it's HEREDOC or NOWDOC and extract label here
-         (if (string= (substring data 0 1) "'")
-             (progn
-               (setq heredoc_label (substring data 1 (- (length data) 1)))
-               (phps-mode-lexer-BEGIN phps-mode-lexer-ST_NOWDOC))
-           (progn
-             (if (string= (substring data 0 1) "\"")
-                 (setq heredoc_label (substring data 1 (- (length data) 1)))
-               (setq heredoc_label data))
-             (phps-mode-lexer-BEGIN phps-mode-lexer-ST_HEREDOC)))
-
-         ;; Check for ending label on the next line
-         (when (string= (buffer-substring-no-properties end (+ end (length 
heredoc_label))) heredoc_label)
-           (phps-mode-lexer-BEGIN phps-mode-lexer-ST_END_HEREDOC))
-
-         (push heredoc_label phps-mode-lexer-heredoc_label_stack)
-         ;; (message "Found heredoc or nowdoc at %s with label %s" data 
heredoc_label)
-
-         (phps-mode-lexer-RETURN_TOKEN 'T_START_HEREDOC start end))))
-
+              (data (buffer-substring-no-properties start end))
+              (use-brace nil))
+         ;; (message "Found token '%s'" data)
+         (when phps-mode-lexer-declaring_namespace
+           (when (string= data ";")
+             (setq phps-mode-lexer-prepend_trailing_brace t)
+             ;; (message "Set flag prepend trailing brace")
+             ;; (setq use-brace t)
+             )
+           (setq phps-mode-lexer-declaring_namespace nil))
+         (if use-brace
+             (phps-mode-lexer-RETURN_TOKEN "{" start end)
+           (phps-mode-lexer-RETURN_TOKEN data start end)))))
 
     (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (looking-at "{"))
@@ -1097,6 +1070,12 @@
        (phps-mode-lexer-RETURN_TOKEN "{" (match-beginning 0) (match-end 0))))
 
     (phps-mode-lexer-re2c-rule
+     (and (or ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC) (looking-at "\\${"))
+     (lambda()
+       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_VARNAME)
+       (phps-mode-lexer-RETURN_TOKEN 'T_DOLLAR_OPEN_CURLY_BRACES 
(match-beginning 0) (match-end 0))))
+
+    (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (looking-at "}"))
      (lambda()
        (when phps-mode-lexer-state_stack
@@ -1108,6 +1087,22 @@
        (phps-mode-lexer-RETURN_TOKEN "}" (match-beginning 0) (match-end 0))))
 
     (phps-mode-lexer-re2c-rule
+     (and ST_LOOKING_FOR_VARNAME (looking-at (concat phps-mode-lexer-LABEL 
"[\\[}]")))
+     (lambda()
+       (let ((start (match-beginning 0))
+             (end (- (match-end 0) 1)))
+         ;; (message "Stopped here")
+         (phps-mode-lexer-yy_pop_state)
+         (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING)
+         (phps-mode-lexer-RETURN_TOKEN 'T_STRING_VARNAME start end))))
+
+    (phps-mode-lexer-re2c-rule
+     (and ST_LOOKING_FOR_VARNAME (looking-at phps-mode-lexer-ANY_CHAR))
+     (lambda()
+       (phps-mode-lexer-yy_pop_state)
+       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING)))
+
+    (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-BNUM))
      (lambda()
        (let* ((start (match-beginning 0))
@@ -1120,6 +1115,17 @@
            (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
 
     (phps-mode-lexer-re2c-rule
+     (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-LNUM))
+     (lambda()
+       (let* ((start (match-beginning 0))
+              (end (match-end 0))
+              (data (string-to-number (buffer-substring-no-properties start 
end))))
+         ;; (message "Long number: %d" data)
+         (if (> data phps-mode-lexer-long-limit)
+             (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end)
+           (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
+
+    (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-HNUM))
      (lambda()
        (let* ((start (match-beginning 0))
@@ -1131,6 +1137,27 @@
              (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end)
            (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
 
+    ;; TODO Implement this
+    ;; (phps-mode-lexer-re2c-rule
+    ;;  (and ST_VAR_OFFSET (looking-at "\\([0]\\|\\([1-9][0-9]*\\)\\)"))
+    ;;  (lambda()
+    ;;    (let* ((start (match-beginning 0))
+    ;;           (end (match-end 0))
+    ;;           (data (buffer-substring-no-properties (+ start 2) end))
+    ;;           (long-number (string-to-number data 16)))
+    ;;      ;; (message "Hexadecimal number %s from %s" long-number data)
+    ;;      (if (> long-number phps-mode-lexer-long-limit)
+    ;;          (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end)
+    ;;        (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
+
+    (phps-mode-lexer-re2c-rule
+     (and ST_VAR_OFFSET (looking-at (concat "\\("
+                                            phps-mode-lexer-LNUM "\\|"
+                                            phps-mode-lexer-HNUM "\\|"
+                                            phps-mode-lexer-BNUM "\\)")))
+     (lambda()
+       (phps-mode-lexer-RETURN_TOKEN 'T_NUM_STRING (match-beginning 0) 
(match-end 0))))
+
     (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (or (looking-at phps-mode-lexer-EXPONENT_DNUM)
                               (looking-at phps-mode-lexer-DNUM)))
@@ -1142,58 +1169,138 @@
          (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-LNUM))
+     (and ST_IN_SCRIPTING (looking-at "__CLASS__"))
      (lambda()
-       (let* ((start (match-beginning 0))
-              (end (match-end 0))
-              (data (string-to-number (buffer-substring-no-properties start 
end))))
-         ;; (message "Long number: %d" data)
-         (if (> data phps-mode-lexer-long-limit)
-             (phps-mode-lexer-RETURN_TOKEN 'T_DNUMBER start end)
-           (phps-mode-lexer-RETURN_TOKEN 'T_LNUMBER start end)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_CLASS_C (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "__CLASS__" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "__TRAIT__"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_CLASS_C (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT_C (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "__TRAIT__" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "__FUNCTION__"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_TRAIT_C (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_FUNC_C (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "__FUNCTION__" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "__METHOD__"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_FUNC_C (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_METHOD_C (match-beginning 0) 
(match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "__METHOD__" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "__LINE__"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_METHOD_C (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_LINE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "__LINE__" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "__FILE__"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_LINE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_FILE (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "__FILE__" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "__DIR__"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_FILE (match-beginning 0) (1- 
(match-end 0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_DIR (match-beginning 0) (match-end 
0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "__DIR__" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "__NAMESPACE__"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_DIR (match-beginning 0) (1- (match-end 
0)))))
+       (phps-mode-lexer-RETURN_TOKEN 'T_NS_C (match-beginning 0) (match-end 
0))))
+
+    (phps-mode-lexer-re2c-rule
+     (and ST_INITIAL (looking-at "<\\?="))
+     (lambda()
+       (let ((start (match-beginning 0))
+             (end (match-end 0)))
+         (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING)
+         ;; (message "Starting scripting after <?=")
+         (when phps-mode-lexer-PARSER_MODE
+           (phps-mode-lexer-RETURN_TOKEN 'T_ECHO start end))
+         (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG_WITH_ECHO start end))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "__NAMESPACE__" 
phps-mode-lexer-NOT-LABEL)))
+     (and ST_INITIAL (looking-at "<\\?php\\([ \t]\\|\n\\)"))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_NS_C (match-beginning 0) (1- 
(match-end 0)))))
+       (let ((start (match-beginning 0))
+             (end (match-end 0)))
+         (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING)
+         ;; (message "Starting scripting after <?php")
+         (when phps-mode-lexer-EXPECTED
+           (phps-mode-lexer-SKIP_TOKEN 'T_OPEN_TAG start end))
+         (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG start end))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at "\\(//\\|#\\)"))
+     (and ST_INITIAL (looking-at "<\\?"))
+     (lambda()
+       (when phps-mode-lexer-SHORT_TAGS
+         (let ((start (match-beginning 0))
+               (end (match-end 0)))
+           (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING)
+           (when phps-mode-lexer-EXPECTED
+             (phps-mode-lexer-SKIP_TOKEN 'T_OPEN_TAG start end))
+           ;; (message "Starting scripting after <?")
+           (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG start end)))))
+
+    ;; NOTE: mimics inline_char_handler
+    (phps-mode-lexer-re2c-rule
+     (and ST_INITIAL (looking-at phps-mode-lexer-ANY_CHAR))
+     (lambda()
+       (let ((start (match-beginning 0)))
+         (let ((string-start (search-forward "<?" nil t)))
+           (if string-start
+               (phps-mode-lexer-RETURN_TOKEN 'T_INLINE_HTML start (- 
string-start 2))
+             (phps-mode-lexer-RETURN_TOKEN 'T_INLINE_HTML start 
(point-max)))))))
+
+    (phps-mode-lexer-re2c-rule
+     (and (or ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE) (looking-at (concat 
"\\$" phps-mode-lexer-LABEL "->" "[a-zA-Z_\x80-\xff]")))
+     (lambda()
+       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_PROPERTY)
+       (forward-char -3)
+       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (- 
(match-end 0) 3))))
+
+    (phps-mode-lexer-re2c-rule
+     (and (or ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE) (looking-at (concat 
"\\$" phps-mode-lexer-LABEL "\\[")))
+     (lambda()
+       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_VAR_OFFSET)
+       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) 
(match-end 0))))
+
+    (phps-mode-lexer-re2c-rule
+     (and (or ST_IN_SCRIPTING ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE 
ST_VAR_OFFSET) (looking-at (concat "\\$" phps-mode-lexer-LABEL)))
+     (lambda()
+       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) 
(match-end 0))))
+
+    (phps-mode-lexer-re2c-rule
+     (and ST_VAR_OFFSET (looking-at "\\]"))
+     (lambda()
+       (phps-mode-lexer-yy_pop_state)
+       (phps-mode-lexer-RETURN_TOKEN "]" (match-beginning 0) (match-end 0))))
+
+    (phps-mode-lexer-re2c-rule
+     (and ST_VAR_OFFSET (looking-at (concat "\\(" phps-mode-lexer-TOKENS
+                                            "\\|[{}\"`]\\)")))
+     (lambda()
+       (let* ((start (match-beginning 0))
+              (end (match-end 0))
+              (data (buffer-substring-no-properties start end)))
+         (phps-mode-lexer-RETURN_TOKEN data start end))))
+
+    (phps-mode-lexer-re2c-rule
+     (and ST_VAR_OFFSET (looking-at (concat "[ \n\r\t'#]")))
+     (lambda()
+       (let* ((start (match-beginning 0))
+              (end (- (match-end 0) 1)))
+         (phps-mode-lexer-yy_pop_state)
+         (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE start end))))
+
+    (phps-mode-lexer-re2c-rule
+     (and (or ST_IN_SCRIPTING ST_VAR_OFFSET) (looking-at 
phps-mode-lexer-LABEL))
+     (lambda()
+       ;; (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))))
+
+    (phps-mode-lexer-re2c-rule
+     (and ST_IN_SCRIPTING (looking-at "\\(#\\|//\\)"))
      (lambda()
        (let* ((start (match-beginning 0))
               (end (match-end 0))
@@ -1211,7 +1318,7 @@
              )))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "/\\*\\*" 
phps-mode-lexer-WHITESPACE)))
+     (and ST_IN_SCRIPTING (looking-at (concat "\\(/\\*\\|/\\*\\*\\)" 
phps-mode-lexer-WHITESPACE)))
      (lambda()
        (let* ((start (match-beginning 0))
               (end (match-end 0))
@@ -1227,46 +1334,16 @@
            ))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at "/\\*"))
-     (lambda()
-       (let* ((start (match-beginning 0))
-              (end (match-end 0))
-              (_data (buffer-substring-no-properties start end)))
-         (let ((string-start (search-forward "*/" nil t))
-               position)
-           (if string-start
-               (setq position string-start)
-             (progn
-               (setq position (point-max))
-               (phps-mode-lexer-MOVE_FORWARD (point-max))))
-           (phps-mode-lexer-RETURN_TOKEN 'T_COMMENT start position)
-           ))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at (concat "\\$" phps-mode-lexer-LABEL)))
+     (and ST_IN_SCRIPTING (looking-at "\\?>\n?"))
      (lambda()
        (let ((start (match-beginning 0))
              (end (match-end 0)))
-         (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE start end))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-TOKENS))
-     (lambda()
-       (let* ((start (match-beginning 0))
-              (end (match-end 0))
-              (data (buffer-substring-no-properties start end))
-              (use-brace nil))
-         ;; (message "Found token '%s'" data)
-         (when phps-mode-lexer-declaring_namespace
-           (when (string= data ";")
-             (setq phps-mode-lexer-prepend_trailing_brace t)
-             ;; (message "Set flag prepend trailing brace")
-             ;; (setq use-brace t)
-             )
-           (setq phps-mode-lexer-declaring_namespace nil))
-         (if use-brace
-             (phps-mode-lexer-RETURN_TOKEN "{" start end)
-           (phps-mode-lexer-RETURN_TOKEN data start end)))))
+         (when (= (- end start) 3)
+           (setq end (1- end)))
+         (phps-mode-lexer-BEGIN phps-mode-lexer-ST_INITIAL)
+         (when phps-mode-lexer-PARSER_MODE
+           (phps-mode-lexer-RETURN_TOKEN ";" start end))
+         (phps-mode-lexer-RETURN_TOKEN 'T_CLOSE_TAG start end))))
 
     (phps-mode-lexer-re2c-rule
      (and ST_IN_SCRIPTING (looking-at "'"))
@@ -1327,113 +1404,55 @@
                  (phps-mode-lexer-MOVE_FORWARD (point-max)))))))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at "[`]"))
-     (lambda()
-       ;; (message "Begun backquote at %s-%s" (match-beginning 0) (match-end 
0))
-       (phps-mode-lexer-BEGIN phps-mode-lexer-ST_BACKQUOTE)
-       (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end 0))))
-
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-LABEL))
-     (lambda()
-       ;; (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))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-TOKENS))
+     (and ST_IN_SCRIPTING (looking-at (concat "<<<" 
phps-mode-lexer-TABS_AND_SPACES "\\(" phps-mode-lexer-LABEL "\\|'" 
phps-mode-lexer-LABEL "'\\|\"" phps-mode-lexer-LABEL "\"\\)" 
phps-mode-lexer-NEWLINE)))
      (lambda()
-       (phps-mode-lexer-RETURN_TOKEN (match-string 0) (match-beginning 0) 
(match-end 0))))
+       (let* ((start (match-beginning 0))
+              (end (match-end 0))
+              (data (buffer-substring-no-properties (match-beginning 1) 
(match-end 1)))
+              (heredoc_label))
 
-    (phps-mode-lexer-re2c-rule
-     (and ST_IN_SCRIPTING (looking-at phps-mode-lexer-ANY_CHAR))
-     (lambda()
-       ;; Unexpected character
-       ;; (message "Unexpected character '%s'" (buffer-substring-no-properties 
(match-beginning 0) (match-end 0)))
-       (phps-mode-lexer-RETURN_TOKEN 'T_ERROR (match-beginning 0) (point-max))
-       (phps-mode-lexer-MOVE_FORWARD (point-max))))
+         ;; Determine if it's HEREDOC or NOWDOC and extract label here
+         (if (string= (substring data 0 1) "'")
+             (progn
+               (setq heredoc_label (substring data 1 (- (length data) 1)))
+               (phps-mode-lexer-BEGIN phps-mode-lexer-ST_NOWDOC))
+           (progn
+             (if (string= (substring data 0 1) "\"")
+                 (setq heredoc_label (substring data 1 (- (length data) 1)))
+               (setq heredoc_label data))
+             (phps-mode-lexer-BEGIN phps-mode-lexer-ST_HEREDOC)))
 
+         ;; Check for ending label on the next line
+         (when (string= (buffer-substring-no-properties end (+ end (length 
heredoc_label))) heredoc_label)
+           (phps-mode-lexer-BEGIN phps-mode-lexer-ST_END_HEREDOC))
 
-    ;; ST_INITIAL
+         (push heredoc_label phps-mode-lexer-heredoc_label_stack)
+         ;; (message "Found heredoc or nowdoc at %s with label %s" data 
heredoc_label)
 
+         (phps-mode-lexer-RETURN_TOKEN 'T_START_HEREDOC start end))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_INITIAL (looking-at "<\\?="))
+     (and ST_IN_SCRIPTING (looking-at "[`]"))
      (lambda()
-       (let ((start (match-beginning 0))
-             (end (match-end 0)))
-         (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING)
-         ;; (message "Starting scripting after <?=")
-         (when phps-mode-lexer-PARSER_MODE
-           (phps-mode-lexer-RETURN_TOKEN 'T_ECHO start end))
-         (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG_WITH_ECHO start end))))
+       ;; (message "Begun backquote at %s-%s" (match-beginning 0) (match-end 
0))
+       (phps-mode-lexer-BEGIN phps-mode-lexer-ST_BACKQUOTE)
+       (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end 0))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_INITIAL (looking-at "<\\?php\\([ \t]\\|\n\\)"))
+     (and ST_END_HEREDOC (looking-at (concat phps-mode-lexer-ANY_CHAR)))
      (lambda()
-       (let ((start (match-beginning 0))
-             (end (match-end 0)))
+       (let* ((start (match-beginning 0))
+              (end (+ start (length heredoc_label) 1))
+              (_data (buffer-substring-no-properties start end)))
+         ;; (message "Found ending heredoc at %s, %s of %s" _data 
(thing-at-point 'line) heredoc_label)
+         (pop phps-mode-lexer-heredoc_label_stack)
          (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING)
-         ;; (message "Starting scripting after <?php")
-         (when phps-mode-lexer-EXPECTED
-           (phps-mode-lexer-SKIP_TOKEN 'T_OPEN_TAG start end))
-         (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG start end))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_INITIAL (looking-at "<\\?"))
-     (lambda()
-       (when phps-mode-lexer-SHORT_TAGS
-         (let ((start (match-beginning 0))
-               (end (match-end 0)))
-           (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING)
-           (when phps-mode-lexer-EXPECTED
-             (phps-mode-lexer-SKIP_TOKEN 'T_OPEN_TAG start end))
-           ;; (message "Starting scripting after <?")
-           (phps-mode-lexer-RETURN_TOKEN 'T_OPEN_TAG start end)))))
-
-    ;; NOTE: mimics inline_char_handler
-    (phps-mode-lexer-re2c-rule
-     (and ST_INITIAL (looking-at phps-mode-lexer-ANY_CHAR))
-     (lambda()
-       (let ((start (match-beginning 0)))
-         (let ((string-start (search-forward "<?" nil t)))
-           (if string-start
-               (phps-mode-lexer-RETURN_TOKEN 'T_INLINE_HTML start (- 
string-start 2))
-             (phps-mode-lexer-RETURN_TOKEN 'T_INLINE_HTML start 
(point-max)))))))
-
-    
-    ;; ST_DOUBLE_QUOTES
-
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_DOUBLE_QUOTES (looking-at "\\${"))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_VARNAME)
-       (phps-mode-lexer-RETURN_TOKEN 'T_DOLLAR_OPEN_CURLY_BRACES 
(match-beginning 0) (match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_DOUBLE_QUOTES (looking-at (concat "\\$" phps-mode-lexer-LABEL 
"->" "[a-zA-Z_\x80-\xff]")))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_PROPERTY)
-       (forward-char -3)
-       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (- 
(match-end 0) 3))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_DOUBLE_QUOTES (looking-at (concat "\\$" phps-mode-lexer-LABEL 
"\\[")))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_VAR_OFFSET)
-       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) 
(match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_DOUBLE_QUOTES (looking-at (concat "\\$" phps-mode-lexer-LABEL)))
-     (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) 
(match-end 0))))
+         (phps-mode-lexer-RETURN_TOKEN 'T_END_HEREDOC start end))))
 
     (phps-mode-lexer-re2c-rule
-     (and ST_DOUBLE_QUOTES (looking-at "{\\$"))
+     (and (or ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC) (looking-at (concat 
"{\\$")))
      (lambda()
        (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING)
-       ;; (message "Starting ST_IN_SCRIPTING from double-quoted string at 
%s-%s" (match-beginning 0) (- (match-end 0) 1))
        (phps-mode-lexer-RETURN_TOKEN 'T_CURLY_OPEN (match-beginning 0) (- 
(match-end 0) 1))))
 
     (phps-mode-lexer-re2c-rule
@@ -1444,6 +1463,12 @@
        (phps-mode-lexer-RETURN_TOKEN "\"" (match-beginning 0) (match-end 0))))
 
     (phps-mode-lexer-re2c-rule
+     (and ST_BACKQUOTE (looking-at "[`]"))
+     (lambda()
+       (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING)
+       (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end 0))))
+
+    (phps-mode-lexer-re2c-rule
      (and ST_DOUBLE_QUOTES (looking-at phps-mode-lexer-ANY_CHAR))
      (lambda()
        (let ((start (point)))
@@ -1470,46 +1495,6 @@
                (phps-mode-lexer-RETURN_TOKEN 'T_ERROR start (point-max))
                (phps-mode-lexer-MOVE_FORWARD (point-max))))))))
 
-
-    ;; ST_BACKQUOTE
-
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_BACKQUOTE (looking-at "\\${"))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_VARNAME)
-       (phps-mode-lexer-RETURN_TOKEN 'T_DOLLAR_OPEN_CURLY_BRACES 
(match-beginning 0) (match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_BACKQUOTE (looking-at (concat "\\$" phps-mode-lexer-LABEL "->" 
"[a-zA-Z_\x80-\xff]")))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_PROPERTY)
-       (forward-char -3)
-       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (- 
(match-end 0) 3))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_BACKQUOTE (looking-at (concat "\\$" phps-mode-lexer-LABEL "\\[")))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_VAR_OFFSET)
-       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) 
(match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_BACKQUOTE (looking-at (concat "\\$" phps-mode-lexer-LABEL)))
-     (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) 
(match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_BACKQUOTE (looking-at "{\\$"))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING)
-       (phps-mode-lexer-RETURN_TOKEN 'T_CURLY_OPEN (match-beginning 0) (- 
(match-end 0) 1))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_BACKQUOTE (looking-at "[`]"))
-     (lambda()
-       (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING)
-       (phps-mode-lexer-RETURN_TOKEN "`" (match-beginning 0) (match-end 0))))
-
     (phps-mode-lexer-re2c-rule
      (and ST_BACKQUOTE (looking-at phps-mode-lexer-ANY_CHAR))
      (lambda()
@@ -1524,39 +1509,6 @@
              (phps-mode-lexer-RETURN_TOKEN 'T_ERROR old-start (point-max))
              (phps-mode-lexer-MOVE_FORWARD (point-max)))))))
 
-
-    ;; ST_HEREDOC
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_HEREDOC (looking-at "\\${"))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_VARNAME)
-       (phps-mode-lexer-RETURN_TOKEN 'T_DOLLAR_OPEN_CURLY_BRACES 
(match-beginning 0) (match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_HEREDOC (looking-at (concat "\\$" phps-mode-lexer-LABEL "->" 
"[a-zA-Z_\x80-\xff]")))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_LOOKING_FOR_PROPERTY)
-       (forward-char -3)
-       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) (- 
(match-end 0) 3))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_HEREDOC (looking-at (concat "\\$" phps-mode-lexer-LABEL "\\[")))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_VAR_OFFSET)
-       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) 
(match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_HEREDOC (looking-at (concat "\\$" phps-mode-lexer-LABEL)))
-     (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) 
(match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_HEREDOC (looking-at (concat "{\\$")))
-     (lambda()
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING)
-       (phps-mode-lexer-RETURN_TOKEN 'T_CURLY_OPEN (match-beginning 0) (- 
(match-end 0) 1))))
-
     (phps-mode-lexer-re2c-rule
      (and ST_HEREDOC (looking-at phps-mode-lexer-ANY_CHAR))
      (lambda()
@@ -1588,10 +1540,6 @@
              (phps-mode-lexer-MOVE_FORWARD (point-max))
              )))))
 
-
-    ;; ST_NOWDOC
-
-
     (phps-mode-lexer-re2c-rule
      (and ST_NOWDOC (looking-at phps-mode-lexer-ANY_CHAR))
      (lambda()
@@ -1611,93 +1559,11 @@
              (phps-mode-lexer-MOVE_FORWARD (point-max))
              )))))
 
-
-    ;; ST_LOOKING_FOR_VARNAME
-
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_LOOKING_FOR_VARNAME (looking-at (concat phps-mode-lexer-LABEL 
"[\\[}]")))
-     (lambda()
-       (let ((start (match-beginning 0))
-             (end (- (match-end 0) 1)))
-         ;; (message "Stopped here")
-         (phps-mode-lexer-yy_pop_state)
-         (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING)
-         (phps-mode-lexer-RETURN_TOKEN 'T_STRING_VARNAME start end))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_LOOKING_FOR_VARNAME (looking-at phps-mode-lexer-ANY_CHAR))
-     (lambda()
-       (phps-mode-lexer-yy_pop_state)
-       (phps-mode-lexer-yy_push_state phps-mode-lexer-ST_IN_SCRIPTING)))
-
-
-    ;; ST_END_HEREDOC
-
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_END_HEREDOC (looking-at (concat phps-mode-lexer-ANY_CHAR)))
-     (lambda()
-
-       (let* ((start (match-beginning 0))
-              (end (+ start (length heredoc_label) 1))
-              (_data (buffer-substring-no-properties start end)))
-         ;; (message "Found ending heredoc at %s, %s of %s" _data 
(thing-at-point 'line) heredoc_label)
-         (pop phps-mode-lexer-heredoc_label_stack)
-         (phps-mode-lexer-BEGIN phps-mode-lexer-ST_IN_SCRIPTING)
-         (phps-mode-lexer-RETURN_TOKEN 'T_END_HEREDOC start end)
-
-         )))
-
-
-    ;; ST_VAR_OFFSET
-
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_VAR_OFFSET (looking-at (concat "\\("
-                                            phps-mode-lexer-LNUM "\\|"
-                                            phps-mode-lexer-HNUM "\\|"
-                                            phps-mode-lexer-BNUM "\\)")))
-     (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_NUM_STRING (match-beginning 0) 
(match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_VAR_OFFSET (looking-at (concat "\\$" phps-mode-lexer-LABEL)))
-     (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_VARIABLE (match-beginning 0) 
(match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_VAR_OFFSET (looking-at "\\]"))
-     (lambda()
-       (phps-mode-lexer-yy_pop_state)
-       (phps-mode-lexer-RETURN_TOKEN "]" (match-beginning 0) (match-end 0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_VAR_OFFSET (looking-at (concat "\\(" phps-mode-lexer-TOKENS
-                                            "\\|[{}\"`]\\)")))
-     (lambda()
-       (let* ((start (match-beginning 0))
-              (end (match-end 0))
-              (data (buffer-substring-no-properties start end)))
-         (phps-mode-lexer-RETURN_TOKEN data start end))))
-
     (phps-mode-lexer-re2c-rule
-     (and ST_VAR_OFFSET (looking-at (concat "[ \n\r\t'#]")))
-     (lambda()
-       (let* ((start (match-beginning 0))
-              (end (- (match-end 0) 1)))
-         (phps-mode-lexer-yy_pop_state)
-         (phps-mode-lexer-RETURN_TOKEN 'T_ENCAPSED_AND_WHITESPACE start end))))
-
-    (phps-mode-lexer-re2c-rule
-     (and ST_VAR_OFFSET (looking-at phps-mode-lexer-LABEL))
-     (lambda()
-       (phps-mode-lexer-RETURN_TOKEN 'T_STRING (match-beginning 0) (match-end 
0))))
-
-    (phps-mode-lexer-re2c-rule
-     (and 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))
      (lambda()
        ;; Unexpected character
+       ;; (message "Unexpected character '%s'" (buffer-substring-no-properties 
(match-beginning 0) (match-end 0)))
        (phps-mode-lexer-RETURN_TOKEN 'T_ERROR (match-beginning 0) (point-max))
        (phps-mode-lexer-MOVE_FORWARD (point-max))))
 
diff --git a/phps-mode-test-lexer.el b/phps-mode-test-lexer.el
index ed7142a..aef31e5 100644
--- a/phps-mode-test-lexer.el
+++ b/phps-mode-test-lexer.el
@@ -155,21 +155,23 @@
    (should (equal (phps-mode-lexer-get-tokens)
                   '((T_OPEN_TAG 1 . 7) (T_ECHO 7 . 11) (T_ISSET 12 . 17) ("(" 
17 . 18) (T_VARIABLE 18 . 28) ("[" 28 . 29) (T_LNUMBER 29 . 30) ("]" 30 . 31) 
("[" 31 . 32) (T_CONSTANT_ENCAPSED_STRING 32 . 38) ("]" 38 . 39) (")" 39 . 40) 
("?" 41 . 42) (T_CONSTANT_ENCAPSED_STRING 43 . 48) (":" 49 . 50) 
(T_CONSTANT_ENCAPSED_STRING 51 . 55) (";" 55 . 56) (T_COMMENT 57 . 75) 
(T_COMMENT 76 . 101) (T_DOC_COMMENT 102 . 134) (T_ECHO 135 . 139) (T_VARIABLE 
140 . 150) (";" 150 . 151) (";" 152 . 154)  [...]
 
-  ;; TODO Add test for ??= token
-
-  (phps-mode-test-with-buffer
-   "<?php ??= $var EXIT die function return yield from yield try catch finally 
throw if elseif endif else while endwhile do for endfor foreach endforeach 
declare enddeclare instanceof as switch endswitch case default break continue 
goto echo print class interface trait extends implements :: \\ ... ?? new clone 
var (int) (integer) (real) (double) (float) (string) (binary) (array) (object) 
(boolean) (bool) (unset) eval include include_once require require_once 
namespace use insteadof globa [...]
-   "All PHP tokens after each other"
-   ;; (message "Tokens: %s" (phps-mode-lexer-get-tokens))
-   (should (equal (phps-mode-lexer-get-tokens)
-                  '((T_OPEN_TAG 1 . 7) (T_COALESCE_EQUAL 7 . 10) (T_VARIABLE 
11 . 15) (T_EXIT 16 . 20) (T_DIE 21 . 24) (T_FUNCTION 25 . 33) (T_RETURN 34 . 
40) (T_YIELD_FROM 41 . 52) (T_YIELD 52 . 57) (T_TRY 58 . 61) (T_CATCH 62 . 67) 
(T_FINALLY 68 . 75) (T_THROW 76 . 81) (T_IF 82 . 84) (T_ELSEIF 85 . 91) 
(T_ENDIF 92 . 97) (T_ELSE 98 . 102) (T_WHILE 103 . 108) (T_ENDWHILE 109 . 117) 
(T_DO 118 . 120) (T_FOR 121 . 124) (T_ENDFOR 125 . 131) (T_FOREACH 132 . 139) 
(T_ENDFOREACH 140 . 150) (T_D [...]
-
   (phps-mode-test-with-buffer
    "<?php forgerarray($arg1, $arg2)"
    "A function call containing keywords in its name"
    (should (equal (phps-mode-lexer-get-tokens)
                   '((T_OPEN_TAG 1 . 7) (T_STRING 7 . 18) ("(" 18 . 19) 
(T_VARIABLE 19 . 24) ("," 24 . 25) (T_VARIABLE 26 . 31) (")" 31 . 32)))))
 
+  ;; TODO Add test for ??= token
+  ;; TODO Add test for long as var offset
+
+  ;; (phps-mode-test-with-buffer
+  ;;  "<?php ??= $var EXIT die function return yield from yield try catch 
finally throw if elseif endif else while endwhile do for endfor foreach 
endforeach declare enddeclare instanceof as switch endswitch case default break 
continue goto echo print class interface trait extends implements :: \\ ... ?? 
new clone var (int) (integer) (real) (double) (float) (string) (binary) (array) 
(object) (boolean) (bool) (unset) eval include include_once require 
require_once namespace use insteadof gl [...]
+  ;;  "All PHP tokens after each other"
+  ;;  (message "Tokens: %s" (phps-mode-lexer-get-tokens))
+  ;;  (should (equal (phps-mode-lexer-get-tokens)
+  ;;                 '((T_OPEN_TAG 1 . 7) (T_COALESCE_EQUAL 7 . 10) 
(T_VARIABLE 11 . 15) (T_EXIT 16 . 20) (T_DIE 21 . 24) (T_FUNCTION 25 . 33) 
(T_RETURN 34 . 40) (T_YIELD_FROM 41 . 52) (T_YIELD 52 . 57) (T_TRY 58 . 61) 
(T_CATCH 62 . 67) (T_FINALLY 68 . 75) (T_THROW 76 . 81) (T_IF 82 . 84) 
(T_ELSEIF 85 . 91) (T_ENDIF 92 . 97) (T_ELSE 98 . 102) (T_WHILE 103 . 108) 
(T_ENDWHILE 109 . 117) (T_DO 118 . 120) (T_FOR 121 . 124) (T_ENDFOR 125 . 131) 
(T_FOREACH 132 . 139) (T_ENDFOREACH 140 . 150) ( [...]
+
+
   )
 
 (defun phps-mode-test-lexer-complex-tokens ()
@@ -406,7 +408,7 @@
 (defun phps-mode-test-lexer ()
   "Run test for lexer."
   ;; (message "-- Running all tests for lexer... --\n")
-  (setq debug-on-error t)
+  ;; (setq debug-on-error t)
   ;; (setq phps-mode-functions-verbose t)
   (phps-mode-test-lexer-script-boundaries)
   (phps-mode-test-lexer-simple-tokens)



reply via email to

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