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

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

?? compile_work2.cpp

?? 正則式到有窮自動機.VC++6.0環境下開發.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "iostream.h"
#include "string.h"

//////////////////////////////////////////////////////////////////////////
//////////////////   Begin Regular==>NFA  //////////////////////////////// 
 
struct Relation  //定義NFA中弧
{
 int CurrentState;  //定義起始狀態 
 int NextState;  //定義下一個狀態
 char TransitionElement;  //定義輸入字符
};

struct TokenState  //定義操作符號處理棧 
{
 int BeginState; //定義起始
 int EndState;  //定義結束 
 int preposition; //定義記錄(一個大的區域)狀態開始時在波蘭式中的位置
};

int IsTransitionElement(char s)   //判斷輸入字符串是否合法 
{
 if (s=='0'||s=='1'||s=='$')
	 return 1;
 else return 0;
}

void NFADiagram(Relation *Rstring,int position,int CurrentState,
				int NextState,char TransitionElement)  //生成NFA中弧的信息  
{
 Rstring[position].CurrentState=CurrentState;
 Rstring[position].NextState=NextState;
 Rstring[position].TransitionElement=TransitionElement;
}

int TokenDealing(char *string,int position,TokenState *token,int *Rtoken)//雙目運算
{
 
 
 if (IsTransitionElement(string[position]) //型如 “輸入字符 輸入字符 操作符”
	 &&IsTransitionElement(string[position-1]))
	 return 0;
 else  if (IsTransitionElement(string[position])  //型如 “輸入字符 操作符 輸入字符”
	       &&!IsTransitionElement(string[position-1]))
	 return 1;
 else   //查找在波蘭式中區域的開始字符
 {
	 int firsttoken=token[Rtoken[position]].preposition;
	 if(IsTransitionElement(string[firsttoken-1]))
		 return 2;      //型如 “輸入字符 |” 如果前一區域的結尾不存在*
	 else return 3;     //如果前一區域的結尾存在*
 }
}

int StarDealing(char *string,int position)
{
 if(IsTransitionElement(string[position]))
	 return 1;
 else 
	 return 0;
}

Relation relation[25];
int relationi=0;

void ToNFA(char *string)
{
 //Relation relation[25]; 
 TokenState token[20];
 int Rtoken[20];//記錄字符串中操作符號在操作符號列中的位置
 int tokeni=1; //定義操作符號在操作符號中的位置
 //int relationi=0;
 int secondtoken;
 token[0].BeginState=0;
 token[0].EndState=0;
 for (unsigned i=0;i<strlen(string);i++)
 {
  if (string[i]=='*')
  {
   Rtoken[i]=tokeni;
   if (IsTransitionElement(string[i-1]))  //處理型如“輸入字符 操作符*”
   {
	  token[tokeni].BeginState=token[tokeni-1].EndState+1;
	  token[tokeni].EndState=token[tokeni].BeginState + 1;
	  token[tokeni].preposition = i-1;
	  NFADiagram(relation,relationi++,token[tokeni].BeginState,
                token[tokeni].EndState ,string[i-1]);
	 // cout<<"5 ";
//對處理1*有問題。

	  NFADiagram(relation,relationi++,token[tokeni].EndState,
              token[tokeni].BeginState , '$');
      NFADiagram(relation,relationi++,token[tokeni].BeginState-1,
              token[tokeni].EndState + 1 , '$');
      NFADiagram(relation,relationi++,token[tokeni].BeginState-1,
              token[tokeni].BeginState , '$');
      NFADiagram(relation,relationi++,token[tokeni].EndState,
              token[tokeni].EndState+1 , '$');
	  token[tokeni].BeginState = token[tokeni].BeginState-1;
      token[tokeni].EndState=token[tokeni].EndState + 1;


   }
   else   //處理型如 “操作符 操作符*”
   {
    token[tokeni].BeginState=token[tokeni-1].BeginState;
	token[tokeni].EndState=token[tokeni-1].EndState;
	token[tokeni].preposition=token[tokeni-1].preposition;
//	cout<<"6 ";
   
    
    NFADiagram(relation,relationi++,token[tokeni].EndState,
              token[tokeni].BeginState , '$');
    NFADiagram(relation,relationi++,token[tokeni-1].BeginState,
              token[tokeni].EndState + 1 , '$');
    NFADiagram(relation,relationi++,token[tokeni-1].BeginState,
              token[tokeni].BeginState , '$');
    NFADiagram(relation,relationi++,token[tokeni].EndState,
              token[tokeni].EndState+1 , '$');
    token[tokeni].BeginState = token[tokeni-1].BeginState;
    token[tokeni].EndState=token[tokeni].EndState + 1;

  }
   tokeni++;
  }
  else if(string[i]=='+')
  {
   Rtoken[i]=tokeni;
   
   switch(TokenDealing(string,i-1,token,Rtoken))
   {
    case 0: token[tokeni].BeginState=token[tokeni-1].EndState+1;
			token[tokeni].EndState=token[tokeni].BeginState + 2;
			token[tokeni].preposition=i-2;
			
			NFADiagram(relation,relationi++,token[tokeni].BeginState,
                       token[tokeni].BeginState+1 , string[i-2]);
         	NFADiagram(relation,relationi++,token[tokeni].BeginState+1,
                       token[tokeni].EndState,string[i-1]);
//			cout<<"1 ";
			break;
			//case 0:處理同10+類型即倆個輸入字符
	case 1: token[tokeni].BeginState=token[tokeni-1].EndState;
		    token[tokeni].EndState=token[tokeni].BeginState + 1;
			token[tokeni].preposition=token[tokeni-1].preposition;
			
			NFADiagram(relation,relationi++,token[tokeni].BeginState,
                       token[tokeni].EndState , string[i-1]);
			token[tokeni].BeginState=token[tokeni-1].BeginState;  //對于整個區域而言 記錄可能存在的*操作的其實狀態,
//			cout<<"2 ";
			break;
            //case 1:同1+類型即一個輸入字符
    case 2: 
		    token[tokeni].BeginState=token[tokeni-1].BeginState-1;
		    token[tokeni].EndState=token[tokeni-1].BeginState;			
			token[tokeni].preposition=token[tokeni-1].preposition-1;

			NFADiagram(relation,relationi++,token[tokeni].BeginState,
                       token[tokeni].EndState , string[token[tokeni-1].preposition-1]);

			token[tokeni].EndState=token[tokeni-1].EndState;
//			cout<<"3 ";
			break;
	case 3: secondtoken=token[Rtoken[i-1]].preposition-1;
		    
		    token[tokeni].BeginState=token[Rtoken[secondtoken]].EndState;
			token[tokeni].EndState=token[tokeni-1].BeginState;
			token[tokeni].preposition=token[secondtoken].preposition;
            
		    NFADiagram(relation,relationi++,token[tokeni].BeginState,
                      token[tokeni].EndState , '$');
			token[tokeni].BeginState=token[Rtoken[secondtoken]].BeginState;
			token[tokeni].EndState=token[tokeni-1].EndState;
//			cout<<"4 ";
			break;
   }
   tokeni++;
  }
  else if(string[i]=='|')
  {
   Rtoken[i]=tokeni;
   switch(TokenDealing(string,i-1,token,Rtoken))
   {
    case 0: token[tokeni].BeginState=token[tokeni-1].EndState+1;
	    	token[tokeni].EndState=token[tokeni].BeginState + 5;
			token[tokeni].preposition=i-2;
			NFADiagram(relation,relationi++,token[tokeni].BeginState,
                       token[tokeni].BeginState+1 , '$');
         	NFADiagram(relation,relationi++,token[tokeni].BeginState+1,
                       token[tokeni].BeginState+2 , string[i-2]);
			NFADiagram(relation,relationi++,token[tokeni].BeginState,
                       token[tokeni].BeginState+3 , '$');
			NFADiagram(relation,relationi++,token[tokeni].BeginState+3,
                       token[tokeni].BeginState+4 , string[i-1]);
			NFADiagram(relation,relationi++,token[tokeni].BeginState+2,
                       token[tokeni].EndState , '$');
			NFADiagram(relation,relationi++,token[tokeni].BeginState+4,
                       token[tokeni].EndState , '$');
//			cout<<"7 ";
			break;
			//case 0:處理型如“輸入字符 輸入字符 |”
	case 1: token[tokeni].BeginState=token[tokeni-1].BeginState-1;
		    token[tokeni].EndState=token[tokeni-1].EndState+3;
			token[tokeni].preposition=token[tokeni-1].preposition;
			NFADiagram(relation,relationi++,token[tokeni].BeginState,
                       token[tokeni].BeginState+1 , '$');
			NFADiagram(relation,relationi++,token[tokeni].BeginState,
                       token[tokeni].EndState+1 , '$');
			NFADiagram(relation,relationi++,token[tokeni].EndState+1,
                       token[tokeni].EndState+2 , string[i-1]);
			NFADiagram(relation,relationi++,token[tokeni].EndState,
                       token[tokeni].EndState+3 , '$');
			NFADiagram(relation,relationi++,token[tokeni].EndState+2,
                       token[tokeni].EndState+3 , '$');
//			cout<<"8 ";
			break;
			//case 1:處理型如“+ 輸入字符 |”
	case 2:token[tokeni].BeginState=token[tokeni-1].BeginState-1;
		   token[tokeni].EndState=token[tokeni-1].EndState+3;
           token[tokeni].preposition=token[Rtoken[i-1]].preposition-1; 
		   NFADiagram(relation,relationi++,token[tokeni].BeginState,
                      token[tokeni].BeginState+1 , '$');
		   NFADiagram(relation,relationi++,token[tokeni].BeginState,
                      token[tokeni].EndState-2 , '$');
		   NFADiagram(relation,relationi++,token[tokeni].EndState-2,
                      token[tokeni].EndState-1 , string[token[Rtoken[i-1]].preposition-1]);
		   NFADiagram(relation,relationi++,token[tokeni].EndState-1,
                      token[tokeni].EndState , '$');
		   NFADiagram(relation,relationi++,token[tokeni].EndState-3,
                      token[tokeni].EndState , '$');
//		   cout<<"9 ";
		   break;
		   //case 2:處理型如“+ |”
	case 3:token[tokeni].EndState=token[tokeni-1].EndState+1;
		   secondtoken=token[Rtoken[i-1]].preposition-1;
           //secondtoken指倆處理前一區域中的結束字符在波蘭式中位置
           //token[tokeni].BeginState=token[Rtoken[secondtoken]].BeginState-1;

		   if(token[Rtoken[secondtoken]].BeginState!=0)
		   { token[tokeni].BeginState=token[Rtoken[secondtoken]].BeginState-1;}
           else if(token[Rtoken[secondtoken]].BeginState==0)
		   { token[tokeni].BeginState=token[Rtoken[secondtoken]].BeginState;}

		    NFADiagram(relation,relationi++,token[tokeni].BeginState,
                      token[Rtoken[secondtoken]].BeginState, '$');
			NFADiagram(relation,relationi++,token[tokeni].BeginState,
                      token[tokeni-1].BeginState , '$');
			NFADiagram(relation,relationi++,token[tokeni-1].EndState,
                      token[tokeni].EndState , '$');
			NFADiagram(relation,relationi++,token[Rtoken[secondtoken]].EndState,
                      token[tokeni].EndState , '$');
//           cout<<"A ";
		   break;
		   //case 3:處理型如“+ |”
   }
   tokeni++;
  }
 }
 int compare=10000;
 for (int j=0;j<relationi;j++)
 {
  if(relation[j].CurrentState<compare)
	  compare=relation[j].CurrentState;
 }
 for (j=0;j<relationi;j++)
 {
   relation[j].CurrentState -= compare;
   relation[j].NextState -= compare;
 }
 cout<<"****** 正則式=====>NFA ******"<<endl;
 for (j=0;j<relationi;j++)
 cout<<"從狀態: "<<relation[j].CurrentState<<"          "
     <<"到狀態  "<<relation[j].NextState<<"         "
	 <<"輸入字符為 :  "<<relation[j].TransitionElement<<endl;
}

void ToReversePolish(char *statement,char *ReversePolishString)  //生成轉化字符串 
{
  int Si=0,top=0,RPSi=0;
  char stack[15];
  while(statement[Si]!='\0')
  {
   if (IsTransitionElement(statement[Si]))
   {
	   if ((statement[Si-1]=='0' || statement[Si-1]=='1' 
		  || statement[Si-1] ==')' || statement[Si-1]=='$'
		  || statement[Si-1] =='*') && Si-1>=0)
	   {
        top--;
    	while((stack[top]=='+' || stack[top]=='*') && top>=0) //將操作符號往前移動 
		{
         ReversePolishString[RPSi]=stack[top];
         top--;
         RPSi++;
		}
	    top++;
		stack[top]='+';
		top++;
	   }
	   ReversePolishString[RPSi]=statement[Si];
	   RPSi++;
	   Si++;
   }
   else if (statement[Si]=='(')
   {
	   if ((statement[Si-1]=='0' || statement[Si-1]==')' 
		  || statement[Si-1]=='1'||statement[Si-1]=='$'
		  || statement[Si-1] =='*') && Si-1>=0)
	   {
        top--;
    	while((stack[top]=='+' || stack[top]=='*') && top>=0)
		{
         ReversePolishString[RPSi]=stack[top];
         top--;
         RPSi++;
		}
	    top++;
		stack[top]='+';
		top++;
	   }
	   stack[top]=statement[Si];
       top++;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费在线观看精品| 在线日韩av片| 91黄色激情网站| 精品久久久久久久久久久久久久久久久| 国产午夜亚洲精品午夜鲁丝片| 亚洲电影第三页| 成人性色生活片| 精品裸体舞一区二区三区| 亚洲精品大片www| 成人午夜免费视频| 日韩美女主播在线视频一区二区三区| 亚洲精品免费看| 成人免费观看视频| 久久综合九色综合97婷婷| 偷拍一区二区三区| 91精彩视频在线| 一区二区三区在线观看视频| 国产一区二区伦理| 日韩欧美国产小视频| 三级在线观看一区二区| 欧美在线影院一区二区| 亚洲欧美日韩国产手机在线| 丰满放荡岳乱妇91ww| 久久综合九色综合欧美98| 久久99久国产精品黄毛片色诱| 欧美日韩高清一区二区不卡| 亚洲一二三四在线| 欧美视频三区在线播放| 亚洲综合在线免费观看| 欧美在线你懂得| 亚洲永久精品大片| 欧美午夜影院一区| 亚洲成人午夜电影| 91精品国产综合久久精品性色| 亚洲国产视频直播| 欧美日本一区二区三区| 日本女人一区二区三区| 欧美电视剧在线看免费| 国内精品不卡在线| 国产女主播在线一区二区| 成人av午夜影院| 亚洲另类色综合网站| 欧美日韩一二区| 麻豆精品在线看| xf在线a精品一区二区视频网站| 狠狠色综合播放一区二区| 国产亚洲一区二区三区四区| 波多野结衣视频一区| 亚洲另类在线视频| 日韩一区二区中文字幕| 韩国成人精品a∨在线观看| 国产精品系列在线| 在线影院国内精品| 麻豆成人久久精品二区三区红| 久久影院午夜论| 色综合亚洲欧洲| 美国毛片一区二区| 国产精品丝袜久久久久久app| 一本高清dvd不卡在线观看| 视频一区二区三区在线| 久久久精品综合| 日本精品一区二区三区四区的功能| 亚洲成人av免费| 欧美激情一区不卡| 欧美日韩国产精品成人| 国产a区久久久| 午夜精品久久久久久久| 亚洲制服欧美中文字幕中文字幕| 一本色道久久综合亚洲aⅴ蜜桃| 日韩不卡一区二区三区| 国产亚洲va综合人人澡精品| 91麻豆精品秘密| 国产在线乱码一区二区三区| 亚洲日本电影在线| 精品久久久久一区二区国产| 91亚洲男人天堂| 国产专区欧美精品| 午夜日韩在线观看| 中文字幕日本不卡| 亚洲精品一线二线三线| 欧美视频一区二区| 成人av手机在线观看| 免费观看91视频大全| 亚洲精品五月天| 久久精品亚洲麻豆av一区二区| 欧美日本一区二区三区四区| 粉嫩av一区二区三区| 麻豆精品视频在线观看视频| 一区二区三区毛片| 国产精品久久久久一区二区三区| 欧美成人a视频| 欧美日韩不卡在线| 色婷婷综合久色| 99久久综合狠狠综合久久| 黑人巨大精品欧美一区| 秋霞电影网一区二区| 一区二区三区四区乱视频| 国产日韩欧美综合一区| 日韩欧美色电影| 欧美一区二区三区在线观看| 欧美系列日韩一区| 在线观看国产91| 91久久精品日日躁夜夜躁欧美| 成人手机在线视频| 国产**成人网毛片九色| 国产综合久久久久久久久久久久 | 久久综合狠狠综合| 正在播放亚洲一区| 69成人精品免费视频| 欧美性色综合网| 欧美色区777第一页| 91福利资源站| 在线观看一区二区精品视频| 在线亚洲欧美专区二区| 欧美亚洲综合网| 欧美私人免费视频| 中国色在线观看另类| 国产精品传媒入口麻豆| 中文字幕在线不卡| 亚洲黄一区二区三区| 亚洲美女屁股眼交| 一区二区不卡在线播放| 一区二区成人在线观看| 午夜精品一区二区三区电影天堂| 亚洲成av人**亚洲成av**| 日韩国产精品久久久| 奇米在线7777在线精品| 狠狠狠色丁香婷婷综合激情 | 精品欧美乱码久久久久久| 欧美电影免费观看高清完整版在线| 日韩女优av电影在线观看| 久久久久9999亚洲精品| 国产精品理论片在线观看| 亚洲乱码国产乱码精品精98午夜| 亚洲chinese男男1069| 免费一级欧美片在线观看| 国产精品乡下勾搭老头1| 成人免费视频一区| 欧美优质美女网站| 日韩免费观看2025年上映的电影| 欧美国产激情一区二区三区蜜月| 日韩一区在线免费观看| 亚州成人在线电影| 国产乱人伦偷精品视频不卡| 一本色道久久综合狠狠躁的推荐| 欧美精品1区2区| 久久久久国产精品麻豆ai换脸 | 欧美tickling挠脚心丨vk| 国产欧美日韩另类视频免费观看| 亚洲欧美一区二区三区国产精品 | 亚洲欧洲成人精品av97| 亚洲国产精品精华液网站| 国内精品免费**视频| 一本久久a久久免费精品不卡| 亚洲欧美国产高清| 日日夜夜免费精品视频| 成人h动漫精品一区二区| 欧美人与性动xxxx| 国产精品成人在线观看| 免费成人在线影院| 色综合久久久网| 久久精品视频在线免费观看| 亚洲一区二区在线观看视频 | eeuss鲁一区二区三区| 欧美日本一道本| 中文字幕欧美一区| 国产一区二区三区久久久| 欧美丝袜丝交足nylons图片| 国产精品久久久久桃色tv| 久久成人av少妇免费| 欧美自拍偷拍午夜视频| 国产精品你懂的| 国产精品主播直播| 欧美成人一区二区三区片免费| 亚洲欧美另类图片小说| 国产成人av自拍| 精品欧美久久久| 麻豆国产精品一区二区三区| 欧美色倩网站大全免费| 最好看的中文字幕久久| 丁香一区二区三区| 2021国产精品久久精品| 全部av―极品视觉盛宴亚洲| 在线观看免费一区| 亚洲伦理在线免费看| 成年人网站91| 亚洲国产精品二十页| 国产激情精品久久久第一区二区 | 欧美三区在线观看| 一区二区三区四区蜜桃| 91免费视频大全| 成人欧美一区二区三区小说| 国产**成人网毛片九色 | 7777精品伊人久久久大香线蕉最新版| 国产乱码一区二区三区| 精品国产自在久精品国产| 蜜桃视频在线观看一区| 欧美r级在线观看| 久久精品99久久久| 日韩欧美第一区|