whole_func_string: function() {
      let offset = this.node();
      if (this.token === this.tok.T_STRING) {
        const text = this.text();
        this.next();
        offset = offset("identifier", text);
      } else if (this.token === this.tok.T_NUM_STRING) {
        const num = this.text();
        this.next();
        offset = offset("number", num, null);
      } else if (this.token === this.tok.T_VARIABLE) {
        const name = this.text().substring(1);
        this.next();
        offset = offset("variable", name, false, false);
      } else {
        this.expect([
          this.tok.T_STRING,
          this.tok.T_NUM_STRING,
          this.tok.T_VARIABLE
        ]);
        // fallback : consider as identifier
        const text = this.text();
        this.next();
        offset = offset("identifier", text);
      }
      return offset;
    }
func_code_string: function() {
      let offset = this.node();
      if (this.token === this.tok.T_STRING) {
        const text = this.text();
        this.next();
        offset = offset("identifier", text);
      } else if (this.token === this.tok.T_NUM_STRING) {
        const num = this.text();
        this.next();
        offset = offset("number", num, null);
      } else if (this.token === this.tok.T_VARIABLE) {
        const name = this.text().substring(1);
        this.next();
        offset = offset("variable", name, false, false);
      } else {
        this.expect([
          this.tok.T_STRING,
          this.tok.T_NUM_STRING,
          this.tok.T_VARIABLE
        ]);
        // fallback : consider as identifier
        const text = this.text();
        this.next();
        offset = offset("identifier", text);
      }
      return offset;
    }
func_documentation_string: https://github.com/php/php-src/blob/493524454d66adde84e00d249d607ecd540de99f/Zend/zend_language_parser.y#L1231