?? yffx.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 + -