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

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

?? 1.cpp

?? 編譯原理中的編譯器的一部分
?? CPP
字號:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//----------------------Global Declarition---------------------------------
#define SIZE 20
#define staNumber 12         //有12個狀態
#define Act 6          //有6個非終結符
#define gSIZE 3          //要遇到的非終結符進行轉移
#define proNumber 6         //有6個產生式
#define MAXSIZE 3
//---------------------Finish defining struct-------------------------------------
typedef struct Pro
{
        char head;       //左邊的非終結符
        char gen[4];       //右邊的推到出的表達式 
}Produce;//--------------------------------表達式的基本結構
typedef struct A
{
 int st[Act];       //移近數組
 int re[Act];       //規約 數組
}Action;//----------------------------------動作表數據結構
typedef struct G
{
 char head[gSIZE];      //非終結符E F T
 int gt[gSIZE];       //gSIZE=3,存放跳轉到的狀態
}GOTO;//------------------------------------轉移狀態結構
int status[SIZE];                          //狀態棧數組                                 
int  staMark;           //top of stack of status  狀態棧棧頂
char symbol[SIZE];                          //非終結符的棧
int  symMark;        //Current index of symbol stack
char string[SIZE];                      //存放輸入的字符串數組
int  expMark;                             //index of inputed expression
int  exptop;        //輸入的字符串頂部
int  step;         //在構造分析表的時候,用于標記步驟的
int  IsAccept = 0;       //分析表 accept flag to 0 /字符串被接受標志位置0
Produce gene[proNumber +1];
Action act[staNumber];
GOTO go[staNumber];

void GOTOForm(int sta, char symb);//GOTO表 Symb是非終結符

void Syntax(void)//將6個產生式輸出
{
 
 printf("-------------LR(1) Syntax---------------\n");
 printf("--------------規定的文法-----------------\n");
 printf(" (0)E -> E + T\n (1)E -> T\n (2)T -> T*F\n (3)T -> F\n (4)F -> E\n (5)F -> (i)\n");
 printf("-----------------------------------------\n");
}

void InputString(void)//輸入要分析的字符串
{
     char ch;
     printf("請輸入分析串:");
     printf("[包括:{+ - * /( )i #}以'#'結束]:\n");
     expMark = 0;
  do                                
  {
     scanf("%c",&ch);
     if ((ch!='i') &&(ch!='+') &&(ch!='*')&&(ch!='#')&&(ch!='(')&&(ch!=')'))
     {
     printf("輸入的非終結符不符合要求:請按任意鍵跳出!\n");
     getchar();
     exit(0);
     }
     string[expMark++]=ch;
  }while(ch!='#');                       
  printf("---------字符串分析表---------\n");
  getchar();
}

void PrintString(void)//將輸入的字符串輸出
{
     int i = 0;
     printf("You have inputed below:\n");
     for(i = 0; i < expMark; i++)
     printf("%c",string[i]);
  printf("\n");
}

void PrintStatus(void)//將狀態棧輸出
{
 int i = 0;
 for(i = 0; i <= staMark; i++)//
 {
  printf("%d", status[i]);
 }
 printf("\t\t");
}

void PrintRestExp(void)//輸出其他的非終結符
{
 int i = 0;
 for(i = 0; i < exptop; i++)
  printf(" ");
 for(i = exptop; i <= expMark; i++)
 {
  printf("%c", string[i]);
 }
 printf("\t\t");
}

void Format()
{
 printf("步驟 \t 狀態棧 \t符號棧   \t 剩余輸入串 \t 動作\n");
}



void Initlize(void)//將LR(1)的分析表建立出來
{
//將產生式放入數組行用到了數據結構中的引用
 gene[1].head = 'E';
 strcpy(gene[1].gen,"E+T");//Generate gene[geSIZE +1];
                           //Action act[sSIZE];
                           //GOTO go[sSIZE];
 gene[2].head = 'E';
 strcpy(gene[2].gen,"T");
 
 gene[3].head = 'T';
 strcpy(gene[3].gen,"T*F");
 
 gene[4].head = 'T';
 strcpy(gene[4].gen,"F");
 
 gene[5].head = 'F';
 strcpy(gene[5].gen,"(E)");
 
 gene[6].head = 'F';
 strcpy(gene[6].gen,"i");
 //-----------------------------------完成產生式的存儲
 //----------------------------------- 產生式的動作表
 act[0].st[0] = 5;
 act[0].st[3] = 4;
 
 act[1].st[1] = 6;
// act[1].st[5] = 10;
 act[2].re[1] = 2;
 act[2].st[2] = 7;
 act[2].re[4] = 2;
 act[2].re[5] = 2;
 
 act[3].re[1] = 4;
 act[3].re[2] = 4;
 act[3].re[4] = 4;
 act[3].re[5] = 4;
 
 act[4].st[1] = 5;
 act[4].st[3] = 4;
 
 act[5].re[1] = 6;
 act[5].re[2] = 6;
 act[5].re[4] = 6;
 act[5].re[5] = 6;
 
 act[6].st[0] = 5;
 act[6].st[3] = 4;
 
 act[7].st[0] = 5;
 act[7].st[3] = 4;
 
 act[8].re[1] = 6;
 act[8].re[4] = 11;
 
 act[9].re[1] = 1;
 act[9].re[2] = 7;
 act[9].re[4] = 1;
 act[9].re[5] = 1;
 
 act[10].re[1] = 3;
 act[10].re[2] = 3;
 act[10].re[4] = 3;
 act[10].re[5] = 3;
 
 act[11].re[1] = 5;
 act[11].re[2] = 5;
 act[11].re[4] = 5;
 act[11].re[5] = 5;
 //-----------------------------------完成分析動作表
 //-----------------------------------分析表的GOTO狀態
 go[0].head[0] = 'E';
 go[0].head[1] = 'T';
 go[0].head[2] = 'F';
 go[0].gt[0] = 1;
 go[0].gt[1] = 2;
 go[0].gt[2] = 3;
 
 go[4].head[0] = 'E';
 go[4].head[1] = 'T';
 go[4].head[2] = 'F';
 go[4].gt[0] = 8;//go[]shi 狀態,gt[]是存放非終結符的,這個是代表4狀態遇到分析表中的第一個非終結符轉移到8狀態
 go[4].gt[1] = 2;
 go[4].gt[2] = 3;
 
 go[6].head[1] = 'T';
 go[6].head[2] = 'F';
 go[6].gt[1] = 9;
 go[6].gt[2] = 3;
 
 go[7].head[2] = 'F';
 go[7].gt[2] = 10;
 //完成 Goto表
 //Initlize global vari
 staMark = 0;                       
 status[staMark] = 0;                
 step = 1;
 symMark = 0;
 symbol[symMark] = '#';
 IsAccept = 0;
 exptop = 0;
}

void Reduce(int sta, char symb,int col)//規約動作
{
unsigned int i = 0;
 for(i = 0; i < strlen(gene[act[sta].re[col]].gen); i++)//進行規約的時候從狀態棧和符號棧去掉R個符號,即指針要減R
 {
  symbol[symMark--] = '\0';//符號棧自頂向下去掉strlen(gene[act[sta].re[col]].gen個符號
 }
 symbol[++symMark] = gene[act[sta].re[col]].head;//把產生式的左部給symbol[++symMark]進行規約
 for(i = 0; i < strlen(gene[act[sta].re[col]].gen) ; i++)
 {
  status[staMark - i] = '\0';//符號棧自頂向下去掉strlen(gene[act[sta].re[col]].gen個狀態
 }
 staMark -= i; 
 GOTOForm(status[staMark], symbol[symMark]);//狀態遇到(symbol[symMark])非終結符進行轉移
}



void ActionTable(int sta, char symb,int col)//動作表int col是
{
 if(sta == 1 && col == 5)//狀態1遇到第6個終結符接受
 {
  printf("accept\n");
  IsAccept = 1;
  return;
 }
 if(act[sta].st[col] != 0)
 {
  printf(" S \n");
  status[++staMark] = act[sta].st[col];//狀態進入狀態棧,staMark相當于狀態棧的指針
  symbol[++symMark] = symb;//符號進入符號棧,symMark相當于非終結符的指針
  exptop ++;
 }
 else if(act[sta].re[col] != 0)//進行規約處理
 {
  printf("  R  \n");
  Reduce(sta, symb, col);//規約是將規約成的非終結符放入符號棧,狀態棧和符號棧先去掉字符在入棧
 }
 else
 {
  printf("error\n");//出錯原因是某個狀態后有固定的后跟非終結符。
  getchar();
  exit(1);
 }
  
}



void GOTOForm(int sta, char symb)//GOTO表 狀態轉換表
{
 int i = 0;
 for(i = 0; i < staNumber; i++)
 {
   if(go[sta].head[i] == symb)
  {
   //printf("Head %d\n",go[sta].gt[i]);
   status[++staMark] = go[sta].gt[i];
   return;
  }
 }
}


void Launch(void)
{
 int s = status[staMark];
 char exp = string[exptop];//棧頂元素
 char sym = symbol[symMark];//符號
 while(IsAccept != 1)//沒有被接受的時候發生的事情,即移近,規約,接受,報錯
 {
  s = status[staMark];
  exp = string[exptop];//棧頂元素
  sym = symbol[symMark];
  printf("%d\t ",step++);
  PrintStatus();//輸出狀態棧
  printf(" %s\t\t", symbol);//輸出符號棧的內容
  PrintRestExp();
  switch(exp)
  {
   case 'i':
    ActionTable(s, exp, 0); 
    break;
   case '+':
    ActionTable(s, exp, 1);
    break;
   case '*':
    ActionTable(s, exp, 2);
    break;
   case '(':
    ActionTable(s, exp, 3);
    break;
   case ')':
    ActionTable(s, exp, 4);
    break;
   case '#':
    ActionTable(s, exp, 5);
    break;
  }
 }
}


int main()
{
  Syntax();
  InputString();//輸入字符串
  //PrintExpression();
  Initlize();//建立LR(1)的分析表
  Format();//輸出對串分析的時候的常用符號
  Launch();//對表進行分析
  getchar();
  return 1;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品1区2区3区在线观看| 成人午夜免费视频| 国产精品一区免费在线观看| 91美女在线观看| 久久精子c满五个校花| 亚洲国产视频一区| 99综合电影在线视频| 日韩精品一区二区三区视频播放| 亚洲视频 欧洲视频| 国产成人在线免费观看| 欧美一区二区三区四区五区 | 久久久午夜精品理论片中文字幕| 国产精品理伦片| 国内国产精品久久| 欧美日韩夫妻久久| 亚洲国产日韩a在线播放性色| eeuss鲁片一区二区三区在线观看| 精品99久久久久久| 奇米影视在线99精品| 欧美日韩成人在线| 亚洲小说欧美激情另类| 色综合久久久网| 一区二区三区中文在线| 成人妖精视频yjsp地址| 国产婷婷色一区二区三区 | 丁香婷婷综合激情五月色| 日韩一区和二区| 日韩精品91亚洲二区在线观看| 日本精品一级二级| 亚洲一区中文日韩| 欧美在线免费观看亚洲| 亚洲一区二区三区国产| 在线观看欧美日本| 亚洲成人精品一区| 欧美日产国产精品| 日本麻豆一区二区三区视频| 欧美一区二区在线观看| 久久99热狠狠色一区二区| 91精品国产高清一区二区三区蜜臀 | 丝袜亚洲另类欧美综合| 欧美日本不卡视频| 日韩av午夜在线观看| 日韩精品一区二区三区老鸭窝 | 亚洲第一在线综合网站| 欧美日本一道本| 麻豆成人91精品二区三区| 精品精品国产高清a毛片牛牛| 国内精品嫩模私拍在线| 中文字幕高清一区| 在线视频中文字幕一区二区| 亚洲sss视频在线视频| 日韩欧美亚洲一区二区| 国产成人在线视频网址| 亚洲精品乱码久久久久久久久| 日本精品一区二区三区四区的功能| 图片区日韩欧美亚洲| 欧美电影免费观看高清完整版在线观看| 蜜乳av一区二区三区| 久久精品亚洲国产奇米99| 成人黄色综合网站| 亚洲电影第三页| 精品福利一区二区三区免费视频| 成人在线综合网| 香蕉av福利精品导航| 亚洲精品在线观看网站| 91麻豆蜜桃一区二区三区| 天天操天天色综合| 中文字幕欧美激情一区| 欧美美女一区二区| 成人综合婷婷国产精品久久蜜臀| 亚洲福利视频一区| 国产欧美一区二区精品久导航 | 午夜精品成人在线视频| 国产亚洲成aⅴ人片在线观看 | 26uuu亚洲综合色| 91福利国产成人精品照片| 日本伊人色综合网| 亚洲欧洲国产专区| 日韩区在线观看| 91丨国产丨九色丨pron| 老司机午夜精品| 一区二区三区四区蜜桃| 国产欧美日韩三区| 欧美一级久久久| 在线看不卡av| av一区二区三区黑人| 久久精品国产99国产精品| 亚洲午夜免费电影| 亚洲一区二区视频在线| 久久精品一区二区| 日韩一区国产二区欧美三区| 色婷婷亚洲精品| 成人a区在线观看| 国产米奇在线777精品观看| 亚洲已满18点击进入久久| 国产精品精品国产色婷婷| xfplay精品久久| 日韩欧美电影一区| 欧美剧情电影在线观看完整版免费励志电影| 国产不卡视频在线观看| 精品一区二区三区免费播放| 午夜在线电影亚洲一区| 亚洲在线视频免费观看| 一区二区在线看| 亚洲天堂成人网| 一区在线观看免费| 国产精品素人视频| 国产三级一区二区| 国产日产欧美一区二区视频| 欧美精品一区二区三区蜜桃 | 欧美日韩一区二区三区四区五区 | 日韩精品一区二区三区视频播放 | 首页亚洲欧美制服丝腿| 亚洲永久免费视频| 亚洲综合丁香婷婷六月香| 亚洲精品乱码久久久久久黑人| 亚洲日本在线看| 亚洲婷婷综合色高清在线| 国产精品你懂的在线欣赏| 中文av一区特黄| 中文字幕色av一区二区三区| 国产精品天干天干在观线| 中文字幕在线观看一区| 最新国产精品久久精品| 亚洲免费在线视频| 亚洲精品一二三| 亚洲成a人片在线观看中文| 天天综合色天天综合色h| 日产国产欧美视频一区精品| 久久99国产精品尤物| 国产精品一区免费视频| 99精品视频一区| 欧美日韩国产电影| 久久久精品tv| 亚洲日穴在线视频| 国产成人精品免费| 成人爱爱电影网址| 欧美日韩一区二区在线视频| 日韩欧美一二三四区| 欧美国产日韩亚洲一区| 亚洲精品乱码久久久久久日本蜜臀| 亚洲成人精品一区二区| 国产一区三区三区| 色综合天天天天做夜夜夜夜做| 欧美日韩美少妇| 精品久久久久久无| 国产精品高潮呻吟| 五月激情六月综合| 成人污视频在线观看| 欧美日韩免费电影| 国产欧美日韩另类一区| 曰韩精品一区二区| 国内久久精品视频| 欧美日韩免费在线视频| 久久久久久久综合日本| 亚洲一区二区三区三| 国产白丝网站精品污在线入口| 一本到三区不卡视频| 久久欧美一区二区| 亚洲一区二区在线观看视频| 国产综合色视频| 欧美日韩国产片| 国产精品久久久久久久久免费樱桃 | 亚洲视频在线观看三级| 久久国产精品无码网站| 欧美中文字幕一区| 欧美激情综合五月色丁香| 日韩av一区二区在线影视| 97久久人人超碰| 久久精品男人的天堂| 日产国产欧美视频一区精品| 色综合久久天天综合网| 久久久久青草大香线综合精品| 亚洲成人中文在线| 色综合久久久久综合体| 国产精品精品国产色婷婷| 国产一区美女在线| 日韩欧美国产综合一区| 亚洲一区二区三区国产| 91丝袜国产在线播放| 国产精品国产三级国产aⅴ中文 | 国产精品久久久久久久第一福利| 久久精品国产亚洲高清剧情介绍| 欧美亚洲动漫另类| 亚洲天堂av老司机| av亚洲精华国产精华| 欧美激情一区二区三区四区| 国产一区不卡精品| 久久精品免视看| 国产精品乡下勾搭老头1| 久久免费偷拍视频| 久久国产福利国产秒拍| 91麻豆精品国产91久久久久久久久| 一区二区三区不卡视频在线观看| 不卡一区二区三区四区| 国产精品久久久久久久久搜平片 | 亚洲国产日韩a在线播放性色| 色婷婷亚洲一区二区三区| 一区二区成人在线| 欧美性猛片aaaaaaa做受|