docs: private AstNode attributeAccess()
          throws IOException
      {
          int tt = nextToken(), atPos = ts.tokenBeg;
  
          switch (tt) {
            // handles: @name, @ns::name, @ns::*, @ns::[expr]
            case Token.NAME:
                return propertyName(atPos, ts.getString(), 0);
  
            // handles: @*, @*::name, @*::*, @*::[expr]
            case Token.MUL:
                saveNameTokenData(ts.tokenBeg, "*", ts.lineno);
                return propertyName(atPos, "*", 0);
  
            // handles @[expr]
            case Token.LB:
                return xmlElemRef(atPos, null, -1);
  
            default:
                reportError("msg.no.name.after.xmlAttr");
                return makeErrorNode();
          }
      }