亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lr(1).cpp

?? LR(1)分析器文法分析程序
?? CPP
字號:
/*
  Name: LR(1)分析器的構造 
  Author: wangrui 
  Date: 07-06-07
  Description: 輸入文法,構造出相應的LR(1)分析器 
*/
#include"iostream"
using namespace std;


char G[20][20];     //use a matrix to store grammar G
int  length[20];    //length use to store each formula's length
int  number = 0;
bool tempofinput[150];  //buffer of input
char str_vn[20];        //put all vn into it
int  size_vn = 0;       
char str_vt[150];       //put all vt into it
int  size_vt = 0;
bool first_vn[30][150];
char buffer[50];            //用來存放生成LR(1) 項目集時需要的first_set 
int  bsize = 0;
struct thri{
    int beg;
    int nex;
    char ch;
};
thri trans[200];
int  size_trans = 0;

/*
定義項目集的形式 
*/
struct proj{
    int formula_numb;
    int part;
    char expc;
};

proj    items[100][100];
int     Ccount = 0;
int     size_item[100];

void Read_G()
{
	int i;
    cin >> number;   //user should give the number of formula first
    for(i = 1; i <= number; i++){
        char temp;
        int j = 0;
        cin >> temp;
        while(temp != '$'){
            tempofinput[temp] = true;
            G[i][j++] = temp;
            cin >> temp;
        }
        length[i] = j;
    }
    
    G[0][0] = 'S';
    G[0][1] = G[1][0];
    length[0] = 2;
    
    for( i = 0; i < 64; i++)
        if(tempofinput[i])
           str_vt[size_vt++] = i;
    for( i = 91; i < 128; i++)
        if(tempofinput[i])
           str_vt[size_vt++] = i;
    for( i = 65; i < 91; i++)
        if(tempofinput[i])
           str_vn[size_vn++] = i;
    /*for(int i = 0; i < size_vn; i++)
        cout << str_vn[i] << ";";
    cout << endl << endl;
    cout << "size:" << size_vt << endl;
    for(int i = 0; i < size_vt; i++)
        cout << str_vt[i] << ";";
    cout << endl;
    */
    
}

void get_first(){
	int k;
    bool flag1;
    do{ 
        flag1 = false;
        for(int i = 1; i <= number; i++){
           int t = 1;
           bool flag2 = false;
           do{
               flag2 = false;
               if (G[i][t] >= 'A' && G[i][t] <= 'Z'){
                      for( k = 0; k < 64; k++)
                          if(first_vn[G[i][t]-'A'][k] == true && !first_vn[G[i][0]-'A'][k]){
                             first_vn[G[i][0]-'A'][k] = true;
                             flag1 = true;
                          }
                      for(k = 91; k < 128; k++)
                          if(first_vn[G[i][t]-'A'][k] == true && !first_vn[G[i][0]-'A'][k]){
                             first_vn[G[i][0]-'A'][k] = true;
                             flag1 = true;
                          }
                      if(first_vn[G[i][t]-'A'][64] == true){
                          t++;
                          flag2 = true;
                      }
                }
                else if(!first_vn[G[i][0]-'A'][ G[i][t] ]){
                      first_vn[G[i][0]-'A'][ G[i][t] ] = true;
                      flag1 = true;
                }
           }while(flag2 && t < length[i]);
           if(t == length[i])
                first_vn[G[i][0]-'A'][26] = true;
        }
        
    }while(flag1);
}
/*j判斷項目數否在項目集里*/
bool is_in(proj temp,int T){
    for(int i = 0; i < size_item[T]; i++)
        if(temp.formula_numb == items[T][i].formula_numb && temp.part == items[T][i].part && temp.expc == items[T][i].expc)
                return true;
    return false;
}

void  gete_expc(proj temp){
	int i;
    bsize = 0;    
    bool flag;
    int tt = temp.part;
    do{
        flag = false;
        if(tt+1 >= length[temp.formula_numb]){
                buffer[bsize++] = temp.expc;
                return;
        }
        else if(G[temp.formula_numb][tt+1] < 'A' || G[temp.formula_numb][tt+1] > 'Z'){
                buffer[bsize++] = G[temp.formula_numb][tt+1];
                return;
        }    
        else if(G[temp.formula_numb][tt+1] >= 'A' && G[temp.formula_numb][tt+1] <= 'Z'){
                for( i = 0; i < 64; i++){
                   if(first_vn[ G[temp.formula_numb][tt+1]-'A' ][i])
                      buffer[bsize++] = i;
                }
                for( i = 91; i < 128; i++){
                   if(first_vn[ G[temp.formula_numb][tt+1]-'A' ][i])
                      buffer[bsize++] = i;
                }
                if(first_vn[ G[temp.formula_numb][tt+1]-'A' ][64]){
                   tt++;
                   flag = true;
                }
        }
        
    }while(flag);
}



void e_closure(int T){
    //cout << "T: " << T << "," << size_item[T] << endl;
    
     for(int i = 0; i < size_item[T]; i++){  
       proj temp;
       if(G[items[T][i].formula_numb][items[T][i].part] >= 'A' && G[items[T][i].formula_numb][items[T][i].part] <= 'Z'){
           for(int j = 0; j < 20; j++)
               if(G[j][0] == G[items[T][i].formula_numb][items[T][i].part]){
                 gete_expc(items[T][i]);
                 for(int k = 0; k < bsize; k++){
                         temp.formula_numb = j;
                         temp.part = 1;
                         temp.expc = buffer[k];
                         if(!is_in(temp,T))
                           items[T][size_item[T]++] = temp;
                 }
                 bsize = 0;
               }
       }
     }
/*     for(int i = 0; i < size_item[T]; i++)
          printf("%d , %d , %c\n",items[T][i].formula_numb,items[T][i].part,items[T][i].expc);
     cout << "***************************************" << endl;
*/
     
     return ;
}

int is_contained()
{
    for(int i = 0; i < Ccount; i++){
       int s = 0;        //記錄有多少是匹配的 
       if(size_item[i] == size_item[Ccount])
                for(int j = 0; j < size_item[Ccount]; j++){
                   for(int k = 0; k < size_item[i]; k++)
                       if((items[Ccount][j].formula_numb == items[i][k].formula_numb) && (items[Ccount][j].part == items[i][k].part) && (items[Ccount][j].expc == items[i][k].expc)){
                                              s++;
                                              break;
                       }
                }
       if(s == size_item[Ccount])
                return i;
    }   
    return 0;
                
    
}

void go(){
	int j;
    proj init;
    init.expc = '#';
    init.formula_numb = 0;
    init.part = 1;
    items[0][0] = init;
    size_item[0]++;
    
    e_closure(0);
    
    cout << "I0:" << endl;
    for(int i = 0; i < size_item[0]; i++)
          printf("%d , %d , %c\n",items[0][i].formula_numb,items[0][i].part,items[0][i].expc);
     cout << "***************************************" << endl;
     
    bool beginflag = true;
    
    for(int index = 0; (index < Ccount) || beginflag ; index++){
        beginflag = false;
        for( j = 0; j < size_vt; j++){
                proj    buf[50];
                int     buf_size = 0;
                proj    tp;
                
                int ccc = 0;
                for(int p = 0; p < size_item[index]; p++){
                        if((items[index][p].part < length[ items[index][p].formula_numb ]) && ( G[ items[index][p].formula_numb ][ items[index][p].part ] == str_vt[j]) ){
                           tp.formula_numb = items[index][p].formula_numb;
                           tp.expc = items[index][p].expc;
                           tp.part = items[index][p].part+1;
                           buf[buf_size++] = tp;
                           //ccc++;
                           
                        }
                }
                printf("//I%d ----- %c:\n",index,str_vt[j]);

                if(buf_size  != 0){
                   Ccount++;
                   for(int t = 0; t < buf_size; t++){
                       items[Ccount][ size_item[Ccount]++ ] = buf[t];
                   }
                
                   e_closure(Ccount);
                   
                   int  next_state = is_contained();                       //看生成的項目集是否已經在項目集族中了 
                   
                   if(next_state != 0){
                       size_item[Ccount] = 0;
                       Ccount--;
                       trans[size_trans].beg = index;
                       trans[size_trans].nex = next_state;
                       trans[size_trans].ch = str_vt[j];
                       size_trans++;
                   }
                   else{
                       cout << "I" << Ccount << ":" << endl;
                       for(int i = 0; i < size_item[Ccount]; i++)
                           printf("%d , %d , %c\n",items[Ccount][i].formula_numb,items[Ccount][i].part,items[Ccount][i].expc);
                       cout << "***************************************" << endl;
                       trans[size_trans].beg = index;
                       trans[size_trans].nex = Ccount;
                       trans[size_trans].ch = str_vt[j];
                       size_trans++;           
                   }
                   
                }
                
                
        }                //對文法的每一個終結符 
        
        
        for( j = 0; j < size_vn; j++){
                proj    buf[50];
                int     buf_size = 0;
                proj    tp;
                
                int ccc = 0;
                for(int p = 0; p < size_item[index]; p++){
                        if((items[index][p].part < length[ items[index][p].formula_numb ]) && ( G[ items[index][p].formula_numb ][ items[index][p].part ] == str_vn[j]) ){
                           tp.formula_numb = items[index][p].formula_numb;
                           tp.expc = items[index][p].expc;
                           tp.part = items[index][p].part+1;
                           buf[buf_size++] = tp;
                           //ccc++;
                           
                        }
                }
                printf("//I%d ----- %c:\n",index,str_vn[j]);
                
                
                if(buf_size  != 0){
                   Ccount++;
                   for(int t = 0; t < buf_size; t++){
                       items[Ccount][ size_item[Ccount]++ ] = buf[t];
                   }
                
                   e_closure(Ccount);
                   
                   int  next_state = is_contained();                       //看生成的項目集是否已經在項目集族中了 
                   
                   if(next_state != 0){
                       size_item[Ccount] = 0;
                       Ccount--;
                       trans[size_trans].beg = index;
                       trans[size_trans].nex = next_state;
                       trans[size_trans].ch = str_vn[j];
                       size_trans++;
                   }
                   else{
                       cout << "I" << Ccount << ":" << endl;
                       for(int i = 0; i < size_item[Ccount]; i++)
                           printf("%d , %d , %c\n",items[Ccount][i].formula_numb,items[Ccount][i].part,items[Ccount][i].expc);
                       cout << "***************************************" << endl;
                       trans[size_trans].beg = index;
                       trans[size_trans].nex = Ccount;
                       trans[size_trans].ch = str_vn[j];
                       size_trans++;           
                   }
                   
                }
                
                
        }                //對文法的每一個非終結符 
    }
    
}



int main()
{
	int i;
   for( i = 0; i< 150; i++)
        tempofinput[i] = false;
    for( i= 0; i < 100; i++)
        size_item[i] = 0;
    for( i = 0; i < 30; i++)
        for(int j = 0; j < 150; j++)
                first_vn[i][j] = false;

    Read_G();        //read G and put the number of formula into count
   // cout << "***************************" << endl;
 
    get_first();     //each vn's first_set
    /*for(int i = 0; i < 128; i++)
        if(first_vn[1][i])
         printf("(B,%c)\n",i);*/
    
    go();
    for( i = 0; i < size_trans; i++){
        printf("(%d %c %d)\n",trans[i].beg,trans[i].ch,trans[i].nex);
    }
    /*cout << "$$$$$$$$$$$$$$$$$$$$$$$$$" <<endl;
    for(int i = 1; i <= number; i++){
        cout << length[i]  << " ";
        for(int j = 0; j < length[i]; j++){
                cout << G[i][j]<<" ";
        }
        cout << endl;
    }
    cout << "$$$$$$$$$$$$$$$$$$$$$$$$$" <<endl;*/
    cout << Ccount << endl;
    system("pause");
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美一区二区三区孕妇| 日韩在线播放一区二区| 欧美高清视频不卡网| 国产成人福利片| 日韩电影在线一区| 一区二区三区在线观看欧美| 国产婷婷色一区二区三区| 91精品国产综合久久久蜜臀图片 | 日韩三级高清在线| 91亚洲永久精品| 国产精品66部| 麻豆中文一区二区| 亚洲国产cao| 夜夜揉揉日日人人青青一国产精品 | 中文字幕欧美日韩一区| 日韩一级高清毛片| 欧美日韩你懂得| 色美美综合视频| 99re热视频精品| 成人免费av网站| 高清国产一区二区三区| 韩国女主播一区二区三区| 天天操天天干天天综合网| 亚洲国产精品人人做人人爽| 一区二区三区毛片| 亚洲激情五月婷婷| 一区二区三区在线视频观看58| 中文字幕在线一区二区三区| 欧美激情一区二区在线| 国产午夜精品美女毛片视频| 久久久综合精品| 欧美不卡一二三| 欧美精品一区二区精品网| 精品免费视频一区二区| 久久蜜桃香蕉精品一区二区三区| 精品少妇一区二区| 26uuu久久综合| 久久女同精品一区二区| 久久精品人人爽人人爽| 国产精品久久久久毛片软件| 国产欧美视频在线观看| 国产亚洲女人久久久久毛片| 国产日韩欧美精品综合| 中文字幕不卡在线| 亚洲天堂2016| 亚洲最新视频在线播放| 午夜亚洲国产au精品一区二区| 午夜成人在线视频| 麻豆国产精品一区二区三区| 国产真实乱偷精品视频免| 国产伦理精品不卡| www.欧美.com| 日本电影欧美片| 欧美男男青年gay1069videost| 欧美精品亚洲二区| 精品国产一区二区三区av性色 | 亚洲成人在线观看视频| 日韩精品福利网| 国产在线不卡一区| 成人激情图片网| 欧美视频一区二区三区四区| 91精品福利在线一区二区三区 | 久久久久久电影| 国产精品久久久久久久裸模| 亚洲欧美一区二区三区孕妇| 午夜欧美大尺度福利影院在线看| 九九视频精品免费| 成人午夜私人影院| 欧美日韩在线电影| 久久亚洲精品小早川怜子| 国产精品久久99| 日本欧美肥老太交大片| 国产成人免费视频网站高清观看视频| 成人a免费在线看| 91精品在线麻豆| 日本一区二区三区在线不卡| 亚洲国产日韩精品| 国产精品一品视频| 欧美亚洲国产一区二区三区va| 精品久久久久久综合日本欧美 | 亚洲美女视频在线| 日本欧美久久久久免费播放网| 国产成人综合视频| 欧美一a一片一级一片| 久久你懂得1024| 亚洲v精品v日韩v欧美v专区| 国产精品一级黄| 51久久夜色精品国产麻豆| 中文字幕成人在线观看| 全国精品久久少妇| 一本大道久久a久久精品综合| 精品久久久久久综合日本欧美| 亚洲欧洲综合另类在线| 精品一区二区三区香蕉蜜桃| 色悠悠久久综合| 亚洲国产激情av| 看电视剧不卡顿的网站| 欧美性猛片aaaaaaa做受| 国产欧美一区二区精品婷婷 | 国产日产欧美一区| 天堂一区二区在线| 91在线你懂得| 国产午夜亚洲精品不卡| 日本伊人午夜精品| 欧美亚男人的天堂| 中文字幕视频一区| 国产传媒欧美日韩成人| 欧美成人精品1314www| 亚洲成av人片在线观看无码| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产精品无圣光一区二区| 日本亚洲三级在线| 欧美日韩在线亚洲一区蜜芽| 亚洲欧美日韩小说| 懂色av一区二区夜夜嗨| 久久婷婷综合激情| 人人超碰91尤物精品国产| 欧美人与性动xxxx| 亚洲制服丝袜在线| 91网站在线播放| 亚洲视频香蕉人妖| av在线不卡免费看| 国产精品久久久久久久久久免费看 | 日韩欧美高清一区| 亚洲欧美国产毛片在线| 成人午夜大片免费观看| 久久久电影一区二区三区| 欧美a一区二区| 91精品免费在线| 日本特黄久久久高潮 | 国产精品美女久久久久高潮| 国产在线一区二区| 精品三级在线观看| 国产原创一区二区| 久久精品视频在线看| 国产乱码精品一品二品| 精品久久久久久久久久久久久久久久久 | 在线观看日韩毛片| 亚洲一区二区3| 欧美日韩精品一区二区三区蜜桃| 亚洲国产cao| 日韩一卡二卡三卡四卡| 日本成人中文字幕在线视频| 日韩视频一区二区三区| 裸体健美xxxx欧美裸体表演| 日韩一区二区三区在线视频| 老司机一区二区| 久久女同互慰一区二区三区| 粉嫩一区二区三区在线看| 中文字幕av一区二区三区| 99久久精品99国产精品| 亚洲精品乱码久久久久久| 欧美日韩aaaaaa| 久久99热国产| 中文字幕成人av| 在线观看视频欧美| 免费观看在线色综合| 久久综合色8888| 99久久国产综合精品女不卡| 亚洲亚洲人成综合网络| 日韩欧美你懂的| www.亚洲色图| 亚洲r级在线视频| 久久久91精品国产一区二区精品| 99精品视频中文字幕| 午夜久久福利影院| 久久免费午夜影院| 色先锋久久av资源部| 午夜成人免费电影| 久久久精品黄色| 欧美写真视频网站| 精品写真视频在线观看| 中文字幕亚洲成人| 91精品国产综合久久久久久漫画| 国精品**一区二区三区在线蜜桃| 一区免费观看视频| 91精品国产一区二区| 成人三级在线视频| 日本麻豆一区二区三区视频| 国产精品美女久久久久久久久| 欧美精品日韩精品| 成人午夜精品在线| 日韩高清在线一区| 亚洲欧洲另类国产综合| 日韩欧美高清一区| 欧洲视频一区二区| 国产激情一区二区三区桃花岛亚洲| 尤物视频一区二区| 久久青草国产手机看片福利盒子| 色综合久久六月婷婷中文字幕| 久久99精品国产.久久久久久 | 国产欧美一二三区| 91精品国产乱| 色狠狠综合天天综合综合| 国产真实精品久久二三区| 婷婷中文字幕综合| 亚洲欧洲另类国产综合| 久久免费国产精品| 日韩视频一区二区三区在线播放| 在线观看日韩av先锋影音电影院|