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

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

?? asdasd.cpp

?? 多功能語法分析器。 多功能語法分析器。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
   if(pt->nVt == nCh)
    break;
   else
   {
    qt = pt;
    pt = pt->next;
   }
  }
  if(NULL == pt)
  {
   pt = (struct collectNode *)malloc(sizeof(struct collectNode));
   pt->nVt = nCh;
   pt->next = NULL;
   if(NULL == first[U - 100])
   {
    first[U - 100] = pt;
   }
   else
   {
    qt->next = pt; /*qt指向first集的最后一個元素*/
   }
   pt = pt->next;
  }
 }
 else
 {
  pt = first[nCh - 100];
  while(NULL != pt)
  {
   ch = pt->nVt;
   if(-1 != ch)
   {
    AddFirst(U, ch);
   }
   pt = pt->next;
  }
 }
}
/*判斷first集中是否有空(-1)*/
bool HaveEmpty(int nVn) 
{
 if(nVn < 100) /*為終結符時(含-1),在follow集中用到*/
  return false;
 struct collectNode *pt;
 pt = first[nVn - 100];
 while(NULL != pt)
 {
  if(-1 == pt->nVt)
   return true;
  pt = pt->next;
 }
 return false;
}
/*計算follow集,例:U->xVy,U->xV.(注:初始符必含#——"-1")*/
void Follow(int V)
{
 int i;
 struct pRNode *pt ;
 if(100 == V) /*當為初始符時*/
  AddFollow(V, -1, 0 );
 for(i = 0; i < PNum; i++)
 {
  pt = P[i].rHead;
  while(NULL != pt && pt->rCursor != V) /*注此不能處理:U->xVyVz的情況*/
   pt = pt->next;
  if(NULL != pt)
  {
   pt = pt->next; /*V右側的符號*/
   if(NULL == pt) /*當V后為空時V->xV,將左符的follow集并入V的follow集中*/
   {
    if(NULL == follow[P[i].lCursor - 100] && P[i].lCursor != V)
    {
     Follow(P[i].lCursor);
    }
    AddFollow(V, P[i].lCursor, 0);
   }
   else /*不為空時V->xVy,(注意:y->),調用AddFollow加入Vt或y的first集*/
   {
    while(NULL != pt && HaveEmpty(pt->rCursor))
    {

     AddFollow(V, pt->rCursor, 1); /*y的前綴中有空時,加如first集*/
     pt = pt->next;
    }
    if(NULL == pt) /*當后面的字符可以推出空時*/
    {
     if(NULL == follow[P[i].lCursor - 100] && P[i].lCursor != V)
     {
      Follow(P[i].lCursor);
     }
     AddFollow(V, P[i].lCursor, 0);
    }
    else /*發現不為空的字符時*/
    {
     AddFollow(V, pt->rCursor, 1);
    }
   }
  }
 } 
}

/*當數值小于100時nCh為Vt*/
/*#用-1表示,kind用于區分是并入符號的first集,還是follow集
kind = 0表加入follow集,kind = 1加入first集*/
void AddFollow(int V, int nCh, int kind)
{
 struct collectNode *pt, *qt;
 int ch; /*用于處理Vn*/
 pt = NULL;
 qt = NULL;
 if(nCh < 100) /*為終結符時*/
 {
  pt = follow[V - 100];
  while(NULL != pt)
  {
   if(pt->nVt == nCh)
    break;
   else
   {
    qt = pt;
    pt = pt->next;
   }
  }
  if(NULL == pt)
  {
   pt = (struct collectNode *)malloc(sizeof(struct collectNode));
   pt->nVt = nCh;
   pt->next = NULL;
   if(NULL == follow[V - 100])
   {
    follow[V - 100] = pt;
   }
   else
   {
    qt->next = pt; /*qt指向follow集的最后一個元素*/
   }
   pt = pt->next;
  }
 }
 else /*為非終結符時,要區分是加first還是follow*/
 {
  if(0 == kind)
  {
   pt = follow[nCh - 100];
   while(NULL != pt)
   {
    ch = pt->nVt;
    AddFollow(V, ch, 0);
    pt = pt->next;
   }
  }
  else
  {
   pt = first[nCh - 100];
   while(NULL != pt)
   {
    ch = pt->nVt;
    if(-1 != ch)
    {
     AddFollow(V, ch, 1);
    }
    pt = pt->next;
   }
  }
 }
}
/*輸出first或follow集*/
void ShowCollect(struct collectNode **collect)
{
 int i;
 struct collectNode *pt;
 i = 0;
 while(NULL != collect[i])
 {
  pt = collect[i];
  printf("\n%c:\t", Vn[i]);
  while(NULL != pt)
  {
   if(-1 != pt->nVt)
   {
    printf(" %c", Vt[pt->nVt]);
   }
   else
    printf(" #");
   pt = pt->next;
  }
  i++;
 }
 printf("\n");
}
/*計算first和follow*/
void FirstFollow()
{
 int i;
 i = 0;
 while('\0' != Vn[i])
 {
  if(NULL == first[i])
   First(100 + i);
  i++;
 }
 i = 0;
 while('\0' != Vn[i])
 {
  if(NULL == follow[i])
   Follow(100 + i);
  i++;
 }
}
/*=================構造預測分析表,例:U::xyz=============*/
void CreateAT()
{
 int i;
 struct pRNode *pt;
 struct collectNode *ct;
 for(i = 0; i < PNum; i++)
 {
  pt = P[i].rHead;
  while(NULL != pt && HaveEmpty(pt->rCursor)) 
  {
   /*處理非終結符,當為終結符時,定含空為假跳出*/
   ct = first[pt->rCursor - 100];
   while(NULL != ct)
   {
    if(-1 != ct->nVt)
     analyseTable[P[i].lCursor - 100][ct->nVt] = i;
    ct = ct->next;
   }
   pt = pt->next;
  }
  if(NULL == pt)
  {
   /*NULL == pt,說明xyz->,用到follow中的符號*/
   ct = follow[P[i].lCursor - 100];
   while(NULL != ct)
   {
    if(-1 != ct->nVt)
     analyseTable[P[i].lCursor - 100][ct->nVt] = i;
    else /*當含有#號時*/
     analyseTable[P[i].lCursor - 100][vtNum] = i;
    ct = ct->next;
   }
  }
  else
  {
   if(100 <= pt->rCursor) /*不含空的非終結符*/
   {
    ct = first[pt->rCursor - 100];
    while(NULL != ct)
    {
     analyseTable[P[i].lCursor - 100][ct->nVt] = i;
     ct = ct->next;
    }
   }
   else /*終結符或者空*/
   {
    if(-1 == pt->rCursor) /*-1為空產生式時*/
    {
     ct = follow[P[i].lCursor - 100];
     while(NULL != ct)
     {
      if(-1 != ct->nVt)
       analyseTable[P[i].lCursor - 100][ct->nVt] = i;
      else /*當含有#號時*/
       analyseTable[P[i].lCursor - 100][vtNum] = i;
      ct = ct->next;
     }
    }
    else /*為終結符*/
    {
     analyseTable[P[i].lCursor - 100][pt->rCursor] = i;
    }
   }
  }
 }
}
/*輸出分析表*/
void ShowAT()
{
 int i,j;

 printf("構造預測分析表如下:\n");
 printf("\t|\t");
 for(i = 0; i < vtNum; i++)
 {
  printf("%c\t", Vt[i]);
 }
 printf("#\t\n");

 printf("- - -\t|- - -\t");
 for(i = 0; i <= vtNum; i++)
  printf("- - -\t");
 printf("\n");

 for(i = 0; i < vnNum; i++)
 {
  printf("%c\t|\t", Vn[i]);
  for(j = 0; j <= vtNum; j++)
  {
   if(-1 != analyseTable[i][j])
    printf("R(%d)\t", analyseTable[i][j]);
   else
    printf("error\t");
  }
  printf("\n");
 }
}
/*=================主控程序=====================*/
void Identify(char *st)
{
 int current,step,r; /*r表使用的產生式的序號*/
 printf("\n%s的分析過程:\n", st);
 printf("步驟\t分析符號棧\t當前指示字符\t使用產生式序號\n");
 
 step = 0;
 current = 0; /*符號串指示器*/
 printf("%d\t",step);
 ShowStack();
 printf("\t\t%c\t\t- -\n", st[current]);

 while('#' != st[current])
 {
  if(100 > analyseStack[topAnalyse]) /*當為終結符時*/
  {
   if(analyseStack[topAnalyse] == IndexCh(st[current]))
   {
    /*匹配出棧,指示器后移*/
    Pop();
    current++;
    step++;
    printf("%d\t", step);
    ShowStack();
    printf("\t\t%c\t\t出棧、后移\n", st[current]);
   }
   else
   {
    printf("%c-%c不匹配!", analyseStack[topAnalyse], st[current]);
    printf("此串不是此文法的句子!\n");
    return;
   }
  }
  else /*當為非終結符時*/
  {
   r = analyseTable[analyseStack[topAnalyse] - 100][IndexCh(st[current])];
   if(-1 != r)
   {
    Push(r); /*產生式右部代替左部,指示器不移動*/
    step++;
    printf("%d\t", step);
    ShowStack();
    printf("\t\t%c\t\t%d\n", st[current], r);
   }
   else
   {
    printf("無可用產生式,此串不是此文法的句子!\n");
    return;
   }
  }
 }
 if('#' == st[current])
 {

  if(0 == topAnalyse && '#' == st[current])
  {
   step++;
   printf("%d\t", step);
   ShowStack();
   printf("\t\t%c\t\t分析成功!\n", st[current]);
   printf("%s是給定文法的句子!\n", st);
  }
  else
  {
   while(topAnalyse > 0)
   {
    if(100 > analyseStack[topAnalyse]) /*當為終結符時*/
    {
     printf("無可用產生式,此串不是此文法的句子!\n");
     return;
    }
    else
    {
     r = analyseTable[analyseStack[topAnalyse] - 100][vtNum];
     if(-1 != r)
     {
      Push(r); /*產生式右部代替左部,指示器不移動*/
      step++;
      printf("%d\t", step);
      ShowStack();
      if(0 == topAnalyse && '#' == st[current])
      {
       printf("\t\t%c\t\t分析成功!\n", st[current]);
       printf("%s是給定文法的句子!\n", st);
      }
      else      
       printf("\t\t%c\t\t%d\n", st[current], r);
     }
     else
     {
      printf("無可用產生式,此串不是此文法的句子!\n");
      return;
     }
    }
   }
  }
 }
}
/*初始化棧及符號串*/
void InitStack()
{
 int i;
 /*分析棧的初始化*/
 for(i = 0; i < MaxStLength; i++)
  st[i] = '\0';
 analyseStack[0] = -1; /*#(-1)入棧*/
 analyseStack[1] = 100; /*初始符入棧*/
 topAnalyse = 1;
}
/*顯示符號棧中內容*/
void ShowStack()
{
 int i;
 for(i = 0; i <= topAnalyse; i++)
 {
  if(100 <= analyseStack[i])
   printf("%c", Vn[analyseStack[i] - 100]);
  else
  {
   if(-1 != analyseStack[i])
    printf("%c", Vt[analyseStack[i]]);
   else 
    printf("#");
  }
 }
}
/*棧頂出棧*/
void Pop()
{
 topAnalyse--;
}
/*使用產生式入棧操作*/
void Push(int r)
{
 int i;
 struct pRNode *pt;
 Pop();
 pt = P[r].rHead;
 if(-1 == pt->rCursor) /*為空產生式時*/
  return;
 topAnalyse += P[r].rLength;
 for(i = 0; i < P[r].rLength; i++)
 {
  /*不為空產生式時*/
  analyseStack[topAnalyse - i] = pt->rCursor;/*逆序入棧*/
  pt = pt->next;
 }/*循環未完時pt為空,則說明rLength記錄等出錯*/
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产免费一区二区三区香蕉 | 国产一区二区毛片| 国产成人在线免费| 欧美日韩在线播放| 久久久激情视频| 日韩精品色哟哟| 激情综合网最新| 欧美影院一区二区| 中文字幕在线免费不卡| 蜜臀久久99精品久久久久久9| 色综合天天做天天爱| 国产欧美一区二区精品性| 日韩制服丝袜先锋影音| 99re这里只有精品视频首页| 91福利国产成人精品照片| 久久精品亚洲精品国产欧美kt∨| 亚洲国产成人av| 欧美在线免费播放| 自拍视频在线观看一区二区| 成人一级黄色片| 久久精品欧美日韩| 九九九精品视频| 717成人午夜免费福利电影| 亚洲视频一二三| 99在线精品一区二区三区| 国产精品理论片在线观看| 岛国精品在线观看| 中文av一区二区| 成人动漫一区二区在线| 亚洲欧洲国产日本综合| 99国产一区二区三精品乱码| 亚洲欧美影音先锋| 色综合天天做天天爱| 一区二区三区四区亚洲| 欧美性感一区二区三区| 亚洲大型综合色站| 91麻豆精品国产91久久久更新时间 | 最近中文字幕一区二区三区| 成人免费视频视频在线观看免费| 国产精品无码永久免费888| 成人a区在线观看| 亚洲图片激情小说| av成人老司机| 国产精品久久久久久妇女6080| av午夜精品一区二区三区| 亚洲天堂福利av| 亚洲成人一区二区| 日韩精品一区二区三区在线播放| 亚洲天堂2014| 99re热这里只有精品免费视频| 欧美日韩精品一区二区在线播放| 蜜桃精品视频在线观看| 欧美日韩精品欧美日韩精品| 亚洲激情第一区| 亚洲h动漫在线| 色一情一乱一乱一91av| 日本不卡视频一二三区| 欧美区在线观看| 亚洲精品少妇30p| 欧美综合欧美视频| 五月激情综合色| 欧美日韩一区二区在线观看 | 日韩免费观看2025年上映的电影| 日韩亚洲欧美在线| 欧美日韩电影在线| 免费观看在线色综合| 欧美变态凌虐bdsm| 久久激五月天综合精品| 精品欧美一区二区三区精品久久| 亚洲国产另类av| 激情综合色播激情啊| 国产性色一区二区| 一区二区高清在线| 国产经典欧美精品| 国产精品水嫩水嫩| 色成年激情久久综合| 天堂久久一区二区三区| 日韩免费看的电影| 国产精品一区二区在线观看不卡| 国产午夜久久久久| 久久成人18免费观看| 精品av久久707| 国产一区二区三区久久久| 久久精品免视看| 91伊人久久大香线蕉| 亚洲一区二区三区在线看| 国产精品久久久久久久久快鸭| www.激情成人| 视频一区视频二区中文| 精品国产一区a| 成人91在线观看| 精品久久久网站| 91麻豆精品91久久久久同性| 激情成人综合网| 国产精品无人区| 欧美人妖巨大在线| 国模无码大尺度一区二区三区| 在线不卡免费欧美| 欧美日韩一区高清| 国产麻豆精品视频| 亚洲.国产.中文慕字在线| 欧美精品一区二区三区视频 | 亚洲va欧美va人人爽午夜| 日韩三级在线观看| 国产成人8x视频一区二区| 精品久久久久久综合日本欧美 | 欧美色网站导航| 亚洲日本va在线观看| 久久精品视频一区二区三区| 91视视频在线观看入口直接观看www | 精品在线播放午夜| 亚洲欧美电影院| 精品伦理精品一区| 欧美日本在线一区| 成人动漫在线一区| 亚洲国产日韩一区二区| 欧美精品一区二区久久婷婷| 91视频在线看| 国产一区二三区| 日韩福利电影在线| 一区2区3区在线看| 亚洲人成网站色在线观看| 精品福利一二区| 欧美精品在线观看一区二区| eeuss国产一区二区三区| 奇米影视一区二区三区| 一区二区三区美女视频| 日韩成人一区二区三区在线观看| 亚洲欧美怡红院| 久久精品一区八戒影视| 2021中文字幕一区亚洲| 欧美日韩国产一级片| 一区二区三区欧美在线观看| 日韩国产在线一| 日韩精品久久久久久| 一区二区三区91| 亚洲精品视频一区二区| 国产精品成人一区二区三区夜夜夜| 欧美一区二区二区| 99久久99久久综合| 成人妖精视频yjsp地址| 国产精品一级二级三级| 国产福利精品导航| 日本欧美一区二区在线观看| 国产一区二区在线视频| 激情综合色播激情啊| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲乱码国产乱码精品精可以看 | 精品美女被调教视频大全网站| 欧美日韩国产一级片| 69成人精品免费视频| 91丨porny丨首页| 一本到高清视频免费精品| 不卡一区二区中文字幕| 国产91高潮流白浆在线麻豆| 国产成人在线视频网址| 国产精品一级二级三级| 九一久久久久久| 欧美日韩高清一区二区不卡 | 在线播放/欧美激情| 加勒比av一区二区| 国产在线播放一区二区三区| 国产不卡免费视频| 成人av电影免费在线播放| 99视频一区二区| 不卡视频在线看| 在线观看日韩电影| 91精选在线观看| 国产亚洲污的网站| 国产精品免费久久| 国产人妖乱国产精品人妖| 国产精品久久久久久久蜜臀| 亚洲欧美国产三级| 日本不卡123| 成人毛片在线观看| 91丨国产丨九色丨pron| 中文字幕成人av| 午夜a成v人精品| 国产精品一卡二| 欧美另类高清zo欧美| 精品在线观看免费| 欧美二区乱c少妇| 伊人夜夜躁av伊人久久| 国产v日产∨综合v精品视频| 欧美日韩精品欧美日韩精品一 | 欧美变态凌虐bdsm| 亚洲女女做受ⅹxx高潮| 老司机精品视频在线| 6080yy午夜一二三区久久| 精品国产一区二区三区不卡 | 一区二区高清在线| 激情综合五月婷婷| 欧美在线观看视频在线| 91精品国产福利在线观看| 日韩综合小视频| 99久久99久久精品免费观看| 日韩视频免费直播| 亚洲精品v日韩精品| 爽好久久久欧美精品| 在线播放欧美女士性生活|