private Token getAtom(int chr) throws IOException, ParseException {
		String val = "";
		// 単体でアトムを構成
		if (",!|".indexOf(chr) != -1) {
			return new Token( ATOM_STR, String.valueOf((char) chr) );
		}
		// アルファベットのみで構成されるアトムか変数
		if (isJavaIdentifierStart(chr)) {
			do { val += (char) chr; } while (isJavaIdentifierPart(chr = reader.read()));
			ungetc(chr);
			return new Token(isUpperCase(val.charAt(0)) || val.charAt(0) == '_' ? VAR: ATOM_STR, val);
		}
		// 'アトム'
		if (chr == '\'') {
			while ((chr = readFully()) != '\'') {
				val += (char) chr;
				if (chr == '\\') { val += readFully(); }
			}
			return new Token( ATOM_STR, Quotemeta.decode(val), true );
		}
		// アトム
		ungetc(chr);
		if (!(val = repeat(PUNCTUATION)).isEmpty()) {
			return new Token( ATOM_STR, val );
		}
		return null;
	}