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

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

?? by.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()
{
    cin >> number;   //user should give the number of formula first
    for(int 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(int i = 0; i < 64; i++)
        if(tempofinput[i])
           str_vt[size_vt++] = i;
    for(int i = 91; i < 128; i++)
        if(tempofinput[i])
           str_vt[size_vt++] = i;
    for(int 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(){
    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(int 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(int 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){
    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(int i = 0; i < 64; i++){
                   if(first_vn[ G[temp.formula_numb][tt+1]-'A' ][i])
                      buffer[bsize++] = i;
                }
                for(int 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(){
    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(int 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(int 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()
{
   for(int i = 0; i< 150; i++)
        tempofinput[i] = false;
    for(int i= 0; i < 100; i++)
        size_item[i] = 0;
    for(int 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(int 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一区二区三区免费野_久草精品视频
免费看欧美美女黄的网站| 欧美亚洲综合网| 色悠悠亚洲一区二区| 日韩欧美国产一区在线观看| 国产精品麻豆一区二区| 美女视频一区二区三区| 在线视频你懂得一区| 国产午夜精品久久| 免费在线视频一区| 欧美中文一区二区三区| 中文字幕在线不卡一区| 国产高清亚洲一区| 欧美大白屁股肥臀xxxxxx| 亚洲成a人v欧美综合天堂下载 | 国产日本欧洲亚洲| 奇米777欧美一区二区| 色猫猫国产区一区二在线视频| 国产午夜精品一区二区| 狠狠色丁香婷综合久久| 日韩三级高清在线| 免费欧美在线视频| 在线不卡中文字幕播放| 午夜不卡av在线| 在线不卡中文字幕| 日韩主播视频在线| 欧美一区二区三区在线观看| 亚洲1区2区3区视频| 欧美性色黄大片| 亚洲v中文字幕| 欧美日本不卡视频| 午夜免费久久看| 制服丝袜中文字幕一区| 日韩精品一卡二卡三卡四卡无卡| 欧美日韩国产一二三| 五月天一区二区| 欧美一级免费大片| 久久国产视频网| www久久精品| 成人免费va视频| 一区二区三区小说| 欧美日韩一区二区三区视频 | 青娱乐精品视频在线| 日韩欧美卡一卡二| 国产在线不卡一区| 亚洲国产经典视频| 91捆绑美女网站| 午夜影院在线观看欧美| 欧美一卡2卡3卡4卡| 国产一区二区视频在线播放| 国产欧美日韩在线视频| 色综合久久天天| 日韩av电影天堂| 国产亚洲欧美日韩日本| 97久久超碰国产精品电影| 亚洲aⅴ怡春院| 久久久久高清精品| 91国偷自产一区二区三区观看| 婷婷夜色潮精品综合在线| 欧美va亚洲va香蕉在线| 成人国产精品免费| 日韩在线一区二区三区| 国产欧美日韩在线看| 欧美做爰猛烈大尺度电影无法无天| 天天操天天干天天综合网| 久久亚洲捆绑美女| 91行情网站电视在线观看高清版| 精品在线一区二区| 亚洲视频每日更新| 欧美一区二区福利视频| 91蝌蚪porny| 久久不见久久见免费视频1| 亚洲色图视频网| 日韩精品一区二区三区三区免费| av在线一区二区| 极品销魂美女一区二区三区| 亚洲另类在线一区| 久久久久久毛片| 欧美麻豆精品久久久久久| 成人自拍视频在线| 麻豆一区二区在线| 亚洲一区二区三区三| 国产精品三级电影| 欧美一区二区国产| 欧美日韩一区二区三区免费看| 成人午夜免费av| 久久av老司机精品网站导航| 香港成人在线视频| 亚洲乱码日产精品bd| 国产日韩欧美不卡| 日韩欧美电影在线| 宅男噜噜噜66一区二区66| 91免费版在线| 成人教育av在线| 国产suv精品一区二区883| 日本午夜精品视频在线观看| 一区二区三区美女视频| 国产精品久久久久久久久免费相片| 日韩精品影音先锋| 欧美一区二区二区| 91麻豆精品国产91久久久久| 91久久奴性调教| 北条麻妃国产九九精品视频| 国产一区美女在线| 精品在线亚洲视频| 久久国产精品无码网站| 婷婷中文字幕综合| 丝袜亚洲另类丝袜在线| 亚洲777理论| 香蕉久久一区二区不卡无毒影院| 亚洲美女免费在线| 亚洲美女在线一区| 一区二区三区四区视频精品免费| 国产精品久久久久久久久免费桃花 | 欧美日精品一区视频| 色婷婷av一区| 色成年激情久久综合| 色天使久久综合网天天| 91麻豆精品在线观看| 色哟哟欧美精品| 欧美视频精品在线| 91精品国产福利| 日韩欧美一级二级三级| 精品播放一区二区| 久久久久久久久久看片| 中文字幕精品在线不卡| 亚洲视频图片小说| 亚洲国产人成综合网站| 日本不卡视频在线观看| 久久99精品国产91久久来源| 国产揄拍国内精品对白| 成人av网站在线观看免费| 99re在线视频这里只有精品| 欧美在线短视频| 91精品国产91综合久久蜜臀| 欧美成人三级在线| 国产人久久人人人人爽| 亚洲欧美一区二区三区久本道91| 亚洲一卡二卡三卡四卡| 麻豆免费看一区二区三区| 国产精品自产自拍| 色视频成人在线观看免| 欧美日韩国产乱码电影| 26uuu色噜噜精品一区二区| 欧美激情综合在线| 亚洲成a人片在线观看中文| 九九精品视频在线看| 91小视频在线免费看| 91精品国产综合久久久久久| 国产亚洲成av人在线观看导航| 亚洲免费观看高清| 国内偷窥港台综合视频在线播放| 成人福利在线看| 在线不卡一区二区| 国产亚洲综合av| 亚洲国产精品精华液网站| 国产综合色视频| 欧美性大战久久久| 久久久精品天堂| 亚洲国产一区二区视频| 国产精品亚洲а∨天堂免在线| 在线看日韩精品电影| 久久一区二区三区四区| 亚洲最新在线观看| 国产精品一区专区| 欧美日韩国产乱码电影| 综合久久国产九一剧情麻豆| 激情综合网av| 在线看不卡av| 国产精品久久久久久久久图文区| 毛片基地黄久久久久久天堂| 91国偷自产一区二区三区成为亚洲经典| 久久网站热最新地址| 日韩精品一二三四| 色综合久久天天| 国产精品成人午夜| 国产九色精品成人porny| 欧美电影一区二区三区| 亚洲在线视频免费观看| 成人aaaa免费全部观看| 2014亚洲片线观看视频免费| 日本aⅴ亚洲精品中文乱码| 日本道色综合久久| 亚洲少妇屁股交4| 国产大片一区二区| 欧美岛国在线观看| 蜜臀久久久99精品久久久久久| 色偷偷成人一区二区三区91| 国产精品乱人伦中文| 国产成+人+日韩+欧美+亚洲| 精品久久久三级丝袜| 久久99久久精品| 日韩午夜激情电影| 日韩电影免费在线| 欧美放荡的少妇| 天天操天天色综合| 欧美一区二区在线免费观看| 无码av免费一区二区三区试看 | 99久久er热在这里只有精品15| 久久午夜老司机| 福利一区二区在线|