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

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

?? unit1.cpp

?? 利用字符二維數組對文法、First集、Follow集、終結符集、非終結符集等數據進行存儲
?? CPP
字號:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include"stack.h"
#include"publicfunction.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        SetTnum=0;
        SetNnum=0;
        int N=0;
        int K=0;
        X=30;
        Y=30;
}

//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)
{
        Form1->Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBoxEx1Change(TObject *Sender)
{

        if(ComboBoxEx1->ItemIndex==0)
        {
                Memo1->Enabled=false;
                ComboBoxEx2->Enabled=true;
                BitBtn1->Enabled=true;
        }
        if(ComboBoxEx1->ItemIndex==1)
        {
                Memo1->Enabled=true;
                ComboBoxEx2->Enabled=false;
                BitBtn1->Enabled=true;
        }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBoxEx2Change(TObject *Sender)
{
        if(ComboBoxEx2->ItemIndex==0)
        {       Memo1->Clear();
                Memo1->Lines->Add("E->E*n");
                Memo1->Lines->Add("E->n");

        }
        if(ComboBoxEx2->ItemIndex==1)
        {
                Memo1->Clear();
                Memo1->Lines->Add("P->bPb");
                Memo1->Lines->Add("P->cPc");
                Memo1->Lines->Add("P->d");
        }
        if(ComboBoxEx2->ItemIndex==2)
        {
                Memo1->Clear();
                Memo1->Lines->Add("E->E+T");
                Memo1->Lines->Add("E->E");
                Memo1->Lines->Add("T->T*F");
                Memo1->Lines->Add("T->F");
                Memo1->Lines->Add("F->(E)");
                Memo1->Lines->Add("F->i");
        }

}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
        ListBox1->Clear();
        SLRGrid->Visible=false;
        DFA();
        Button1->Enabled=true;
        BitBtn1->Enabled=false;
}
//---------------------------------------------------------------------------'

//---------------------------------------------------------------------------
void TForm1::DrawDFA(int start, int end, char token, TImage * image)
{
        //TODO: Add your source code here
        int x2=X+80,y2=Y;
        image->Canvas->Ellipse(X-15,Y-15,X+15,Y+15);
        image->Canvas->TextOutA(X-5,Y-5,IntToStr(start));
        image->Canvas->MoveTo(X+15,Y);
        image->Canvas->LineTo(x2-15,Y);
        image->Canvas->MoveTo(x2-15-5,Y-5);
        image->Canvas->LineTo(x2-15,Y);
        image->Canvas->LineTo(x2-15-5,Y+6);
        image->Canvas->Ellipse(x2-15,y2-15,x2+15,y2+15);
        image->Canvas->TextOutA(x2-5,y2-5,IntToStr(end));
        image->Canvas->TextOutA(X/2+x2/2-5,Y-15-5,token);
        X=X+150;
        if(X+100>457){X=30;Y=Y+50;}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        SLRGrid->Visible=true;
        Image1->Visible=false;
        for( int i=0;i<100;i++)//初始化表
        {
	   token[i]='\0';
	   for(int j=0;j<100;j++)
	   {
		   table[i][j]=-1;
	   }
        }

   //token中保存所有的終結符和非終結符
     int i=0;
     while(SetT[i]!='\0')
	{
	    token[i]=SetT[i];
     i++;
	}
	token[i++]='$';
	int j=1;//不要文法的開始符號
	while(SetN[j]!='\0')
	{
		token[i]=SetN[j];
		i++;
		j++;
	}

    for(int i=0;i<=N;i++)
    {
     SLRGrid->Cells[0][i+1]=IntToStr(i);
     SLRGrid->RowCount++;
    }
     i=0;
     j=1;
    while(token[i]!='\0')
    {
      SLRGrid->Cells[j][0]=token[i];
      SLRGrid->ColCount++;
      i++;
      j++;
    }
      i=0;
        while(i<=N)
        {
	   for(int j=0;j<=N;j++)//處理TAB表
	   {
		   if(TAB[i][j]!='#')
		   {
			   int t=0;
			   while(token[t]!=TAB[i][j])
				   t++;
			   if(TAB[i][j]>=65&&TAB[i][j]<=90)
                             {
                             table[i][t]=j;
                             SLRGrid->Cells[t+1][i+1]=IntToStr(j);
                             }
			   else
                           {
                           table[i][t]=10000+j;
                           SLRGrid->Cells[t+1][i+1]="S"+IntToStr(j);
                           }

		   }
	   }

	    int j=0;//處理DA表
	   while(DA[i][j]!=-1)
	   {
		   int x=DA[i][j];
		   int y=DA[i][j+1];
		   if(P[x][y]=='\0'||P[x][y]=='@')
		   {
			   int fo=0;//找到follow集合
			   while(P[x][0]!=follow[fo][0])
				   fo++;
			   int m=1;
			   while(follow[fo][m]!='\0')
			   {
				   int n=0;
				   while(follow[fo][m]!=token[n])
					   n++;
				   table[i][n]=20000+x;

                                   SLRGrid->Cells[n+1][i+1]=SLRGrid->Cells[n+1][i+1]+"r("+P[x][0]+"->";
                                   int v=1;
                                   while(P[x][v]!='\0')
                                   {
                                   SLRGrid->Cells[n+1][i+1]=SLRGrid->Cells[n+1][i+1]+P[x][v];
                                   v++;
                                   }
                                   SLRGrid->Cells[n+1][i+1]=SLRGrid->Cells[n+1][i+1]+")";
				   m++;
			   }
		   }
		   j=j+2;
	   }

   i++;
   }
   if(i>N)
   {
        Application->MessageBoxA("Analyse Table Achieve!","Message",MB_ICONASTERISK);
   }
}
//---------------------------------------------------------------------------


void TForm1::DFA(void)
{
        //TODO: Add your source code here
        IntProduction();
        ConNandTSet();
	FirstS();
        FollowS();
        DFACon();
}

void TForm1::FirstS(void)
{
        //TODO: Add your source code here
        
	for(int i=0;i<SetNnum;i++)//初始化first集合
	first[i][0]=SetN[i];
        bool change=true;
	while(change==true)//計算first集合
	{
                change=false;
		for(int i=0;i<Pnum;i++)
		{
			int k=1;bool continues=true;
			while(continues==true&&P[i][k]!='\0')
			{
				if(add(P[i][k],P[i][0],first)==true)
					change=true;
				if(P[i][k]>=65&&P[i][k]<=90)
				{
					int j=0;
					while(P[i][k]!=first[j][0])
						j++;
					if(inset('@',first[j])==false)
						continues=false;
				}
				else if(P[i][k]!='@')continues=false;
				k++;
			}
			if(continues==true)
			{

				int ps=0;
				while(P[i][0]!=first[ps][0])
					ps++;
				if(inset('@',first[ps])==false)
				{
				int j=0;
				while(first[ps][j]!='\0')
					j++;
				first[ps][j]='@';
				change=true;
				}
			}
		}
	}
}

void TForm1::FollowS(void)
{
        //TODO: Add your source code here
for(int i=0;i<SetNnum;i++)
        follow[i][0]=SetN[i];
  follow[0][1]='$';
   bool changef=true;
  while(changef==true)
  {
	  changef=false;
   for(int i=0;i<Pnum;i++)//follow集合
   {
	   int j=1;
	   while(P[i][j]!='\0')
	   {
		  if(P[i][j]>=65&&P[i][j]<=90)//P[i][j]為非終結符,求G[i][j]的follow集合
		  {
		   int k=j+1;
		   while(P[i][k]!='\0')
		   {
			   if((P[i][k]<65||P[i][k]>90)&&P[i][k]!='@')//P[i][k]為終結符,將終結符加到follow集合
			   {if(add(P[i][k],P[i][j],follow)==true)
				   changef=true;
			    break;
			   }
				else if(P[i][k]>=65&&P[i][k]<=90)//P[i][k]為非終結符,將該非終結符的first集合加到follow集合
				{
					if(addfirstfollow(P[i][k],P[i][j],first,follow)==true)
						changef=true;
					int ps=0;
					while(P[i][k]!=first[ps][0])
						ps++;
					if(inset('@',first[ps])==false)
						break;
				}
				k++;
		   }
		   if(P[i][k]=='\0')//將規則左部的非終結符的follow集合加到當前的非終結符的follow集合中
		   {
                        if(add(P[i][0],P[i][j],follow)==true)
                                changef=true;
		   }
		  }
		   j++;
	   }
   }//for
   }// while(changef==true)
}
//====================================================================
void TForm1::DFACon(void)
{
	for(int i=0;i<100;i++)//初始化狀態集合
		for(int j=0;j<100;j++)
		{DA[i][j]=-1;TAB[i][j]='#';}
	int clo[100];//閉包集合
        closure(0,1,clo,Pnum,P);//初始項的閉包
	 int i=0;
	while(clo[i]!=-1)
	{
		DA[0][i]=clo[i];
		i++;
	}
        int check=checkconflict( N, DA, follow,P);
        if(check==1)
                ListBox1->Items->Add("狀態0產生移進-歸約沖突");
        else if(check==2)
                ListBox1->Items->Add("狀態0產生歸約-歸約沖突");
        if(check==1||check==2)
        {
        Image1->Canvas->Brush->Color=clRed;
        Image1->Canvas->Ellipse(30-15,30-15,30+15,30+15);
        Image1->Canvas->TextOutA(30,30,"0");
        Image1->Canvas->Brush->Color=clWhite;
        }
        Image1->Canvas->Ellipse(0,0,0,0);
 	while(K<=N)
	{
                int clo1[100];
		int i=0;

		while(DA[K][i]!=-1)//處理狀態K
		{
			int x=DA[K][i];
			int y=DA[K][i+1];
			if(P[x][y]!='\0'&&P[x][y]!='@')//要進行處理的項
			{
				int f=-1;
				for(int m=0;m<=N;m++)
				{
					int n=0;
					while(DA[m][n]!=-1)
					{
						if(DA[m][n]==x&&DA[m][n+1]==y+1)
						{f=m;goto L;}
						n=n+2;
					}
				}
L:
				if(f!=-1)
				{
					TAB[K][f]=P[x][y];
                                        DrawDFA(K,f,P[x][y],Image1);
				}
				else
				{
					int check=0;
					while(TAB[K][check]!=P[x][y]&&TAB[K][check]!='\0')
						check++;
					if(TAB[K][check]==P[x][y])
					{
						closure(x,y+1,clo1,Pnum,P);
						int t1=0;
						while(DA[check][t1]!=-1)
							t1++;
						int t2=0;
						while(clo1[t2]!=-1)
						{
							DA[check][t1]=clo1[t2];
							t1++;
							t2++;
						}
                                                //在這里添加代碼檢測沖突
                                                int check2=checkconflict( check, DA, follow,P);
                                                if(check2==1)
                                                        ListBox1->Items->Add("狀態"+IntToStr(check)+"產生移進-歸約沖突");
                                                else if(check2==2)
                                                        ListBox1->Items->Add("狀態"+IntToStr(check)+"產生歸約-歸約沖突");
                                                DrawDFA(K,check,P[x][y],Image1);
					}
					else
					{

					N++;
					TAB[K][N]=P[x][y];
					closure(x,y+1,clo1,Pnum,P);
					int tem=0;
					while(clo1[tem]!=-1)
					{
		                        DA[N][tem]=clo1[tem];
		                        tem++;
					}

					//在這里添加代碼檢測沖突
                                        int check2=checkconflict( N, DA, follow,P);
                                       if(check2==1)
                                                ListBox1->Items->Add("狀態"+IntToStr(N)+"產生移進-歸約沖突");
                                       else if(check2==2)
                                                ListBox1->Items->Add("狀態"+IntToStr(N)+"產生歸約-歸約沖突");
                                       DrawDFA(K,N,P[x][y],Image1);
                                       }
				}
			}//if
			i=i+2;//檢測下一條文法規則
		}//end while(DA[k][i]!=0)
		K++;//檢測下一個狀態
	}//end while(K<=N)
    if(K>N)
    {
        Application->MessageBoxA("DFA Achieve!","Message",MB_ICONASTERISK);
    }
}

void TForm1::IntProduction(void)
{
        //TODO: Add your source code here
        char *str=new char [100];
        for(int i=0;i<Memo1->Lines->Count;i++)
        {
                strcpy(str,Memo1->Lines->Strings[i].c_str());
                int j=0;
                while(str[j]!='\x18'&&str[j]!='\0'&&str[j]!='\x14')
                {P[i][j]=str[j];j++;}
                Pnum++;
        }
        delete str;
        for(int i=Pnum;i>0;i--)
        {
                int k=0,l=0;
                for(;k<100;k++)
                        P[i][k]='\0';
                k=0;
                while(P[i-1][k]!='\0'&&P[i-1][k]!='\x18'&&P[i-1][k]!='\x14')
                {
                        if(P[i-1][k]=='-'&&P[i-1][k+1]=='>')
                        {
                                k=k+2;
                                continue;
                        }
                        P[i][l]=P[i-1][k];
                        l++;
                        k++;
                }
        }
        for(int k=0;k<100;k++)
                P[0][k]='\0';
        P[0][0]='P';
        P[0][1]=P[1][0];
        Pnum++;
       
}

void TForm1::ConNandTSet(void)
{
        //TODO: Add your source code here
         for (int m=0;m<100;m++)
	{  SetT[m]='\0';SetN[m]='\0';
		for(int n=0;n<100;n++)
		{first[m][n]='\0';follow[m][n]='\0';}

	}
        for(int i=0;i<Pnum;i++)//計算終結符與非終結符集合
	{
		int j=0;
		while(P[i][j]!='\0')
		{
			if((P[i][j]<65||P[i][j]>90)&&P[i][j]!='@'&&inset(P[i][j],SetT)==false)
			{
			  SetT[SetTnum]=P[i][j];
			  SetTnum++;
			}
			else if(P[i][j]>=65&&P[i][j]<=90&&inset(P[i][j],SetN)==false)
			{
			 SetN[SetNnum]=P[i][j];
			 SetNnum++;
			}
			j++;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一级二级| 日本成人在线一区| 亚洲欧洲三级电影| 国产调教视频一区| 国产亚洲欧洲一区高清在线观看| 精品国产乱码久久久久久浪潮| 欧美高清视频不卡网| 欧美高清一级片在线| 91精品国产高清一区二区三区蜜臀| 欧美日韩精品免费| 制服丝袜在线91| 日韩一区二区三区四区五区六区| 欧美一区二区三区婷婷月色| 日韩欧美色综合| 337p粉嫩大胆色噜噜噜噜亚洲| ww亚洲ww在线观看国产| 国产女人aaa级久久久级| 中国av一区二区三区| 亚洲手机成人高清视频| 亚洲精品ww久久久久久p站| 亚洲与欧洲av电影| 日韩电影免费在线看| 激情亚洲综合在线| 成人一区二区三区中文字幕| 99精品视频在线播放观看| 在线观看视频一区| 日韩一级片在线播放| 久久久久亚洲蜜桃| 亚洲免费三区一区二区| 午夜精品久久久久久久久久久| 久久er精品视频| 成人免费看片app下载| 在线观看亚洲a| 欧美tickling挠脚心丨vk| 中文字幕精品一区二区精品绿巨人| 国产精品电影院| 亚洲成人tv网| 国产v综合v亚洲欧| 欧美亚洲日本一区| 久久新电视剧免费观看| 亚洲免费观看高清完整版在线观看熊 | 极品美女销魂一区二区三区 | 成人高清免费观看| 欧美日韩激情一区二区三区| 精品成人一区二区三区四区| 亚洲图片欧美激情| 久久国产精品72免费观看| 99久久久久久99| 日韩免费成人网| 亚洲人123区| 国内一区二区视频| 欧美午夜精品电影| 欧美高清一级片在线观看| 日韩激情在线观看| 99久久久精品| 欧美精品一区二| 性做久久久久久久免费看| 成人午夜私人影院| 日韩一区二区三区免费看| 国产精品久久久久影院| 免费精品99久久国产综合精品| 99久久国产综合精品色伊 | 婷婷成人激情在线网| 国产成人a级片| 91精品国产高清一区二区三区| 中文字幕五月欧美| 国产麻豆精品theporn| 欧美日韩国产中文| 亚洲日本在线a| 国产精品一品视频| 日韩精品最新网址| 午夜精品久久久久久久99樱桃| 91视频在线观看| 欧美激情一区不卡| 国产一区二区三区在线观看免费 | 国产美女一区二区| 久久66热re国产| 精品一区二区av| 久久91精品久久久久久秒播| 韩国中文字幕2020精品| 国产乱妇无码大片在线观看| 高清不卡在线观看| av亚洲精华国产精华精华 | 91污片在线观看| 91激情在线视频| 欧美视频在线播放| 欧美一区二区三区人| 日韩欧美国产精品一区| 久久老女人爱爱| 国产精品女同一区二区三区| 1024精品合集| 亚洲福利一二三区| 日本不卡视频一二三区| 激情亚洲综合在线| 波多野结衣一区二区三区| 一本久久精品一区二区| 欧美视频中文一区二区三区在线观看 | 一区二区视频在线看| 午夜视频久久久久久| 久久99国产精品尤物| 成人激情综合网站| 精品视频在线免费观看| 欧美大片一区二区| 中文av一区特黄| 天天操天天综合网| 国产一区二区三区av电影| 99国产精品久久久久久久久久| 欧美日韩午夜在线| 精品国产乱码久久久久久老虎| 自拍偷在线精品自拍偷无码专区| 亚洲成人在线网站| 国产麻豆精品95视频| 色哟哟亚洲精品| 精品国产一区二区亚洲人成毛片| 国产精品久久久久一区二区三区 | 蜜乳av一区二区三区| 国产999精品久久| 欧美日韩小视频| 国产欧美一区二区三区沐欲| 洋洋成人永久网站入口| 极品瑜伽女神91| 在线精品视频小说1| 久久久综合九色合综国产精品| 亚洲欧美区自拍先锋| 国产一区二区三区黄视频 | 精品在线你懂的| 在线观看日韩毛片| 国产丝袜在线精品| 日本美女一区二区| 91蝌蚪porny| 久久精品亚洲精品国产欧美| www.久久久久久久久| 日韩欧美一级特黄在线播放| 一区二区久久久久久| 国产不卡在线视频| 国产成+人+日韩+欧美+亚洲| 99国产精品久久久久久久久久久 | 日韩福利电影在线观看| 国产99久久久精品| 日韩欧美国产一二三区| 一区二区三区丝袜| 99久久精品国产精品久久| 久久综合久久久久88| 日本美女一区二区| 欧美日韩一二三| 亚洲激情综合网| a级高清视频欧美日韩| 久久综合九色综合欧美98| 天天综合色天天| 欧美午夜寂寞影院| 亚洲美女在线一区| caoporn国产精品| 国产欧美一区二区精品仙草咪| 久久成人免费网站| 日韩视频在线一区二区| 婷婷开心久久网| 欧美日韩一区精品| 亚洲午夜精品17c| 在线观看日韩国产| 一卡二卡三卡日韩欧美| 色www精品视频在线观看| 日韩毛片一二三区| 色综合久久88色综合天天免费| 亚洲欧洲精品成人久久奇米网| 国产不卡一区视频| 国产精品视频一区二区三区不卡| 国产一区二区三区四区五区入口| 2欧美一区二区三区在线观看视频| 韩国欧美一区二区| 国产丝袜在线精品| www.日韩大片| 亚洲另类在线视频| 91免费视频观看| 亚洲一区精品在线| 欧美日韩国产区一| 蜜桃一区二区三区在线| 91精品欧美综合在线观看最新| 日韩成人一级大片| 精品粉嫩超白一线天av| 国产精品夜夜嗨| 韩国毛片一区二区三区| 久久午夜电影网| av亚洲精华国产精华精| 一二三区精品福利视频| 91精品一区二区三区在线观看| 久久精品免费观看| 国产欧美日本一区视频| 91视频在线观看免费| 视频一区免费在线观看| 欧美本精品男人aⅴ天堂| 国产91清纯白嫩初高中在线观看 | 激情文学综合丁香| 中文字幕人成不卡一区| 在线看一区二区| 久久国产日韩欧美精品| 国产精品亲子伦对白| 精品视频一区二区不卡| 精品一区二区三区视频在线观看 | 在线亚洲高清视频| 美国欧美日韩国产在线播放|