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

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

?? 詞法分析.cs

?? haihao,yiban chaobuduo jiuxiaba
?? CS
字號:
?using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;


namespace 詞法分析
{
    class 詞法分析
    {
        		
		private int rnum;//行號
		private int rpos;//列號
        private static ArrayList symbolTable;
		private StreamReader br;
		private char c;
		private char bC;
		private int state;
		private String str;

//構造函數

		public 詞法分析(StreamReader br)
		{	
			symbolTable = new ArrayList();
			this.br=br;
			c=' ';
			bC=' ';
			state = 0;
			rnum=1;
			rpos=0;
			str="";
		}
//返回字符數組
		public ArrayList getSymbolTable()
		{
			c = nextChar();
			state = 0;
			analyzer();
			return symbolTable;
		}

//主體函數	
		private void analyzer()
		{
			bool isRunning=true;

			while(isRunning)
			{
				switch (state)
				{
					case 0:
					
						if(c==' ')            //空格
						{
                    
						}
						else if(c=='\t')      //tab
						{
							rpos+=3;
						}
						else if((int)c==13)   //空格
						{
                    
						}
						else if((int)c==10)   //回車
						{
							rpos = 0;
							rnum++;
						}
						else if(c=='~')       //結束符
						{
							return;
						}
						else if(c=='+')       //操作符+
						{
                            install("運算符", "+", rpos, rnum);
						} 
						else if(c=='-')       //操作符-
						{
                            install("運算符", "-", rpos, rnum);
						}
						else if(c=='/')       //操作符/
						{
							state = 1;
						}
						else if(c=='*')       //操作符*
						{
                            install("運算符", "*", rpos, rnum);
						}
						else if(c=='=')       //操作符=
						{ 
							state = 2;
						}
						else if(c=='<')       //操作符<
						{
							state = 3;
						}
						else if(c=='>')       //操作符>
						{
							state = 4;
						}
						else if(c=='!')       //操作符!
						{
							state = 5;
						}
						else if(c=='{')       //分隔符{
						{
							install("分隔符","{",rpos,rnum);
						}
						else if(c=='}')       //分隔符}
						{
							install("分隔符","}",rpos,rnum);
						}
						else if(c=='(')		  //分隔符(
						{
							install("分隔符","(",rpos,rnum);
						}
						else if(c==')')		  //分隔符)
						{
							install("分隔符",")",rpos,rnum);
						}
						else if(c==';')       //分隔符;
						{
							install("分隔符",";",rpos,rnum);
						}
						else if((int)c==65535)
						{
							isRunning=false;
						}
						else if(character(c))  //讀到了字符
						{
							bC = c;
							state = 6;
						}
						else if(digit(c))   //讀到了數字符
						{
							bC = c;
							str="";
							state = 7;
						}
						else if(c=='#')
						{
                           state=13;
						}
						else 
						{
							state=0;
							isRunning=false;
							fail(0);
						}
                       
						c = nextChar();
						break;
					case 1:
						if(c=='/')             //表示注釋后面的東西,不讀它
						{
							while((int)c!=10)
							{
								c = nextChar();
							}
							rpos=0;           //從下一行開始
							rnum++;
							c = nextChar();
							state = 0;
						}
						else 
						{
							state = 0;        // 下一個不是/, 后退一步到state=0
                            install("運算符", "/", rpos - 1, rnum);
						}

						break;
					case 2:
                
						if(c=='=')           //表示操作符==
						{
							state = 0;
                            install("運算符", "==", rpos - 1, rnum);
							c = nextChar();
						}
						else 
						{
							state = 0;
                            install("運算符", "=", rpos - 1, rnum);
						}

						break;
					case 3:
						if(c=='=')          //表示操作符<=
						{
							state = 0;
                            install("運算符", "<=", rpos - 1, rnum);
							c = nextChar();
						}
						else 
						{
							state = 0;
                            install("運算符", "<", rpos - 1, rnum);
						}
                
						break;
					case 4:
						if(c=='=')          //表示操作符>=
						{
							state = 0;
                            install("運算符", ">=", rpos - 1, rnum);
							c = nextChar();
						}
						else 
						{
							state = 0;
                            install("運算符", ">", rpos - 1, rnum);
						}

						break;
					case 5:
						if(c=='=')         // 表示操作符!=
						{
							state = 0;
							install("運算符","!=",rpos-1,rnum);
							c = nextChar();
						}
						else 
						{
							state = 0;
							isRunning=false;
							fail(1);
						}
						break;
				
		     	       
						//讀入標識符,后面是 數字符和字母才是對的
						
					case 6:                      
						String id = ""+bC;
						while(character(c)||digit(c))
						{
							id+=c;
							c = nextChar();
						}
						if(Keyword(id))
							install("保留字",id,rpos-id.Length,rnum);
						else
							install("標識符",id,rpos-id.Length,rnum);
						state = 0;
						break;
						
						//讀入數字符,后面是 數字符(循環); .(轉狀態);E(轉狀態)
						
					case 7:                         
						str+=bC; 
						while(digit(c))            
						{
							str+=c;
							c=nextChar();
						}
						if(c=='.')                  
						{
							state=8;
							c=nextChar();         
						}
						else if(c=='E')              
						{
							state=10;
							c=nextChar();
						}
						
						//需要判斷是否是  11w等
						else if(character(c))
						{
							state = 0;
							isRunning=false;
							fail(4);
                        
						}
						else                        
						{
							state = 0;
							install("常數",str,rpos-str.Length,rnum);
						}
						break;
						
						//  " ." 后面跟的字符,除了數字符其它都出錯
						
					case 8:                         
						str+='.';
						if(digit(c))
						{
							state = 9;
							str+=c;
							c=nextChar();
						}
						else
						{
							state = 0;
							isRunning=false;
							fail(2);
						}
						break;
						
						//    ".數字符" 后面字符,可以是數字符或者是E(需要加錯誤提示,當不是空格而是其他字母時候)
						
					case 9:
                
						while(digit(c))
						{
							str+=c;
							c=nextChar();
						}
						if(c=='E')
						{
							state = 10;
							c=nextChar();
						}

						//需要判斷是否是  11w 等
						else if(character(c))
						{
							state = 0;
							isRunning=false;
							fail(2);
                        
						}
						else
						{
							state = 0;
							install("常數",str,rpos-str.Length,rnum);
						}
						break;

			          
						// "E"  后面字符,  "+";"-";"數字符" 都是對的,其他都是錯的
					
					case 10:
						str+='E';
						if(c=='+'||c=='-')
						{
							state=11;
							str+=c;
							c=nextChar();
						}
						else if(digit(c))
						{
							state=12;
							str+=c;
							c=nextChar();
						}
						else
						{
							state=0;
							isRunning=false;
							fail(2);
						}
						break;
						
						//   "+" "-" 后面字符, 數字符是對的.其他都是錯的
						
					case 11:
						if(digit(c))
						{
							state=12;
							str+=c;
							c=nextChar();
						}
						else
						{
							state = 0;
							isRunning=false;
							fail(2);
						}
						break;
					
						// "E數字符"  后面字符,只有數字符是對的
					
					case 12:
						while(digit(c))
						{
							str+=c;
							c=nextChar();
						}

						 if(character(c))
						{
							state = 0;
							isRunning=false;
							fail(2);
                        
						}
						install("常數",str,rpos-str.Length,rnum);
						state=0;
						break;


					case 13: //聲明部分
 
						 id ="#";
						while(character(c))
						{
							id+=c;
							c = nextChar();
						}
						if(id=="#include"&&c=='<')
						{
										    
  					        id+=c;
							c = nextChar();
							while(character(c)||this.digit(c))
							{
							
								id+=c;
								c = nextChar();
							}
							if(c=='>')
							{
								id+=c;
							    install("文件引入",id,rpos-id.Length,rnum);
								c = nextChar();
							}
							else
							 fail(3);
                                         
						}
						else
							fail(0);
						state = 0;
						break;
					
				}  
			}
		}
 //判斷字節流中字符不合法,輸出錯誤信息
		private void fail(int i) 
		{
			string typeerror="";;
			switch(i)
			{
				case 0:
					typeerror="輸入非法字符錯誤";
					break;
				case 1:
					typeerror="操作符錯誤";
					break;

				case 2:
					typeerror="數字符錯誤";
					break;

				case 3:
					typeerror="聲明錯誤";
					break;
				case 4:
					typeerror="標識符錯誤";
					break;

			}
			
			Console.Write(typeerror+",位置<"+rnum+","+rpos+">");
		}

        //判斷下一個字符

		private char nextChar()
		{
			char t;
			rpos++;
			if(br.Peek() == -1)
			{
				br.Close();
				return '~';
			}

			t= (char) br.Read();
			return t;
		}
    //輸出字節流中每個字符的信息,包括行號,列號(主要的輸出函數)
		private void install(String tType,String aValue,int rpos,int rnum)
		{
			ArrayList tokenArray = new ArrayList();
			tokenArray.Add(tType);
            if (tType == "保留字")
                tokenArray.Add("種別碼" + "1");
            if (tType == "標識符")
                tokenArray.Add("種別碼" + "2");
            if (tType == "常數")
                tokenArray.Add("  " + "種別碼" + "3");
            if (tType == "運算符")
                tokenArray.Add("種別碼" + "4");
            if (tType == "分隔符")
                tokenArray.Add("種別碼" + "5");

            tokenArray.Add(aValue);
            tokenArray.Add("<"+rnum.ToString()+","+rpos.ToString()+">");
			symbolTable.Add(tokenArray);

			ArrayList tempArray=tokenArray;

			for(int j=0;j<tempArray.Count;j++)
			{
				Console.Write(tempArray[j].ToString()+"     ");
			}
			Console.WriteLine();

			str="";
		}
    //判斷是否是字母
		private bool character(char checkChar)
		{
			int checkInt = (int)checkChar;
			if((checkInt<=122&&checkInt>=97)||(checkInt>=65&&checkInt<=97))
			{
				return true;
			}
			return false;
		}
    //判斷是否是數字
		private bool digit(char checkChar)
		{
			int checkInt = (int)checkChar;
			if(checkInt<=57&&checkInt>=48)
			{
				return true;
			}
			return false;
		}
    //判斷是否是保留字(關鍵字)
		private bool Keyword(String checkKey)
		{
			if(checkKey.Equals("if")||checkKey.Equals("then")||
				checkKey.Equals("else")||checkKey.Equals("int")||
				checkKey.Equals("for")||checkKey.Equals("while"))
			{
				return true;
			}
			return false;
		}
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av手机在线观看| 日韩福利视频网| 热久久久久久久| 成人综合婷婷国产精品久久蜜臀| 欧美日韩视频在线一区二区| 国产三级三级三级精品8ⅰ区| 午夜精品久久久久久久久久久| 成人一区二区三区视频在线观看 | 日韩二区三区在线观看| 成人av免费网站| 精品久久99ma| 五月天激情小说综合| 99re这里都是精品| 日本一区二区成人| 国产一区二区免费在线| 91精品国产色综合久久不卡电影| 亚洲婷婷国产精品电影人久久| 国产一区二区三区日韩| 欧美一级黄色录像| 性感美女极品91精品| 色乱码一区二区三区88| 国产精品日韩精品欧美在线| 久久99久久99小草精品免视看| 欧美精品自拍偷拍动漫精品| 椎名由奈av一区二区三区| 国产999精品久久久久久绿帽| 精品国产一二三| 六月丁香综合在线视频| 在线综合亚洲欧美在线视频| 亚洲午夜精品一区二区三区他趣| 色哟哟国产精品| 成人欧美一区二区三区黑人麻豆 | 精品一区二区三区蜜桃| 日韩精品最新网址| 捆绑变态av一区二区三区| 欧美一级精品在线| 另类调教123区 | 91亚洲男人天堂| 中文字幕中文字幕一区二区| 成人教育av在线| 中文字幕在线观看一区二区| 成人福利视频在线| 自拍偷拍亚洲激情| 色一区在线观看| 一区二区国产盗摄色噜噜| 色综合天天综合色综合av| 亚洲欧美激情在线| 91九色最新地址| 亚洲成人av一区| 91精品国产一区二区| 日韩成人免费在线| 欧美mv日韩mv亚洲| 国产高清视频一区| 中文字幕中文字幕中文字幕亚洲无线| 91在线视频在线| 亚洲最新视频在线观看| 欧美日韩国产另类一区| 欧美a级理论片| 久久综合色婷婷| 播五月开心婷婷综合| 亚洲美女视频一区| 欧美日韩国产精品自在自线| 日本不卡一区二区| 久久影院午夜论| 成人污视频在线观看| 亚洲精品国产a| 在线不卡a资源高清| 久久精品国产澳门| 中文字幕精品综合| 色婷婷亚洲精品| 日韩国产欧美在线视频| 久久综合久久综合九色| av电影在线观看一区| 亚洲一区在线观看免费观看电影高清| 欧美日本一区二区三区四区 | 亚洲美女区一区| 91精品午夜视频| 国产精品一线二线三线| 亚洲免费观看视频| 日韩欧美在线1卡| 成人av资源网站| 亚洲v精品v日韩v欧美v专区| 欧美mv和日韩mv国产网站| 北条麻妃一区二区三区| 亚洲国产精品一区二区www在线| 日韩欧美一级片| av亚洲精华国产精华精| 日韩精品久久理论片| 国产欧美精品日韩区二区麻豆天美| 91啪九色porn原创视频在线观看| 日韩 欧美一区二区三区| 国产三级精品在线| 欧美日韩中文一区| 国产激情一区二区三区| 亚洲一区二区三区中文字幕| 欧美一区二区观看视频| 国产 日韩 欧美大片| 性感美女极品91精品| 国产精品久久久久影视| 在线不卡免费欧美| aaa亚洲精品一二三区| 青青草一区二区三区| 中文字幕日韩一区二区| 日韩精品一区二区三区在线观看 | 欧美一级免费大片| 99精品一区二区三区| 蜜桃传媒麻豆第一区在线观看| 综合分类小说区另类春色亚洲小说欧美| 欧美二区乱c少妇| 色综合久久66| 丰满白嫩尤物一区二区| 青青国产91久久久久久| 一个色综合网站| 国产精品丝袜久久久久久app| 日韩欧美激情四射| 欧美在线一区二区三区| 成人黄色av网站在线| 麻豆freexxxx性91精品| 一区二区三区电影在线播| 久久精品视频在线免费观看| 91超碰这里只有精品国产| 色婷婷久久综合| 99riav一区二区三区| 国产aⅴ综合色| 久久精品久久综合| 日本最新不卡在线| 亚洲综合色成人| 日韩毛片一二三区| 国产日韩精品一区| 亚洲精品一区二区三区香蕉| 3d动漫精品啪啪1区2区免费| 日本韩国欧美国产| 99视频超级精品| 国产91露脸合集magnet| 国产一区二区三区精品视频| 蜜臀久久99精品久久久画质超高清 | 成人av免费在线观看| 国产激情91久久精品导航| 精品一区在线看| 欧美aaa在线| 免费成人av资源网| 日韩av午夜在线观看| 爽爽淫人综合网网站| 亚洲午夜在线视频| 亚洲一区日韩精品中文字幕| 亚洲久草在线视频| 亚洲色大成网站www久久九九| 中文无字幕一区二区三区| 国产欧美一区视频| 国产三级久久久| 欧美—级在线免费片| 国产亚洲精品精华液| 国产日产欧美一区二区三区| 久久这里都是精品| 国产亚洲欧美日韩俺去了| 中文字幕免费观看一区| 国产精品国产a级| 中文字幕在线不卡一区二区三区 | 欧美日韩aaaaaa| 欧美肥胖老妇做爰| 日韩欧美一二三| 欧美mv和日韩mv的网站| 久久久欧美精品sm网站| 国产欧美日韩卡一| 国产精品免费看片| 亚洲视频免费在线观看| 一区二区高清免费观看影视大全| 一区二区三区丝袜| 天天综合网 天天综合色| 日韩福利电影在线观看| 久久99国产精品尤物| 国产乱码一区二区三区| 成人在线视频一区二区| 91一区二区三区在线观看| 在线亚洲精品福利网址导航| 欧美日韩一区二区三区免费看| 欧美日韩一级片在线观看| 欧美一级欧美三级在线观看| 久久久久久毛片| 中文字幕在线观看不卡视频| 亚洲一区二区精品视频| 日韩高清在线电影| 国产九色sp调教91| 91在线观看一区二区| 精品视频色一区| 日韩精品一区二区三区视频| 国产日韩欧美高清在线| 亚洲最大的成人av| 美女爽到高潮91| 国产成人99久久亚洲综合精品| 97久久精品人人做人人爽 | 国产盗摄视频一区二区三区| 99久久亚洲一区二区三区青草| 欧美亚洲愉拍一区二区| 日韩欧美在线网站| 国产精品三级电影| 石原莉奈在线亚洲三区| 国产精品一二三区| 欧美亚洲国产一区在线观看网站| 日韩午夜精品电影|