private boolean parseAxisSpecifier(PsiBuilder builder) {
    final PsiBuilder.Marker marker = builder.mark();
    final IElementType tokenType = builder.getTokenType();
    if (XPathTokenTypes.AXIS.contains(tokenType)) {
      builder.advanceLexer();
      checkMatches(builder, XPathTokenTypes.COLCOL, XPathBundle.message("parsing.error.double.colon.expected"));
    } else {
      if (tokenType == XPathTokenTypes.AT) {
        builder.advanceLexer();
      } else if (tokenType == XPathTokenTypes.DOT || tokenType == XPathTokenTypes.DOTDOT) {
        marker.drop();
        return false;
      } else {
        final PsiBuilder.Marker m = builder.mark();
        final boolean b = parseNodeTest(builder);
        m.rollbackTo();
        if (!b) {
          marker.drop();
          return false;
        }
      }
    }
    marker.done(XPathElementTypes.AXIS_SPECIFIER);
    return true;
  }
private boolean parseAxisSpecifier(PsiBuilder builder)