ÔÆÌ⺣ - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

µ±Ç°Î»ÖãºÊ×Ò³ > ±àÒëÔ­ÀíʵÑ鱨¸æ3-LL(1)ÎÄ·¨¹¹Ôì

±àÒëÔ­ÀíʵÑ鱨¸æ3-LL(1)ÎÄ·¨¹¹Ôì

  • 62 ´ÎÔĶÁ
  • 3 ´ÎÏÂÔØ
  • 2025/5/4 14:37:05

}

}

}

gp->P[i - 1].insert(0, 1, ch_i); for (; h <= s; h++) { }

gp->P[m - 1] += \;

gp->P[i - 1].erase(gp->P[i - 1].size() - 1, 1);

if (flagpos[h]) { }

splitstr[h] += newWord;

gp->P[i - 1] = gp->P[i - 1] + splitstr[h] + \;

simplify(gp); //»¯¼òÎÞÓõIJúÉúʽ

ÌáÈ¡×óÒò×Ó£¨°üÀ¨¸¨Öúº¯Êý£©£º

//¶Ô×Ö·û´®Êý×éÅÅÐò

void str_sort(string *str, int num) { }

/*×Óº¯Êý£¬ÌáÈ¡×óÒò×Ó*/

void remove_left_gene(struct grammar *gp) {

char ch, newWord;

for (rule_a = 0; rule_a < m; rule_a++) {

int bre = -1; int oldpo = 0; int num = 0, ps = 3; string str[30],restr[30];

//ǰÕßÓÃÓÚÅжϣ¬ÐèÒª±£³ÖÔ­Ñù£¬ºóÕßÓÃÓÚ¶ÔÓй«

//·Ö¸îÌæ»»ºóµÄ²úÉúʽ

//±éÀúËùÓвúÉúʽ

//±ê¼ÇÒѶԲúÉúʽ½øÐйý×óÒò×ÓµÄÌáÈ¡

int rule_a, i, j, k, l, matchnum,oldmatchnum, resize,size; int i, j;

for (i = 0; i < num; i++) { }

for (j = i + 1; j < num; j++) { }

if (str[i] > str[j])

str[i].swap(str[j]);

¹²×óÒò×ӵĺòÑ¡½øÐÐÌáÈ¡£¬¿É±ä

while (ps != gp->P[rule_a].size() + 1) { }

str_sort(str, num); str_sort(restr, num);

//¶ÔËùÓкòÑ¡°´ASCIIÂë½øÐÐÅÅÐò£¬ÒÔ±ãÓÚ¼ò

str[num] = strsplit(gp->P[rule_a], ps); restr[num] = str[num]; ps = ps + str[num].size() + 1; num++;

»¯¶Ô¹«¹²×óÒò×ÓµÄÅжϣ¬Ö»ÐèÏȶÔÇ°ÃæºòÑ¡ÅжÏ

int ca_i; string Pa = \;

Pa.insert(0, 1, gp->Vn[rule_a]);

for (ca_i = 0; ca_i < num; ca_i++) { //¶ÔÅÅÐòºóµÄºòÑ¡½øÐÐÖØ×é²¢´æÈëÎÄ·¨ }

gp->P[rule_a] = Pa; int ipo = 0;

ipo = 0; size = 0; resize = 0; oldmatchnum = 0; int i_s = str[i].size(); for (j = 0; j < i_s; j++) { }

/*Óй«¹²×óÒò×ӵĴ¦Àí¹ý³Ì*/

if (matchnum != oldmatchnum || j == i_s) {

bre ++;

string match, repstr, can, newP; match = str[i].substr(0, j);

//»ñÈ¡¹«¹²×óÒò×Ó

matchnum = 0; ch = str[i][j]; int kf = num;

for (k = i + 1; k < num && k < kf; k++) { //¶ÔiÖ®ºóµÄºòÑ¡½øÐÐÅжϣ¬ÊÇ·ñÓÐÓëi¶ÔÓ¦ }

if (j == 0) { } else { }

if (oldmatchnum != matchnum) break;

//ÅжÏÊÇ·ñÓй«¹²×óÒò×ÓÊÇiµÄµÚÒ»¸ö×Ö·ûµÄ

if (str[k][j] == ch) { } else { }

break; matchnum++;

//Óй«¹²×óÒò×Ó

//¶ÔºòÑ¡µÄÖð¸ö×Ö·û±éÀú

//±ê¼Ç³ýÁ˱¾Éí£¬Óм¸¸öºòÑ¡Óй«¹²×óÒò×Ó

//¸¨ÖúÃâ³ý¶ÔÒÑÅжϹýÓÐ×óÒò×ӵĺòÑ¡µÄ±éÀú

//±éÀúºòÑ¡

for (i = 0; i < num; i++,i += ipo) {

if (ca_i == num - 1) else

Pa += str[ca_i] + \; Pa += str[ca_i];

µÄ¹«¹²×óÒò×Ó

Çé¿ö£¬ÓÐÔòÌØ±ð´¦Àí

if (matchnum == 0)

break;

else { oldmatchnum = matchnum; kf = i + 1 + oldmatchnum; }

}

}

}

}

newWord = GetWord(gp->Vn); gp->Vn[m] = newWord; m++; newP = \;

newP.insert(0, 1, newWord); repstr = match + newWord; int renum = num; if (bre > 0) { }

//µÃµ½ÐµķÇÖÕ½á·û

//½«Ð·ÇÖÕ½á·û´æÈëÎÄ·¨

//µÃµ½Òª±»Ìæ»»µÄÓй«¹²×óÒò×ÓµÄËùÓкòÑ¡

//Èô¶Ôͬһ²úÉúʽ»¹´æÔÚÁíÒ»¸ö¹«¹²×óÒò×Ó£¨Ö®Ç°

ÌáÈ¡¹ýÒ»´Î×óÒò×Ó£©£¬Ðè½øÐÐÌØ±ð´¦Àí

size = resize = 0; renum = 0; ps = 3;

while (ps != gp->P[rule_a].size() + 1) { }

//·Ö¸î±ä»¯ºó

µÄ²úÉúʽ

restr[renum] = strsplit(gp->P[rule_a], ps); ps = ps + restr[renum].size() + 1; renum++;

/*½«ÒѾ­ÌáÈ¡¹ý×óÒò×ÓµÄÒÔºòѡΪµ¥Î»µÄ×Ö·û´®ÖØÐÂ×éºÏ³É²úÉúʽ£¨°üÀ¨Ð²úÉúfor (l = 0; l <= i - oldpo + oldmatchnum; l++) { }

gp->P[rule_a].replace(resize + 3, size + oldmatchnum, repstr); //Ô­²úÉúʽÒÔÌæ»»µÄ·½if (i + 1 + oldmatchnum > num) { break; } else oldpo = ipo = oldmatchnum;

if (l >= i - oldpo) { } else { }

resize += restr[l].size(); resize++;

size += restr[l].size(); can = restr[l].substr(j); if (can == \)

can = \;

if (l == i - oldpo + oldmatchnum) newP += can; else newP = newP + can + \; gp->P[m - 1] = newP;

ʽ£©*/

ʽ½øÐиıä

4¡¢ Ö÷³ÌÐò´úÂ룻

#include #include using namespace std;

struct grammar { };

int m = 0, n = 0;

char GetBC(FILE* fpi) { }

/*

ÕûÐͺ¯Êý£¬¶ÁÈëÒ»ÐвúÉúʽ·ÖÎö³öÎÄ·¨³ÉÔ±£¬²ÎÊý·Ö±ðÊÇÊäÈëÎı¾µÄÎļþÖ¸Õë¡¢ÎÄ·¨

µÚ¼¸ÐеIJúÉúʽ

*/

½á¹¹ÌåµÄÖ¸Õë

void scanP(FILE* fpi,struct grammar *gp) {

char ch; string str; if (feof(fpi))

//´æÈëÒ»Ìõ²úÉúʽ //µ½´ïÎļþβÔò·µ»Ø

//¶ÁÈë²úÉúʽ×󲿵ķÇÖÕ½á·û

//½«·ÇÖÕ½á·û´æÈë½á¹¹Ìå

return;

char ch; do {

ch = fgetc(fpi); } while (ch == ' '); return ch;

//×Óº¯Êý£¬ÓÃÓÚ¶Áȡһ¸ö·Ç¿Õ¸ñ×Ö·û

//È«¾Ö±äÁ¿£¬·Ö±ð±íʾ×î½ü´æÈë½á¹¹ÌåµÄ·ÇÖÕ½á·ûÓëÖÕ

½á·ûÊÇ×Ö·ûÊý×éµÄµÚ¼¸¸öλÖÃ

char Vn[20]; char Vt[20]; char S;

string P[20];

//ʹÓýṹÌ嶨ÒåÎÄ·¨ //·ÇÖÕ½á·û //ÖÕ½á·û //¿ªÊ¼·ûºÅ

//²úÉúʽ

ch = GetBC(fpi);

if (ch >= 'A' && ch <= 'Z') {

str += ch; gp->Vn[m] = ch; m++;

ch = GetBC(fpi); if (ch == '-') {

str += ch; ch = GetBC(fpi); if (ch == '>') {

str += ch; while (1) {

ch = GetBC(fpi); if (ch == '\\n' || ch == ';')

break;

//¶ÁÈë»»Ðзû

ËÑË÷¸ü¶à¹ØÓÚ£º ±àÒëÔ­ÀíʵÑ鱨¸æ3-LL(1)ÎÄ·¨¹¹Ôì µÄÎĵµ
  • ÊÕ²Ø
  • Î¥¹æ¾Ù±¨
  • °æÈ¨ÈÏÁì
ÏÂÔØÎĵµ10.00 Ôª ¼ÓÈëVIPÃâ·ÑÏÂÔØ
ÍÆ¼öÏÂÔØ
±¾ÎÄ×÷Õߣº...

¹²·ÖÏí92ƪÏà¹ØÎĵµ

Îĵµ¼ò½é£º

} } } gp->P[i - 1].insert(0, 1, ch_i); for (; h <= s; h++) { } gp->P[m - 1] += \; gp->P[i - 1].erase(gp->P[i - 1].size() - 1, 1); if (flagpos[h]) { } splitstr[h] += newWord; gp->P[i - 1] = gp->P[i - 1] + splitstr[h] + \; simplify(gp); //»¯¼òÎÞÓõIJúÉúʽ ÌáÈ¡×óÒò×Ó£¨°üÀ¨¸¨Öúº¯Êý£©£º //¶Ô×Ö·û´®Êý×éÅÅÐò

¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩
µ¥Æª¸¶·ÑÏÂÔØ
ÏÞÊ±ÌØ¼Û£º10 Ôª/·Ý Ô­¼Û:20Ôª
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºfanwen365 QQ£º370150219
Copyright © ÔÆÌ⺣ All Rights Reserved. ËÕICP±¸16052595ºÅ-3 ÍøÕ¾µØÍ¼ ¿Í·þQQ£º370150219 ÓÊÏ䣺370150219@qq.com