anchor.diff:  	'}' {
   if (this._insideString) {
       this._insideString = false;
  -    this.channel(SkipChannel);
  +    this.skip;
       this.popMode();
   }
   };
  
positive.code: 	'$' [a-zA-Z_][a-zA-Z_0-9]* -> type(VarName); // TODO: fix such cases: "$people->john"
  DollarString: '$' -> type(StringPart);
  CurlyDollar:
  	'{' {this._input.LA(1) === '$'.charCodeAt(0)}? {this._insideString = true} -> channel(
  		SkipChannel), pushMode(PHP);
  CurlyString: '{' -> type(StringPart);
  EscapedChar: '\\' . -> type(StringPart);
  DoubleQuoteInInterpolation: '"' -> type(DoubleQuote), popMode;
  
negative.code: 
  }
  
  SeaWhitespace:[ \t\r\n]+ -> skip;
  HtmlText: ~[<#]+;
  PHPStartEcho:
  	PhpStartEchoFragment -> type(Echo), pushMode(PHP);
  PHPStart: PhpStartFragment -> skip, pushMode(PHP);
  HtmlScriptOpen:
  	'<' 'script' { this._scriptTag = true } -> pushMode(INSIDE);
  HtmlStyleOpen:
  	'<' 'style' { this._styleTag = true } -> pushMode(INSIDE);
  HtmlComment: '<' '!' '--' .*? '-->' -> skip;
  HtmlDtd: '<' '!' .*? '>';
  HtmlOpen: '<' -> pushMode(INSIDE);
  Shebang:
  