whole_func_string: function(lexer, ast) {
    this.lexer = lexer;
    this.ast = ast;
    this.tok = lexer.tok;
    this.EOF = lexer.EOF;
    this.token = null;
    this.prev = null;
    this.debug = false;
    this.php7 = true;
    this.extractDoc = false;
    this.extractTokens = false;
    this.suppressErrors = false;
    const mapIt = function(item) {
      return [item, null];
    };
    this.entries = {
      IDENTIFIER: new Map(
        [
          this.tok.T_ABSTRACT,
          this.tok.T_ARRAY,
          this.tok.T_AS,
          this.tok.T_BREAK,
          this.tok.T_CALLABLE,
          this.tok.T_CASE,
          this.tok.T_CATCH,
          this.tok.T_CLASS,
          this.tok.T_CLASS_C,
          this.tok.T_CLONE,
          this.tok.T_CONST,
          this.tok.T_CONTINUE,
          this.tok.T_DECLARE,
          this.tok.T_DEFAULT,
          this.tok.T_DIR,
          this.tok.T_DO,
          this.tok.T_ECHO,
          this.tok.T_ELSE,
          this.tok.T_ELSEIF,
          this.tok.T_EMPTY,
          this.tok.T_ENDDECLARE,
          this.tok.T_ENDFOR,
          this.tok.T_ENDFOREACH,
          this.tok.T_ENDIF,
          this.tok.T_ENDSWITCH,
          this.tok.T_ENDWHILE,
          this.tok.T_EVAL,
          this.tok.T_EXIT,
          this.tok.T_EXTENDS,
          this.tok.T_FILE,
          this.tok.T_FINAL,
          this.tok.T_FINALLY,
          this.tok.T_FUNC_C,
          this.tok.T_FOR,
          this.tok.T_FOREACH,
          this.tok.T_FUNCTION,
          this.tok.T_GLOBAL,
          this.tok.T_GOTO,
          this.tok.T_IF,
          this.tok.T_IMPLEMENTS,
          this.tok.T_INCLUDE,
          this.tok.T_INCLUDE_ONCE,
          this.tok.T_INSTANCEOF,
          this.tok.T_INSTEADOF,
          this.tok.T_INTERFACE,
          this.tok.T_ISSET,
          this.tok.T_LINE,
          this.tok.T_LIST,
          this.tok.T_LOGICAL_AND,
          this.tok.T_LOGICAL_OR,
          this.tok.T_LOGICAL_XOR,
          this.tok.T_METHOD_C,
          this.tok.T_NAMESPACE,
          this.tok.T_NEW,
          this.tok.T_NS_C,
          this.tok.T_PRINT,
          this.tok.T_PRIVATE,
          this.tok.T_PROTECTED,
          this.tok.T_PUBLIC,
          this.tok.T_REQUIRE,
          this.tok.T_REQUIRE_ONCE,
          this.tok.T_RETURN,
          this.tok.T_STATIC,
          this.tok.T_SWITCH,
          this.tok.T_THROW,
          this.tok.T_TRAIT,
          this.tok.T_TRY,
          this.tok.T_UNSET,
          this.tok.T_USE,
          this.tok.T_VAR,
          this.tok.T_WHILE,
          this.tok.T_YIELD
        ].map(mapIt)
      ),
      VARIABLE: new Map(
        [
          this.tok.T_VARIABLE,
          "$",
          "&",
          this.tok.T_NS_SEPARATOR,
          this.tok.T_STRING,
          this.tok.T_NAMESPACE,
          this.tok.T_STATIC
        ].map(mapIt)
      ),
      SCALAR: new Map(
        [
          this.tok.T_CONSTANT_ENCAPSED_STRING,
          this.tok.T_START_HEREDOC,
          this.tok.T_LNUMBER,
          this.tok.T_DNUMBER,
          this.tok.T_ARRAY,
          "[",
          this.tok.T_CLASS_C,
          this.tok.T_TRAIT_C,
          this.tok.T_FUNC_C,
          this.tok.T_METHOD_C,
          this.tok.T_LINE,
          this.tok.T_FILE,
          this.tok.T_DIR,
          this.tok.T_NS_C,
          '"',
          'b"',
          'B"',
          "-",
          this.tok.T_NS_SEPARATOR
        ].map(mapIt)
      ),
      T_MAGIC_CONST: new Map(
        [
          this.tok.T_CLASS_C,
          this.tok.T_TRAIT_C,
          this.tok.T_FUNC_C,
          this.tok.T_METHOD_C,
          this.tok.T_LINE,
          this.tok.T_FILE,
          this.tok.T_DIR,
          this.tok.T_NS_C
        ].map(mapIt)
      ),
      T_MEMBER_FLAGS: new Map(
        [
          this.tok.T_PUBLIC,
          this.tok.T_PRIVATE,
          this.tok.T_PROTECTED,
          this.tok.T_STATIC,
          this.tok.T_ABSTRACT,
          this.tok.T_FINAL
        ].map(mapIt)
      ),
      EOS: new Map([";", this.EOF, this.tok.T_INLINE_HTML].map(mapIt)),
      EXPR: new Map(
        [
          "@",
          "-",
          "+",
          "!",
          "~",
          "(",
          "`",
          this.tok.T_LIST,
          this.tok.T_CLONE,
          this.tok.T_INC,
          this.tok.T_DEC,
          this.tok.T_NEW,
          this.tok.T_ISSET,
          this.tok.T_EMPTY,
          this.tok.T_INCLUDE,
          this.tok.T_INCLUDE_ONCE,
          this.tok.T_REQUIRE,
          this.tok.T_REQUIRE_ONCE,
          this.tok.T_EVAL,
          this.tok.T_INT_CAST,
          this.tok.T_DOUBLE_CAST,
          this.tok.T_STRING_CAST,
          this.tok.T_ARRAY_CAST,
          this.tok.T_OBJECT_CAST,
          this.tok.T_BOOL_CAST,
          this.tok.T_UNSET_CAST,
          this.tok.T_EXIT,
          this.tok.T_PRINT,
          this.tok.T_YIELD,
          this.tok.T_STATIC,
          this.tok.T_FUNCTION,
          // using VARIABLES :
          this.tok.T_VARIABLE,
          "$",
          this.tok.T_NS_SEPARATOR,
          this.tok.T_STRING,
          // using SCALAR :
          this.tok.T_STRING, // @see variable.js line 45 > conflict with variable = shift/reduce :)
          this.tok.T_CONSTANT_ENCAPSED_STRING,
          this.tok.T_START_HEREDOC,
          this.tok.T_LNUMBER,
          this.tok.T_DNUMBER,
          this.tok.T_ARRAY,
          "[",
          this.tok.T_CLASS_C,
          this.tok.T_TRAIT_C,
          this.tok.T_FUNC_C,
          this.tok.T_METHOD_C,
          this.tok.T_LINE,
          this.tok.T_FILE,
          this.tok.T_DIR,
          this.tok.T_NS_C
        ].map(mapIt)
      )
    };
  }
func_code_string: function(lexer, ast) {
    this.lexer = lexer;
    this.ast = ast;
    this.tok = lexer.tok;
    this.EOF = lexer.EOF;
    this.token = null;
    this.prev = null;
    this.debug = false;
    this.php7 = true;
    this.extractDoc = false;
    this.extractTokens = false;
    this.suppressErrors = false;
    const mapIt = function(item) {
      return [item, null];
    };
    this.entries = {
      IDENTIFIER: new Map(
        [
          this.tok.T_ABSTRACT,
          this.tok.T_ARRAY,
          this.tok.T_AS,
          this.tok.T_BREAK,
          this.tok.T_CALLABLE,
          this.tok.T_CASE,
          this.tok.T_CATCH,
          this.tok.T_CLASS,
          this.tok.T_CLASS_C,
          this.tok.T_CLONE,
          this.tok.T_CONST,
          this.tok.T_CONTINUE,
          this.tok.T_DECLARE,
          this.tok.T_DEFAULT,
          this.tok.T_DIR,
          this.tok.T_DO,
          this.tok.T_ECHO,
          this.tok.T_ELSE,
          this.tok.T_ELSEIF,
          this.tok.T_EMPTY,
          this.tok.T_ENDDECLARE,
          this.tok.T_ENDFOR,
          this.tok.T_ENDFOREACH,
          this.tok.T_ENDIF,
          this.tok.T_ENDSWITCH,
          this.tok.T_ENDWHILE,
          this.tok.T_EVAL,
          this.tok.T_EXIT,
          this.tok.T_EXTENDS,
          this.tok.T_FILE,
          this.tok.T_FINAL,
          this.tok.T_FINALLY,
          this.tok.T_FUNC_C,
          this.tok.T_FOR,
          this.tok.T_FOREACH,
          this.tok.T_FUNCTION,
          this.tok.T_GLOBAL,
          this.tok.T_GOTO,
          this.tok.T_IF,
          this.tok.T_IMPLEMENTS,
          this.tok.T_INCLUDE,
          this.tok.T_INCLUDE_ONCE,
          this.tok.T_INSTANCEOF,
          this.tok.T_INSTEADOF,
          this.tok.T_INTERFACE,
          this.tok.T_ISSET,
          this.tok.T_LINE,
          this.tok.T_LIST,
          this.tok.T_LOGICAL_AND,
          this.tok.T_LOGICAL_OR,
          this.tok.T_LOGICAL_XOR,
          this.tok.T_METHOD_C,
          this.tok.T_NAMESPACE,
          this.tok.T_NEW,
          this.tok.T_NS_C,
          this.tok.T_PRINT,
          this.tok.T_PRIVATE,
          this.tok.T_PROTECTED,
          this.tok.T_PUBLIC,
          this.tok.T_REQUIRE,
          this.tok.T_REQUIRE_ONCE,
          this.tok.T_RETURN,
          this.tok.T_STATIC,
          this.tok.T_SWITCH,
          this.tok.T_THROW,
          this.tok.T_TRAIT,
          this.tok.T_TRY,
          this.tok.T_UNSET,
          this.tok.T_USE,
          this.tok.T_VAR,
          this.tok.T_WHILE,
          this.tok.T_YIELD
        ].map(mapIt)
      ),
      VARIABLE: new Map(
        [
          this.tok.T_VARIABLE,
          "$",
          "&",
          this.tok.T_NS_SEPARATOR,
          this.tok.T_STRING,
          this.tok.T_NAMESPACE,
          this.tok.T_STATIC
        ].map(mapIt)
      ),
      SCALAR: new Map(
        [
          this.tok.T_CONSTANT_ENCAPSED_STRING,
          this.tok.T_START_HEREDOC,
          this.tok.T_LNUMBER,
          this.tok.T_DNUMBER,
          this.tok.T_ARRAY,
          "[",
          this.tok.T_CLASS_C,
          this.tok.T_TRAIT_C,
          this.tok.T_FUNC_C,
          this.tok.T_METHOD_C,
          this.tok.T_LINE,
          this.tok.T_FILE,
          this.tok.T_DIR,
          this.tok.T_NS_C,
          '"',
          'b"',
          'B"',
          "-",
          this.tok.T_NS_SEPARATOR
        ].map(mapIt)
      ),
      T_MAGIC_CONST: new Map(
        [
          this.tok.T_CLASS_C,
          this.tok.T_TRAIT_C,
          this.tok.T_FUNC_C,
          this.tok.T_METHOD_C,
          this.tok.T_LINE,
          this.tok.T_FILE,
          this.tok.T_DIR,
          this.tok.T_NS_C
        ].map(mapIt)
      ),
      T_MEMBER_FLAGS: new Map(
        [
          this.tok.T_PUBLIC,
          this.tok.T_PRIVATE,
          this.tok.T_PROTECTED,
          this.tok.T_STATIC,
          this.tok.T_ABSTRACT,
          this.tok.T_FINAL
        ].map(mapIt)
      ),
      EOS: new Map([";", this.EOF, this.tok.T_INLINE_HTML].map(mapIt)),
      EXPR: new Map(
        [
          "@",
          "-",
          "+",
          "!",
          "~",
          "(",
          "`",
          this.tok.T_LIST,
          this.tok.T_CLONE,
          this.tok.T_INC,
          this.tok.T_DEC,
          this.tok.T_NEW,
          this.tok.T_ISSET,
          this.tok.T_EMPTY,
          this.tok.T_INCLUDE,
          this.tok.T_INCLUDE_ONCE,
          this.tok.T_REQUIRE,
          this.tok.T_REQUIRE_ONCE,
          this.tok.T_EVAL,
          this.tok.T_INT_CAST,
          this.tok.T_DOUBLE_CAST,
          this.tok.T_STRING_CAST,
          this.tok.T_ARRAY_CAST,
          this.tok.T_OBJECT_CAST,
          this.tok.T_BOOL_CAST,
          this.tok.T_UNSET_CAST,
          this.tok.T_EXIT,
          this.tok.T_PRINT,
          this.tok.T_YIELD,
          this.tok.T_STATIC,
          this.tok.T_FUNCTION,
          // using VARIABLES :
          this.tok.T_VARIABLE,
          "$",
          this.tok.T_NS_SEPARATOR,
          this.tok.T_STRING,
          // using SCALAR :
          this.tok.T_STRING, // @see variable.js line 45 > conflict with variable = shift/reduce :)
          this.tok.T_CONSTANT_ENCAPSED_STRING,
          this.tok.T_START_HEREDOC,
          this.tok.T_LNUMBER,
          this.tok.T_DNUMBER,
          this.tok.T_ARRAY,
          "[",
          this.tok.T_CLASS_C,
          this.tok.T_TRAIT_C,
          this.tok.T_FUNC_C,
          this.tok.T_METHOD_C,
          this.tok.T_LINE,
          this.tok.T_FILE,
          this.tok.T_DIR,
          this.tok.T_NS_C
        ].map(mapIt)
      )
    };
  }
func_documentation_string: The PHP Parser class that build the AST tree from the lexer
  
  @class
  @tutorial Parser
  @property {Lexer} lexer - current lexer instance
  @property {AST} ast - the AST factory instance
  @property {Integer|String} token - current token
  @property {Boolean} extractDoc - should extract documentation as AST node
  @property {Boolean} extractTokens - should extract each token
  @property {Boolean} suppressErrors - should ignore parsing errors and continue
  @property {Boolean} debug - should output debug informations