±àÒëÔ­Àí´Ê·¨·ÖÎö±¨¸æ,Óï·¨·ÖÎö±¨¸æÊµÑ鱨¸æ²ÄÁÏ ÏÂÔØ±¾ÎÄ

ʵÓñê×¼

±àÒëÔ­ÀíʵÑ鱨¸æ

Ò»£®LL(1)ÎÄ·¨·ÖÎö

1.Éè¼ÆÒªÇó

£¨1£©¶ÔÊäÈëÎÄ·¨£¬ËüÄÜÅжÏÊÇ·ñΪLL(1)ÎÄ·¨£¬ÈôÊÇ£¬Ôòת£¨2£©£»·ñÔò±¨´í²¢

ÖÕÖ¹£»

£¨2£©ÊäÈëÒÑÖªÎÄ·¨£¬ÓɳÌÐò×Ô¶¯Éú³ÉËüµÄLL(1)·ÖÎö±í£»

£¨3£©¶ÔÓÚ¸ø¶¨µÄÊäÈë´®£¬Ó¦ÄÜÅжÏʶ±ð¸Ã´®ÊÇ·ñΪ¸ø¶¨ÎÄ·¨µÄ¾äÐÍ¡£

2.·ÖÎö

¸Ã³ÌÐò¿É·ÖΪÈçϼ¸²½£º £¨1£©¶ÁÈëÎÄ·¨ £¨2£©ÅжÏÕýÎó

£¨3£©ÈôÎÞÎó£¬ÅжÏÊÇ·ñΪLL(1)ÎÄ·¨ £¨4£©ÈôÊÇ£¬¹¹Ôì·ÖÎö±í£»

£¨5£©ÓÉ×Ü¿ØËã·¨ÅжÏÊäÈë·ûºÅ´®ÊÇ·ñΪ¸ÃÎÄ·¨µÄ¾äÐÍ¡£

3.Á÷³Ìͼ

Îݸ´óÈ«

ÊÇLL(1)ÎÄ·¨£¿ ÓÐЧ£¿ ¶ÁÈëÎÄ·¨ ¿ªÊ¼ ÊÇ ÊÇ ÅжϾäÐÍ ±¨´í ½áÊø ʵÓñê×¼

4.Ô´³ÌÐò

/******************************************* Óï·¨·ÖÎö³ÌÐò

×÷Õߣºxxx ѧºÅ£ºxxx

********************************************/ #include #include #include

/*******************************************/

int count=0; /*·Ö½âµÄ²úÉúʽµÄ¸öÊý*/

int number; /*ËùÓÐÖÕ½á·ûºÍ·ÇÖÕ½á·ûµÄ×ÜÊý*/ char start; /*¿ªÊ¼·ûºÅ*/ char termin[50]; /*ÖÕ½á·ûºÅ*/ char non_ter[50]; /*·ÇÖÕ½á·ûºÅ*/ char v[50]; /*ËùÓзûºÅ*/ char left[50]; /*×ó²¿*/ char right[50][50]; /*ÓÒ²¿*/

char first[50][50],follow[50][50]; /*¸÷²úÉúʽÓÒ²¿µÄFIRSTºÍ×󲿵ÄFOLLOW¼¯ºÏ*/ char first1[50][50]; /*ËùÓе¥¸ö·ûºÅµÄFIRST¼¯ºÏ*/ char select[50][50]; /*¸÷µ¥¸ö²úÉúʽµÄSELECT¼¯ºÏ*/

char f[50],F[50]; /*¼Ç¼¸÷·ûºÅµÄFIRSTºÍFOLLOWÊÇ·ñÒÑÇó¹ý*/ char empty[20]; /*¼Ç¼¿ÉÖ±½ÓÍÆ³ö^µÄ·ûºÅ*/

char TEMP[50]; /*ÇóFOLLOWʱ´æ·Åijһ·ûºÅ´®µÄFIRST¼¯ºÏ*/ int validity=1; /*±íʾÊäÈëÎÄ·¨ÊÇ·ñÓÐЧ*/ int ll=1; /*±íʾÊäÈëÎÄ·¨ÊÇ·ñΪLL(1)ÎÄ·¨*/ int M[20][20]; /*·ÖÎö±í*/

char choose; /*Óû§ÊäÈëʱʹÓÃ*/ char empt[20]; /*Çó_emp()ʱʹÓÃ*/ char fo[20]; /*ÇóFOLLOW¼¯ºÏʱʹÓÃ*/

/******************************************* ÅжÏÒ»¸ö×Ö·ûÊÇ·ñÔÚÖ¸¶¨×Ö·û´®ÖÐ

********************************************/ int in(char c,char *p) {

int i;

if(strlen(p)==0)

Îݸ´óÈ«

ʵÓñê×¼ }

/******************************************* µÃµ½Ò»¸ö²»ÊÇ·ÇÖÕ½á·ûµÄ·ûºÅ

********************************************/ char c() { }

/******************************************* ·Ö½âº¬ÓÐ×óµÝ¹éµÄ²úÉúʽ

********************************************/ void recur(char *point)

{ /*ÍêÕûµÄ²úÉúʽÔÚpoint[]ÖÐ*/ int j,m=0,n=3,k;

char temp[20],ch;

ch=c(); /*µÃµ½Ò»¸ö·ÇÖÕ½á·û*/ k=strlen(non_ter); non_ter[k]=ch; non_ter[k+1]='\\0';

for(j=0;j<=strlen(point)-1;j++) {

if(point[n]==point[0])

{ /*Èç¹û¡®|¡¯ºóµÄÊ×·ûºÅºÍ×ó²¿Ïàͬ*/

for(j=n+1;j<=strlen(point)-1;j++) {

while(point[j]!='|'&&point[j]!='\\0')

temp[m++]=point[j++]; left[count]=ch;

memcpy(right[count],temp,m); right[count][m]=ch; right[count][m+1]='\\0'; m=0; count++;

char c='A';

c++;

while(in(c,non_ter)==1)

return(c); { }

return(0);

if(p[i]==c)

return(1); /*ÈôÔÚ£¬·µ»Ø1*/ if(i==strlen(p))

return(0); /*Èô²»ÔÚ£¬·µ»Ø0*/

for(i=0;;i++)

Îݸ´óÈ«

ʵÓñê×¼ }

/******************************************* ·Ö½â²»º¬ÓÐ×óµÝ¹éµÄ²úÉúʽ

********************************************/ void non_re(char *point) {

int m=0,j;

char temp[20]; }

} else

{ /*Èç¹û¡®|¡¯ºóµÄÊ×·ûºÅºÍ×󲿲»Í¬*/

left[count]=ch; right[count][0]='^'; right[count][1]='\\0'; count++;

for(j=n;j<=strlen(point)-1;j++) {

if(point[j]!='|')

temp[m++]=point[j]; else }

{

left[count]=point[0];

memcpy(right[count],temp,m); right[count][m]=ch; right[count][m+1]='\\0'; }

printf(\m=0;

}

if(point[j]=='|') { }

n=j+1; break;

count++;

left[count]=point[0];

memcpy(right[count],temp,m); right[count][m]=ch;

right[count][m+1]='\\0'; count++; }

m=0;

Îݸ´óÈ«