private MCandidate createRaw(String exp, String source)
	{
		MCandidate mCandidate = new MCandidate();
		StringTokenizer st = new StringTokenizer(source, "[]", false);

		// 기분석 결과 저장
		String token = null, infos = "";
		String[] arr = null;
		for( int i = 0; st.hasMoreTokens(); i++ ) {
			token = st.nextToken();
			if( i == 0 ) {
				arr = token.split("\\+");
				for( int j = 0; j < arr.length; j++ ) {
					// 일반적인 형태소 분석 결과 저장
					mCandidate.addMorp(arr[j]);
				}
			} else {
				infos = token;
			}
		}

		// 부가 정보들에 대한 처리 수행
		st = new StringTokenizer(infos, "*" + MCandidate.DLMT_ATL + MCandidate.DLMT_BCL + MCandidate.DLMT_HCL + MCandidate.DLMT_CCL + MCandidate.DLMT_ECL + MCandidate.DLMT_PRB, true);
		while( st.hasMoreTokens() ) {
			token = st.nextToken();
			// 접속 가능한 품사 정보
			if( token.equals(MCandidate.DLMT_ATL) ) {
				token = st.nextToken().trim();
				token = token.substring(1, token.length() - 1);
				mCandidate.addApndblTags(token.split(","));
			}
			// 현재 후보가 가진 접속 조건
			else if( token.equals(MCandidate.DLMT_HCL) ) {
				token = st.nextToken().trim();
				token = token.substring(1, token.length() - 1);
				mCandidate.addHavingConds(token.split(","));
			}
			// 접속 확인 조건
			else if( token.equals(MCandidate.DLMT_CCL) ) {
				token = st.nextToken().trim();
				token = token.substring(1, token.length() - 1);
				mCandidate.addChkConds(token.split(","));
			}
			// 접속 배제 조건
			else if( token.equals(MCandidate.DLMT_ECL) ) {
				token = st.nextToken().trim();
				token = token.substring(1, token.length() - 1);
				mCandidate.addExclusionConds(token.split(","));
			}
		}

		// 기본 음운, 접속 조건 초기화
		mCandidate.initConds(exp);
		return mCandidate;
	}