dfamatrix.cpp

来自「正则表达式由一些普通字符和一些元字符(metacharacters)组成。普通字」· C++ 代码 · 共 75 行

CPP
75
字号
#include "DfaMatrix.h"

DfaMatrix::DfaMatrix()
{
	StatusSize=0;
	CharLinkSize=0;
	Final=0;
}

DfaMatrix::DfaMatrix(const int TempStatusSize,const int TempCharLinkSize)
{
	New(TempStatusSize, TempCharLinkSize);
}

void DfaMatrix::New()
{
	Data.New(StatusSize+1, CharLinkSize+1);
	Data.Initialize(Epsilon);

	Final=new bool[StatusSize+1];
	for (int i=0; i<=StatusSize; ++i)
		Final[i]=0;
}

void DfaMatrix::New(const int TempStatusSize,const int TempCharLinkSize)
{
	StatusSize=TempStatusSize;
	CharLinkSize=TempCharLinkSize;
	New();
}

void DfaMatrix::GetDfaMatrix()
{
	Node<DfaEdgeBase*>* Temp_AllEdge=DfaEdgeBase::AllEdge.GetHead();
	while (Temp_AllEdge)
	{
		//SetFinal
		if (Temp_AllEdge->Data->From->FinalStatus)
			Final[Temp_AllEdge->Data->From->Data.Number]=1;
		else if (Temp_AllEdge->Data->To->FinalStatus)
			Final[Temp_AllEdge->Data->To->Data.Number]=1;

		//SetData
		int FromStatusNumber=Temp_AllEdge->Data->From->Data.Number;
		int ToStatusNumber=Temp_AllEdge->Data->To->Data.Number;
		Node<int>* TempNode_MatchContent=Temp_AllEdge->Data->Data.Data.GetHead();
		while (TempNode_MatchContent)
		{
			Data(FromStatusNumber, TempNode_MatchContent->Data)=ToStatusNumber;
			TempNode_MatchContent=TempNode_MatchContent->Next;
		}
		Temp_AllEdge=Temp_AllEdge->Next;
	}
}

void DfaMatrix::Print()
{
	cout<<"DfaMatrix:"<<endl;
	for (int i=0; i<=StatusSize; ++i)
	{
		cout<<"DfaStatus "<<i;
		if (Final[i])
			cout<<" (final)";
		cout<<" : ";
		for (int j=0; j<=CharLinkSize; ++j)
			if (Data(i,j)!=0)
				cout<<j<<" -> "<<Data(i,j)<<" | ";
		cout<<endl;
	}
}

DfaMatrix::~DfaMatrix()
{
	Data.Release();
}

⌨️ 快捷键说明

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