code: function() {
      const result = this.node("interface");
      if (this.token !== this.tok.T_INTERFACE) {
        this.error(this.tok.T_INTERFACE);
        this.next();
        return null;
      }
      this.next().expect(this.tok.T_STRING);
      let propName = this.node("identifier");
      const name = this.text();
      this.next();
      propName = propName(name);
      let propExtends = null;
      if (this.token === this.tok.T_EXTENDS) {
        propExtends = this.next().read_name_list();
      }
      this.expect("{");
      const body = this.next().read_interface_body();
      return result(propName, propExtends, body);
    }
docs: reading an interface
  ```ebnf
  interface ::= T_INTERFACE T_STRING (T_EXTENDS (NAMESPACE_NAME ',')* NAMESPACE_NAME)? '{' INTERFACE_BODY '}'
  ```