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

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

?? bianyi.cpp

?? 編譯原理的語法生成器
?? CPP
字號:

#include<iostream.h>
#include<stdlib.h>
#include<string.h>

enum words{        id,          // 標識符      0
                   mainsy,      // 主函數      1
		   ifsy,        // if          2
		   elsesy,      // else        3
		   intsy,       // int         4
		   intconst,	// 整形常量    5
                   addop,       // +           6
		   subop,       // -           7
                   timeop,      // *           8
		   divop,       // /           9
                   lpar,        // (           10
		   rpar,        // )           11
                   lbpar,       // {           12
		   rbpar,       // }           13
                   geop,	// >=          14
                   goop,	// >           15
		   leop,	// <=          16
		   loop,	// <           17
		   neop,	// !=          18
		   eqop,	// =           19
		   comma,	// ,           20
		   semicolon,   // ;           21
		   eoline,	// 回車轉行    22
		   eofile,	// 文件結束    23
                   other        // 其他錯誤    24
           };

int CODE[200]={0};       // 詞法分析生成的代碼表,最大長度為200
char ID[50][10]={0};     // 標識符表最大長度為50,一個標識符的最多有效位為10
char KEYWORD[][5]={"\0","main","if","else","int"}; // 關鍵字表

int NEXT=0;              // 代碼表的當前位置
int ID_NUMBER=1;         // 標識符表的當前長度
int error=0,overflow=0;  // 出錯和常數溢出標志

int G_next=0;            // 記錄語法分析讀代碼表的當前位置
int Line=1;              // 記錄源程序當前行數

int Isdigit(char);       // 判斷輸入字符是否為數字
int Isletter(char);      // 判斷輸入字符是否為字母
int Find_Keyword(char *);// 查找關鍵字表
int Find_ID(char *);     // 查找標識符表
void WORD_ananlyse();    // 詞法分析器

                         // 語法分析器子函數
void Complex_Sentence();
void Declare();
void ID_List();
void Sentence_Sec();
void Sentence();
void Condition();
void Evaluate();
void Expression();
void Exp_Item();
void Exp_Item_();
void E_Item();
void Item();
void Item_();


void WORD_analyse()      // 詞法分析
{
	char ch;             // 取輸入的字符
        int c_number;        // 計算標識符或常數的位數
	char word[10]="";    // 存放單詞
	while((ch=cin.peek())!='#')     // 判斷是否結束
	{
		if (ch==10)      // 將eoline填入代碼表
		{
			CODE[NEXT]=eoline;
			NEXT++;
		}

		cin>>ch;         // 讀入字符





	    if (Isdigit(ch)) // 處理整型常數
		{
			int value=0; // 常數值
			c_number=0;  // 計算常數的位數
			while(Isdigit(ch))
			{
				if(c_number>5||(value>3276&&ch>7))   // 判斷常數是否溢出
				   overflow=1;  
				value=value*10+ch-48;
			    cin>>ch;
			    c_number++;
			} 		    cin.putback(ch);    // 放回剛取的字符
                        CODE[NEXT]=intconst;// 將intconst填入代碼表
			NEXT++;
			CODE[NEXT]=value;   // 將常數值填入代碼表
			NEXT++;
		}





	    else if(Isletter(ch))   // 接受字符串
		{   int re_w;           // 記錄單詞在關鍵字表或標識符表中的位置
		    word[0]=ch;
			c_number=1;
			while ((ch=cin.peek())!=' '&&c_number<10)
			{
				if(Isletter(ch)||Isdigit(ch))
				{
					word[c_number]=ch;
				    c_number++;
					cin>>ch;
				}
				else break;
			}
		        word[c_number]=0;
			if((re_w=Find_Keyword(word))!=-1) // 若單詞為關鍵字
			{  
				CODE[NEXT]=re_w;
				NEXT++;
			}
			else if((re_w=Find_ID(word))!=-1) // 若單詞為標識符
			{  
                                CODE[NEXT]=id;                // 將id填入代碼表
				NEXT++;
				CODE[NEXT]=re_w;     // 將標識符在ID[]數組的位置填入代碼表
				NEXT++;
			}           
                             else                              // 定義新的標識符
			{
				CODE[NEXT]=id;                // 將id填入代碼表
				NEXT++;
				strcpy(ID[ID_NUMBER],word);   // 將標識符填入ID[]數組
				CODE[NEXT]=ID_NUMBER; // 將標識符在ID[]數組的位置填入代碼表
				NEXT++;
				ID_NUMBER++;
			}
		}



	    else if(ch=='!')
		{
			if(ch=='=') 
			{
				cin>>ch;
				CODE[NEXT]=neop;              // 將neop填入代碼表
				NEXT++;
			}
		}




		else if(ch=='>')
		{
   			if(cin.peek()=='=') 
			{
				cin>>ch;
				CODE[NEXT]=geop;              // 將geop填入代碼表
				NEXT++;
			}
			else                              // 將goop填入代碼表
			{	CODE[NEXT]=goop; NEXT++;}
		}




		else if(ch=='<')
		{
			if(cin.peek()=='=') 
			{
				cin>>ch;
				CODE[NEXT]=neop;              // 將leop填入代碼表 
				NEXT++;
			}
			else                              // 將loop填入代碼表
			{	CODE[NEXT]=loop; NEXT++;}
		}




	    else if(ch=='=')                      // 將eqop填入代碼表
		             {	CODE[NEXT]=eqop; NEXT++;}


	    else if(ch=='+')                      // 將addop填入代碼表
                             {	CODE[NEXT]=addop; NEXT++;}
                                                    		
	    else if(ch=='-')                      // 將subop填入代碼表
		             {	CODE[NEXT]=subop; NEXT++;}

	    else if(ch=='*')                      // 將timeop填入代碼表
		             {	CODE[NEXT]=timeop; NEXT++;}

	    else if(ch=='/')                      // 將divop填入代碼表
		             {	CODE[NEXT]=divop; NEXT++;}
	    else if (ch==',')

        	             {	CODE[NEXT]=comma; NEXT++;}

	    else if(ch==';')                      // 將semicolon填入代碼表
		             {	CODE[NEXT]=semicolon; NEXT++;}

	    else if(ch=='(')                      // 將lpar填入代碼表
		             {	CODE[NEXT]=lpar; NEXT++;}

	    else if(ch==')')                      // 將rpar填入代碼表
		             {	CODE[NEXT]=rpar; NEXT++;}

             else if(ch=='{')                      // 將lbpar填入代碼表
		             {	CODE[NEXT]=lbpar; NEXT++;}

	     else if(ch=='}')                      // 將rbpar填入代碼表
		             {	CODE[NEXT]=rbpar; NEXT++;}
      
	          else              
		             {	CODE[NEXT]=other; NEXT++;}
      }
	  CODE[NEXT]=eofile;                      // 裝入文件結束符
}



int Find_Keyword(char *word)
{	int i;
	for (i=0 ; i<=5 ; i++)
	{	if (!strcmp(KEYWORD[i],word))         // 找到匹配的關鍵字
	    	return i;     
	}
	return -1;	                              // 匹配失敗
}

int Find_ID(char *word)
{
	int i;
	for (i=1 ; i<=ID_NUMBER ; i++)
	{
		if (!strcmp(ID[i],word))
			return i;                         // 找到匹配的標識符
	}
	return -1;	                              // 匹配失敗
}



int Isletter(char ch)	 // 是否為字母,是返回1 ,否返回0
{
	if(((ch>='a')&&(ch<='z'))||((ch>='A')&&(ch<='Z')))
		return(1);
	else return(0);
}


int Isdigit(char ch)	 // 是否為數字,是返回1 ,否返回0
{
	if((ch>='0')&&(ch<='9'))
		return(1);
	else return(0);
}


void match(enum words word) // 匹配當前代碼
{
	if (CODE[G_next]==word)
	{
		G_next++;
		if(word==intconst||word==id)
			G_next++;
	}
	else  error=1;          // 出錯
	while (CODE[G_next]==eoline)
	{                       // 記錄行數
		G_next++;
		Line++;
	}
}


void GRAMMAR_analyse()  // 程序->main(){復合語句}
{
	match(mainsy);
	if (!error)
		match(lpar);
	if (!error)
		match(rpar);
	if (!error)
		match(lbpar);
	if (!error)
		Complex_Sentence();
	if (!error)
		match(rbpar);
	if (!error)
		match(eofile);
}


void Complex_Sentence()  // 復合語句->說明部分;復合語句|語句部分
{
	if (CODE[G_next]==intsy)
	{
		Declare();		 // 說明部分,聲明變量
        match(semicolon);
	    if (CODE[G_next]!=rbpar && CODE[G_next]!=eofile && !error)
		    Complex_Sentence();// 復合語句
	}
	else
		Sentence_Sec();
}


void Declare()           // 說明部分->int 變量列
{
	match(intsy);
	if (!error)  ID_List(); 
}


void Sentence_Sec()     // 語句部分->語句 語句部分|語句
{
	while (!error && CODE[G_next]!=eoline && CODE[G_next]!=rbpar )
	       Sentence();
}

void Sentence()          // 語句->條件語句|賦值語句|;
{
	if (CODE[G_next]==ifsy)
		Condition();     // 條件語句
	else if (CODE[G_next]==semicolon)
		match(semicolon);// 空語句
	else
		Evaluate();      // 賦值語句
}


void ID_List()           // 變量列->id,變量列|id
{
	match(id);
	if(!error&&CODE[G_next]==comma)
	{
		match(comma);
	    if (!error)		ID_List();
	}
}


void Condition()         // 條件語句->if(表達式)語句  else 語句 | if(表達式)語句
{
	match(ifsy);
	if (!error)
		match(lpar);
	if (!error)
		Expression();
	if (!error)
		match(rpar);
	if (!error)
		Sentence();
	if (!error && CODE[G_next]==elsesy)
	{
		match(elsesy); 		if (!error)
			Sentence();
	}
}



void Expression()        // 表達式->表達項>表達項|表達項>=表達項|表達項<表達項
{                        //        |表達項<=表達項|表達項!=表達項|表達項=表達項
	Exp_Item();
	if (!error)
		switch(CODE[G_next])
		{
		case geop:	match(geop);
			        break;
		case goop:	match(goop);
			        break;
		case leop:	match(leop);
			        break;
		case loop:	match(loop);
			        break;
		case neop:	match(neop);
			        break;
		case eqop:	match(eqop);
			        break;
		default:	return;
		}
	if (!error)		Exp_Item();
}


void Exp_Item()          //表達項->項  表項
{
	Item();
	if (!error)
		Exp_Item_();
}


void Exp_Item_()         // 表項->+項|表項   表項->-項|表項
{
	if (CODE[G_next]==addop)
	{
		match(addop);
		if (!error)
			Item();
		if (!error)
			Exp_Item_();
	}


	else if (CODE[G_next]==subop)
	{
		match(subop);
		if (!error)
			Item();
		if (!error)
			Exp_Item_();
	}
}



void Item()              // 項->子項  項’
{
	E_Item();
	if (!error)
		Item_();
}


void Item_()            // 項’->* 子項 項’      項’->/子項 項’
{
	if (CODE[G_next]==timeop)
	{
		match(timeop);
		if (!error)
			E_Item();
		if (!error)
			Item_();
	}

	else if (CODE[G_next]==divop)
	{
		match(divop);
		if (!error)
			E_Item();
		if (!error)
			Item_();
	}
}


void E_Item()            // 子項->id|num|(表項)
{
	switch(CODE[G_next])
	{   case id:        match(id);
		                break;
	    case intconst:  match(intconst);
		                break;
	    default:        match(lpar);
		if (!error)		Exp_Item();
		if (!error)		match(rpar);
	}
}


void Evaluate()          // 賦值語句->id=表達式
{
	match(id);
	if (!error)
		match(eqop);
	if (!error)
		Expression();
	if (!error)
		match(semicolon);
}




void main()
  {
	cout<<"enter the origial codes"<<endl;
	WORD_analyse();                // 詞法分析
	GRAMMAR_analyse();             // 語法分析
	cout<<"the coding table is   "<<endl;
	for(int i=0; i<NEXT;i++)       // 輸出代碼表
	{
		cout<<CODE[i]<<"  ";
		if(CODE[i]==22)  cout<<endl;
	}
	if (overflow)                  // 輸出結果
		cout <<"\n something wrong about int." <<endl;
	else if (error)
		cout <<"\n the " <<Line<<"th line  is wrong" <<endl;
	else
		cout <<"\n all right!" <<endl;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩综合av| 欧美高清dvd| 一区二区三区国产精品| 中文字幕亚洲不卡| 国产精品无人区| 国产精品久久网站| 中文字幕在线不卡一区| 日本一区二区免费在线观看视频| 久久先锋资源网| xf在线a精品一区二区视频网站| 日韩欧美一区电影| 久久精品夜夜夜夜久久| 26uuu成人网一区二区三区| 日韩免费看的电影| 久久综合色之久久综合| 日本一区二区三区国色天香| 国产欧美一区二区精品忘忧草| 国产色综合一区| 亚洲精品成a人| 精品成a人在线观看| 亚洲国产精品自拍| 秋霞午夜av一区二区三区| 亚洲人成网站影音先锋播放| 国产精品传媒入口麻豆| 欧美激情在线观看视频免费| 国产精品不卡视频| 亚洲va欧美va人人爽午夜 | 亚洲妇熟xx妇色黄| 婷婷激情综合网| 国内精品久久久久影院一蜜桃| 成人福利在线看| 在线免费观看日本欧美| 日韩视频免费观看高清完整版| 久久久夜色精品亚洲| 亚洲精品国产视频| 日本不卡123| 国产精品一二三区| 国产成人av福利| 亚洲欧美综合网| 国产欧美精品一区二区色综合| 成人小视频在线观看| 日本韩国视频一区二区| 欧美日本国产一区| 精品免费视频.| 欧美国产1区2区| 五月综合激情日本mⅴ| 国产一区二区h| 欧美日韩另类国产亚洲欧美一级| 欧美日韩国产经典色站一区二区三区| 日韩精品一区二区在线| 国产精品伦一区二区三级视频| 亚洲国产日韩在线一区模特| 国产在线播放一区三区四| 99re免费视频精品全部| 91精品福利视频| 国产精品久久福利| 国产在线不卡一区| 欧美片网站yy| 国产专区综合网| 99视频国产精品| 久久午夜羞羞影院免费观看| 亚洲成av人在线观看| 国产美女精品人人做人人爽| 欧美日韩一级黄| 日韩美女久久久| 粉嫩av一区二区三区在线播放| 日韩欧美成人一区二区| 午夜精品福利一区二区蜜股av| 成人高清视频免费观看| 国产亚洲欧美中文| 国产精品一区不卡| 日韩欧美激情四射| 精品一区二区三区在线观看国产| 一本到三区不卡视频| 国产精品私人影院| 国产精品综合二区| 国产清纯在线一区二区www| 国产真实乱偷精品视频免| 欧美一级黄色大片| 欧美日韩视频第一区| 日本一区二区三区高清不卡| 精品一区中文字幕| 日韩一区二区免费在线观看| 人禽交欧美网站| 日韩欧美一级特黄在线播放| 日本欧美在线观看| 欧美日韩免费高清一区色橹橹 | 亚洲国产日产av| 成人av免费在线观看| 国产精品久久久久aaaa樱花| 国产suv一区二区三区88区| 国产色爱av资源综合区| 国产河南妇女毛片精品久久久| 欧美精品第1页| 五月天激情小说综合| 在线精品视频一区二区| 亚洲国产另类av| 久久综合av免费| 不卡的看片网站| 尤物av一区二区| 日韩视频123| 久久99蜜桃精品| 久久久亚洲欧洲日产国码αv| 豆国产96在线|亚洲| 亚洲一区二区三区三| 日韩欧美亚洲国产另类| 成人精品国产一区二区4080| 亚洲一区二区三区在线看| 欧美丰满少妇xxxxx高潮对白 | 91麻豆123| 天天操天天综合网| 国产女主播视频一区二区| 日本精品一区二区三区高清| 天堂一区二区在线| 国产欧美精品一区二区色综合| 色综合天天综合狠狠| 久久不见久久见免费视频7| 国产精品国产a| 91精品国产黑色紧身裤美女| 成人精品电影在线观看| 奇米一区二区三区| 一区在线观看免费| 91精品国产欧美一区二区成人| 成人av在线资源网站| 美女mm1313爽爽久久久蜜臀| 国产精品久久久久久久久动漫 | 中文字幕av一区二区三区免费看 | 国产精品福利av | 成人深夜视频在线观看| 日韩制服丝袜先锋影音| 一区精品在线播放| 欧美精品一区二区在线观看| 欧美午夜一区二区三区| 成人av小说网| 国产成人精品一区二| 青青草原综合久久大伊人精品 | 久久精品国产一区二区三 | 国产成人免费网站| 中文字幕一区二区视频| 精品伦理精品一区| 欧美日韩视频专区在线播放| 国产激情偷乱视频一区二区三区| 亚洲国产精品人人做人人爽| 中文字幕欧美三区| 久久影院午夜论| 91精品国产欧美一区二区成人| 色先锋久久av资源部| yourporn久久国产精品| 久久成人av少妇免费| 亚洲成人在线网站| 亚洲一区二区三区小说| 最新国产成人在线观看| 国产日韩欧美一区二区三区乱码| 2023国产精品自拍| 欧美第一区第二区| 欧美tk—视频vk| 日韩欧美在线1卡| 日韩免费一区二区| 欧美精品在线观看播放| 欧美日韩亚洲综合一区二区三区| 色噜噜狠狠色综合欧洲selulu| 91热门视频在线观看| 色婷婷av一区二区三区之一色屋| 99riav久久精品riav| 99re视频这里只有精品| 色婷婷一区二区三区四区| 99在线精品免费| 色欧美日韩亚洲| 一本久久精品一区二区| 色域天天综合网| 欧美日韩中文字幕精品| 777xxx欧美| 日韩久久免费av| 久久这里只有精品6| 亚洲天堂精品视频| 国产精品电影院| 亚洲女同ⅹxx女同tv| 亚洲国产精品久久一线不卡| 青青草伊人久久| 狠狠狠色丁香婷婷综合久久五月| 激情另类小说区图片区视频区| 成人黄色一级视频| 欧美日韩一区三区四区| 日韩欧美成人激情| 国产精品国产精品国产专区不蜜| 国产日产亚洲精品系列| 一区二区高清免费观看影视大全| 亚洲图片欧美一区| 国产美女视频91| 日韩电影一区二区三区四区| 国产成人免费在线观看| 欧美三级乱人伦电影| 欧美精品一区二区不卡 | 欧美色网站导航| 欧美精品一区二区三区在线| 久久久亚洲午夜电影| 亚洲成人免费视| 国产成人精品免费网站| 4438x亚洲最大成人网| 综合色天天鬼久久鬼色|