±àÒëÔÀíʵÑ鱨¸æ
ʵÑéÃû³Æ£ºÓï·¨·ÖÎöÆ÷Éè¼Æ
רҵ£º¼ÆËã»ú¿ÆÑ§Óë¼¼Êõ ÐÕÃû£ºÌïÀòÀò ѧºÅ£º201117906
Óï·¨·ÖÎö¡ªËã·ûÓÅÏÈ·ÖÎö³ÌÐò
Ò»£®ÊµÑéÒªÇó
¢Å Ñ¡Ôñ×îÓдú±íÐÔµÄÓï·¨·ÖÎö·½·¨£¬ÈçËã·ûÓÅÏÈ·¨¡¢µÝ¹é×Ó³ÌÐò·¨»òLR·ÖÎö·¨
¢Æ Ñ¡Ôñ¶Ô¸÷ÖÖ³£¼û³ÌÐòÓïÑÔ¶¼ÓõÄÓï·¨½á¹¹£¬È縳ֵÓï¾ä£¨ÓÈÖ¸±í´ïʽ£©×÷Ϊ·ÖÎö¶ÔÏ󣬲¢ÇÒÓëËùÑ¡Óï·¨·ÖÎö·½·¨Òª±È½ÏÌùÇС£
¢Ç ʵϰʱ¼äΪ6ѧʱ¡£
¶þ£®ÊµÑéÄÚÈݼ°ÒªÇó
£¨1£©¸ù¾Ý¸ø¶¨ÎÄ·¨£¬ÏÈÇó³öFirstVtºÍLastVt¼¯ºÏ£¬¹¹ÔìËã·ûÓÅÏȹØÏµ±í£¨ÒªÇóËã·ûÓÅÏȹØÏµ±í Êä³öµ½ÆÁÄ»»òÕßÊä³öµ½Îļþ£©£»
£¨2£©¸ù¾ÝËã·¨ºÍÓÅÏȹØÏµ±í·ÖÎö¸ø¶¨±í´ïʽÊÇ·ñÊǸÃÎÄ·¨Ê¶±ðµÄÕýÈ·µÄËãÊõ±í´ïʽ£¨ÒªÇóÊä³ö¹éÔ¼¹ý³Ì£©
£¨3£©¸ø¶¨±í´ïʽÎÄ·¨Îª£º G(E¡¯): E¡¯¡ú#E#
E¡úE+T | T T¡úT*F |F F¡ú(E)|i
(4)·ÖÎöµÄ¾ä×ÓΪ: (i+i)*iºÍi+i)*i
Èý£®³ÌÐòÉè¼ÆË¼Ï뼰ʵÏÖ²½Öè
³ÌÐòµÄÉè¼ÆË¼Ï룺
°´ÕÕ±àÒëÔÀí½Ì²ÄÌṩµÄËã·¨£¬±¾³ÌÐòµÄÉè¼ÆÖ÷ҪʵÏÖÈý¸öÖ÷ÒªµÄ¹ý³Ì£º £¨1£© Çó½âFristVT¼¯ºÍLastVT¼¯£ºÀûÓÃCStringÊý×é´æ·ÅVT¼¯£¬ÀûÓÃÊý×é
ϱê¶ÔÓ¦·ÇÖÕ½á·û¹ØÏµ£»
£¨2£© Êä³öËã·ûÓÅÏÈ·ÖÎö±í£ºÀûÓÃMFCÖеÄClistCtrl¿Ø¼þÊä³öÏÔʾËã·û±í£¬
±ÈÀûÓöþάÊý×é¶ÔÓ¦ÆäÔÚÄÚ´æÖеĹØÏµ¡£
£¨3£© ÀûÓÃËã·ûÓÅÏÈ·ÖÎö±í½øÐйéÔ¼£º¸ù¾Ý½Ì²ÄËù¸øËã·¨£¬²¢¶ÔÆä½øÐÐʵÏÖÔÚ
ÆÁÄ»ÉÏÊä³ö¹éÔ¼¹ý³Ì¡£
ʵÏÖ²½Ö裺
1¡¢Îª³ÌÐò¸÷±äÁ¿Éè¼Æ´æ´¢ÐÎʽ£¬¾ßÌåÉè¼ÆÈçÏÂËùʾ£º
CString m_strTElem[T_LEN]; CString m_strNTElem[NT_LEN]; CMapStringToPtr m_mapProdu;
//ÖÕ½á·û //·ÇÖÕ½á·û //´æ·Å²úÉúʽ
CMapStringToPtr m_mapProduEX; CString m_strFristVT[NT_LEN]; CString m_strLastVT[NT_LEN]; int m_nPriSheet[T_LEN+1][T_LEN+1]; Find m_F[STACK_LEN]; CStrack m_stack;
//´æ·ÅÀ©Õ¹²úÉúʽ //fristVT¼¯ //lastVT¼¯
//ÓÅÏÈ±í£»ÎÞÇî´ó±íʾ¿Õ°×£¬-1±íʾСÓÚ£¬0±íʾÏàµÈ£¬1±íʾ´óÓÚ //boolÊý×é //¶ÑÕ»
2¡¢Îª³ÌÐòÉè¼Æ¸÷¸ö¹ý³Ì£¬¾ßÌåÉè¼ÆÈçÏÂËùʾ£º
void CreateFristVT(Find* F); //Ϊÿһ¸ö·ÇÖÕ½á·û´´½¨FristVT¼¯ void CreateLastVT(Find* F); //Ϊÿһ¸ö·ÇÖÕ½á·û/´´½¨LastVT¼¯ void SearchPForFirtVT(Find& f); //ËÑË÷ÐÎÈçP->a¡.»òP->Qa¡. µÄ²úÉúʽ void SearchQForFristVT(void); //ËÑË÷ÐÎÈçP->....QµÄ²úÉúʽ void SearchPForLastVT(Find& f); //ËÑË÷ÐÎÈçP->...aQ»òP->...aµÄ²úÉúʽ void SearchQForLastVT(void); //ËÑË÷ÐÎÈçP->....QµÄ²úÉúʽ OnBnClickedBtnAnasysic(); //µã»÷°´Å¥Æô¶¯·ÖÎö
3¡¢¶Ô¸÷¸ö¹ý³Ì½øÐÐʵÏÖ£»
4¡¢µ÷ÊÔÔËÐв¢¼ìÑéʵÑé½á¹û£¬½á¹ûÈçͼ2.1ºÍ2.2Ëùʾ£º
ͼ2.1 ·ÖÎö³É¹¦Í¼
ͼ2.2 ·ÖÎöʧ°Üͼ
ËÄ£®³ÌÐòÔ´Âë
²úÉúʽ³õʼ»¯£º
//²úÉúʽ
CString* str = new CString; *str = _T(\
m_mapProdu.SetAt(_T(\ CString* str1 = new CString; *str1 = _T(\
m_mapProdu.SetAt(_T(\CString* str2 = new CString ; *str2 = _T(\
m_mapProdu.SetAt(_T(\CString* str3 = new CString;
*str3 = _T(\ m_mapProduEX.SetAt(_T(\CString* str4 = new CString; *str4 = _T(\
m_mapProduEX.SetAt(_T(\CString* str5 = new CString ; *str5 = _T(\
m_mapProduEX.SetAt(_T(\
³ÌÐòÖ÷Òª´úÂ룺
void CGrammarAnalysisDlg::InitFind(void) {
int i,j; int k = 0;
while(k { for(i=0;i for(j=0;j m_F[k].m_strNTerm = m_strNTElem[i];
Ïà¹ØÍÆ¼ö£º