boolean clauseAtomSpec() {
		if (!tokenNext(Token.dot))
			return invalidAtomSpecification();
		Token tokenAtomSpec = tokenNext();
		if (tokenAtomSpec == null)
			return true;
		String atomSpec = "";
		if (tokenAtomSpec.tok == Token.integer) {
			atomSpec += "" + tokenAtomSpec.intValue;
			tokenAtomSpec = tokenNext();
			if (tokenAtomSpec == null)
				return invalidAtomSpecification();
		}
		switch (tokenAtomSpec.tok) {
		case Token.asterisk:
			return true;
		case Token.identifier:
			break;
		default:
			return invalidAtomSpecification();
		}
		atomSpec += (String) tokenAtomSpec.value;
		if (tokPeek() == Token.asterisk) {
			tokenNext();
			// this one is a '*' as a prime, not a wildcard
			atomSpec += "*";
		}
		return generateResidueSpecCode(new Token(Token.spec_atom, atomSpec));
	}