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

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

?? t.cpp

?? LR(1)分析器,當輸入不同的文法就進行相應的文法分析
?? CPP
字號:
/*
  Name: LR(1)分析器的構造
  Author: wangrui 
  Date: 07-06-07---------------08-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
    
    
    go();
    for(int i = 0; i < size_trans; i++){
        printf("(%d %c %d)\n",trans[i].beg,trans[i].ch,trans[i].nex);
    }
    
    system("pause");
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米四色…亚洲| 欧美日韩午夜精品| 欧美日韩在线直播| 国产成人午夜片在线观看高清观看| 日韩精品乱码av一区二区| 国产一区二区伦理片| 国产成人精品www牛牛影视| 欧美日韩成人在线一区| 亚洲视频免费观看| 国产精品亚洲午夜一区二区三区| 国产综合成人久久大片91| 欧美制服丝袜第一页| 综合色天天鬼久久鬼色| 国产白丝精品91爽爽久久| eeuss影院一区二区三区| 26uuu色噜噜精品一区二区| 日韩精品五月天| 色天天综合久久久久综合片| 国产精品伦一区| 国产尤物一区二区在线| 欧美sm极限捆绑bd| 久久99久久精品欧美| 91精品国产高清一区二区三区 | 美女脱光内衣内裤视频久久影院| 天天综合天天做天天综合| 91碰在线视频| 亚洲精品欧美专区| 日本高清免费不卡视频| 国产精品传媒入口麻豆| jlzzjlzz亚洲日本少妇| 国产精品久久久久久久久免费相片| 亚洲猫色日本管| 97久久精品人人澡人人爽| 国产精品久久久久久久久久免费看| 一区二区免费看| 国产一区二区三区四区五区美女 | 亚洲综合免费观看高清完整版 | 欧美二区乱c少妇| 亚洲午夜久久久久久久久久久| 美女视频黄 久久| 日韩欧美国产综合在线一区二区三区| 国产午夜精品在线观看| 国产精品一区在线观看乱码| 国产日韩欧美制服另类| 亚洲成av人片| 精品日韩在线一区| 国产一区二区三区四区在线观看| 欧美美女一区二区在线观看| 亚洲成人午夜电影| 日韩亚洲欧美在线| 亚洲小少妇裸体bbw| 在线成人av网站| 亚洲女人小视频在线观看| 91麻豆免费看片| 日韩精品91亚洲二区在线观看| 99久久777色| 三级欧美在线一区| 国产亚洲精品中文字幕| 色美美综合视频| 毛片av一区二区| 91精品黄色片免费大全| 亚洲一区免费观看| 久久综合狠狠综合久久激情| 懂色av噜噜一区二区三区av| 亚洲一区视频在线| 亚洲精品一区二区三区香蕉| 成人免费毛片嘿嘿连载视频| 天天亚洲美女在线视频| 欧洲一区二区av| 国产成a人亚洲精品| 一区二区三区精品| 日本高清无吗v一区| 国内精品第一页| 亚洲成人精品在线观看| 国产亚洲精品bt天堂精选| 欧美亚一区二区| 亚洲成a人片在线不卡一二三区 | 亚洲免费毛片网站| 91精品国产综合久久国产大片 | 9191久久久久久久久久久| 国产精品一区在线观看乱码 | 亚洲午夜一二三区视频| 久久久久久久久97黄色工厂| 欧美午夜一区二区| 丁香激情综合五月| 激情都市一区二区| 天使萌一区二区三区免费观看| 欧美丝袜丝交足nylons| 丁香一区二区三区| 奇米精品一区二区三区四区 | 欧美一区二区三区免费在线看| 亚洲bt欧美bt精品| 精品在线一区二区| 亚洲午夜电影网| 国产精品天美传媒| 色老汉一区二区三区| 国产成人精品三级麻豆| 国产精品的网站| 国产精品天美传媒| 国产日产欧美一区二区视频| 91年精品国产| 成人av午夜电影| 国产激情一区二区三区| 日韩美女视频19| 国产精品久久久久永久免费观看 | 国产婷婷精品av在线| 欧美一级xxx| 91精品国产丝袜白色高跟鞋| 欧美日韩日日夜夜| 欧美色图激情小说| 欧洲精品一区二区| 色婷婷av一区二区| 在线观看中文字幕不卡| 色久综合一二码| 欧美亚洲一区二区在线| 国产麻豆午夜三级精品| 国产一区91精品张津瑜| 国产真实乱对白精彩久久| 精品在线一区二区三区| 国产乱淫av一区二区三区| 国产伦精一区二区三区| 福利一区福利二区| 不卡一区中文字幕| 在线免费观看成人短视频| 欧美中文字幕一二三区视频| 韩国精品久久久| 成人综合在线视频| 91极品视觉盛宴| 欧美一区在线视频| 久久久美女毛片| 中文字幕一区二区三区四区| 国产精品久久久久久妇女6080| 日韩精品最新网址| 91成人在线观看喷潮| 欧美日本不卡视频| 久久综合av免费| 欧美一区二区三区在线电影| 色综合色狠狠天天综合色| 91成人免费电影| 精品日韩99亚洲| 亚洲欧美经典视频| 日本午夜精品视频在线观看| 亚洲精品视频在线观看免费| 亚洲成人免费视频| 国产九九视频一区二区三区| 99久久精品国产导航| 成人做爰69片免费看网站| 欧美中文字幕一区| 久久精品水蜜桃av综合天堂| 亚洲女人的天堂| 韩国欧美一区二区| 欧美色大人视频| 国产日产精品1区| 中文字幕精品三区| 精品国产伦一区二区三区观看体验| 国产精品网站在线| 日日嗨av一区二区三区四区| 国产风韵犹存在线视精品| 九色综合狠狠综合久久| 97se亚洲国产综合自在线不卡| 成人久久视频在线观看| 91精品国产乱码久久蜜臀| 亚洲人一二三区| 一级女性全黄久久生活片免费| 亚洲人成网站色在线观看| 国内精品在线播放| 欧美日韩一级大片网址| 国产精品国产精品国产专区不片| 国产精品久久一级| 国内精品嫩模私拍在线| 丰满亚洲少妇av| 精品国产污网站| 日本欧美韩国一区三区| 久久精品国产色蜜蜜麻豆| 91久久线看在观草草青青| 国产精品色一区二区三区| 极品少妇xxxx精品少妇| 国产91综合网| 欧美变态口味重另类| 亚洲电影一级黄| 91国偷自产一区二区使用方法| 在线国产电影不卡| 国产精品的网站| 成人av片在线观看| 久久九九影视网| 国产在线一区二区综合免费视频| 成人av在线播放网站| 国产网站一区二区| 亚洲最大成人网4388xx| 91在线国产福利| 成人免费在线视频| 成人国产精品免费观看| 国产日本欧洲亚洲| 狠狠狠色丁香婷婷综合久久五月| 成人美女视频在线观看18| 亚洲国产精品ⅴa在线观看| 国产99久久精品| 亚洲欧美怡红院| 久久国产婷婷国产香蕉| 精品少妇一区二区三区视频免付费|