⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yffx.txt

📁 语法分析是编译程序的核心部分,其主要任务是确定语法结构,检查 语法错误
💻 TXT
字号:
public void analyzer()
		{
		     //***************************
			//循环读取grammar.txt
			//***************************
			     /*此处代码略*/
			//***************************
			//循环读取 lengh.txt
			//***************************
                  /*此处代码略*/
			//****************************
			// 读入文件,进行语法分析
			//****************************
			string strReadFile;
			strReadFile="input.txt";
			myTextRead.myStreamReader=new StreamReader(strReadFile);
			string strBufferText;
			int wid =0;
			Console.WriteLine("分析读入程序(记号ID):\n");
			do
			{	
				strBufferText =myTextRead.myStreamReader.ReadLine();

				if(strBufferText==null)
					break;
				
				foreach (String subString in strBufferText.Split())
				{
					if(subString!="")
					{
						int ll;
						if(subString!=null)
						{
							ll= subString.Length; //每一个长度
						}
						else
						{
							break;
						}
						int a=ll+1;
						char[] b = new char[a];
						
						StringReader sr = new StringReader(subString);	
						sr.Read(b, 0, ll);            //把substring 读到char[]数组里	
						int sort=(int)b[0];
						// word[i] 和 wordNum[i]对应
						//先识别出一整个串,再根据开头识别是数字还是字母
						Word[wid]=subString;
						if(subString.Equals("void"))
						{wordNum[wid]=0;}
						else 
						{
							if(subString.Equals("main"))
							{wordNum[wid]=1;}
							else 
							{
								if(subString.Equals("()"))
								{wordNum[wid]=2;}
								else 
								{
									if(subString.Equals("{"))
									{wordNum[wid]=3;}
									else 
									{
										if(subString.Equals("int"))
										{wordNum[wid]=4;}
										else 
										{
											if(subString.Equals("="))
											{wordNum[wid]=6;}
											else 
											{
												if(subString.Equals("}"))
												{wordNum[wid]=22;}
												else 
												{
													if(subString.Equals(";"))
													{wordNum[wid]=23;}
													else //识别变量和数字
													{
														if(sort>47&sort<58)
														{wordNum[wid]=7;}
														else 
														{wordNum[wid]=5;}
													}
												}
											}
										}
									}
								}
							}
						}
						Console.Write(subString+"("+wordNum[wid]+")"+" ");

						wid++;
					}
				}
				Console.WriteLine("\n");
			}while (strBufferText!=null);
			wordNum[wid]=24;
			myTextRead.myStreamReader.Close();

			//*********************************
			//读入LR分析表
			//
			//***********************************
  /*此处代码略*/

			int[] state = new int[100];
			string[] symbol =new string[100];
			state[0]=0;
			symbol[0]="#";
			int p1=0;
			int p2=0;
			Console.WriteLine("\n按文法规则归约顺序如下:\n");
			//***************
			// 归约算法如下所显示
			//***************
			while(true)
			{
				int j,k;
				
				j=state[p2];
				
				k=wordNum[p1];
				t=LR[j,k]; //当出现t为0的时候
				if(t==0)
				{
					//错误类型
					string error;
					if(k==0)
						error="void";
					else
						if(k==1)
						error="main";
					else
						if(k==2)
						error="()";
					else
						if(k==3)
						error="{";
					else
						if(k==4)
						error="int";
					else
						if(k==6)
						error="=";
					else
						if(k==22)
						error="}";
					else
						if(k==23)
						error=";";
					else
						error="其他错误符号";
					Console.WriteLine("\n检测结果:");
					Console.WriteLine("代码中存在语法错误");
					Console.WriteLine("错误状况:错误状态编号为 "+j+" 读头下符号为 "+error);
					break;
				}
				else
				{
					if(t==-100)                    //-100为达到接受状态
					{
						Console.WriteLine("\n");
						Console.WriteLine("\n检测结果:");
						Console.WriteLine("代码通过语法检测");
						break;
					}
					if(t<0&&t!=-100)                //归约
					{
						string m=grammar[-t];
						Console.Write(m+" ");      //输出开始符
						int length=lengh[-t];  
						p2=p2-(length-1);          
						Search mySearch=new Search();
						int right=mySearch.search(m);
						if(right==0)
						{
							Console.WriteLine("\n");
							Console.WriteLine("代码中有语法错误");
							break;
						}
						int a=state[p2-1];
						int LRresult= LR[a,right];
						state[p2]=LRresult;
						symbol[p2]=m;
					}
					if(t>0)
					{
						p2=p2+1;
						state[p2]=t;
						symbol[p2]=Convert.ToString(wordNum[p1]);
						p1=p1+1;
					}
				}

			}
			myTextRead.myStreamReader.Close();
			Console.Read();
		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -