code: func (st *state) javaResource() AST {
  	off := st.off
  	ln := st.number()
  	if ln <= 1 {
  		st.failEarlier("java resource length less than 1", st.off-off)
  	}
  	if len(st.str) == 0 || st.str[0] != '_' {
  		st.fail("expected _ after number")
  	}
  	st.advance(1)
  	ln--
  	if len(st.str) < ln {
  		st.fail("not enough characters for java resource length")
  	}
  	str := st.str[:ln]
  	final := ""
  	st.advance(ln)
  	for i := 0; i < len(str); i++ {
  		if str[i] != '$' {
  			final += string(str[i])
  		} else {
  			if len(str) <= i+1 {
  				st.failEarlier("java resource escape at end of string", 1)
  			}
  			i++
  			r, ok := map[byte]string{
  				'S': "/",
  				'_': ".",
  				'$': "$",
  			}[str[i]]
  			if !ok {
  				st.failEarlier("unrecognized java resource escape", ln-i-1)
  			}
  			final += r
  		}
  	}
  	return &Special{Prefix: "java resource ", Val: &Name{Name: final}}
  }
docs: // Parse a Java resource special-name.