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

📄 data.txt

📁 编译原理
💻 TXT
字号:
#include "DoFunHead.h"

typedef struct
{
	int state;
	boolean isEnd;
	void (*pDoFun)();
	SonTableItem *pNextTable;
	int nextTableSize;
}MainTableItem;

typedef struct 
{
	boolean (*pJudgeFun)();
	int nextState;
}SonTableItem;

MainTableItem mainTable[14];
SonTableItem sonTable1[3];
SonTableItem sonTable2[3];
SonTableItem sonTable3[2];
SonTableItem sonTable4[3];

void intializeMainTable()
{
	//0
	mainTable[0].state = 0;
	mainTable[0].isEnd = false;
	mainTable[0].pDoFun = NULL;
	mainTable[0].pNextTable = sonTable1;
	mainTable[0].nextTableSize = 3;

	//1
	mainTable[0].state = 1;
	mainTable[0].isEnd = false;
	mainTable[0].pDoFun = NULL;
	mainTable[0].pNextTable = sonTable2;
	mainTable[0].nextTableSize = 3;

	//2
	mainTable[0].state = 2;
	mainTable[0].isEnd = true;
	mainTable[0].pDoFun = doSymbol;
	mainTable[0].pNextTable = NULL;
	mainTable[0].nextTableSize = 0;

	//3
	mainTable[0].state = 3;
	mainTable[0].isEnd = false;
	mainTable[0].pDoFun = NULL;
	mainTable[0].pNextTable = sonTable3;
	mainTable[0].nextTableSize = 2;

	//4
	mainTable[0].state = 4;
	mainTable[0].isEnd = true;
	mainTable[0].pDoFun = doConst;
	mainTable[0].pNextTable = NULL;
	mainTable[0].nextTableSize = 0;

	//5
	mainTable[0].state = 5;
	mainTable[0].isEnd = true;
	mainTable[0].pDoFun = doOperation;
	mainTable[0].pNextTable = NULL;
	mainTable[0].nextTableSize = 0;

	//6
	mainTable[0].state = 6;
	mainTable[0].isEnd = true;
	mainTable[0].pDoFun = doOperation;
	mainTable[0].pNextTable = NULL;
	mainTable[0].nextTableSize = 0;

	//7
	mainTable[0].state = 7;
	mainTable[0].isEnd = false;
	mainTable[0].pDoFun = NULL;
	mainTable[0].pNextTable = sonTable4;
	mainTable[0].nextTableSize = 3;

	//8
	mainTable[0].state = 8;
	mainTable[0].isEnd = true;
	mainTable[0].pDoFun = doOperation;
	mainTable[0].pNextTable = NULL;
	mainTable[0].nextTableSize = 0;

	//9
	mainTable[0].state = 9;
	mainTable[0].isEnd = true;
	mainTable[0].pDoFun = doOperation;
	mainTable[0].pNextTable = NULL;
	mainTable[0].nextTableSize = 0;

	//10
	mainTable[0].state = 10;
	mainTable[0].isEnd = true;
	mainTable[0].pDoFun = doOperation;
	mainTable[0].pNextTable = NULL;
	mainTable[0].nextTableSize = 0;

	//11
	mainTable[0].state = 11;
	mainTable[0].isEnd = true;
	mainTable[0].pDoFun = doBoundary;
	mainTable[0].pNextTable = NULL;
	mainTable[0].nextTableSize = 0;

	//12
	mainTable[0].state = 12;
	mainTable[0].isEnd = true;
	mainTable[0].pDoFun = doBoundary;
	mainTable[0].pNextTable = NULL;
	mainTable[0].nextTableSize = 0;

	//13
	mainTable[0].state = 13;
	mainTable[0].isEnd = true;
	mainTable[0].pDoFun = doError;
	mainTable[0].pNextTable = NULL;
	mainTable[0].nextTableSize = 0;
}

intializeSonTable()
{
	//sonTable1
	sonTable1[0].pJudgeFun = isLetter;
	sonTable1[0].nextState = 9;

	sonTable1[1].pJudgeFun = isNumber;
	sonTable1[1].nextState = 10;

	sonTable1[2].pJudgeFun = isNotEqualAdd;
	sonTable1[2].nextState = 8;

	//sonTable2
	sonTable2[0].pJudgeFun = isLetter;
	sonTable2[0].nextState = 9;

	sonTable2[1].pJudgeFun = isNumber;
	sonTable2[1].nextState = 10;

	sonTable2[2].pJudgeFun = isNotLetterNumber;
	sonTable2[2].nextState = 8;

	//sonTable3
	sonTable3[0].pJudgeFun = isNumber;
	sonTable3[0].nextState = 3;

	sonTable3[1].pJudgeFun = isNotNumber;
	sonTable3[1].nextState = 4;

	//sonTable4
	sonTable4[0].pJudgeFun = isAdd;
	sonTable4[0].nextState = 9;

	sonTable4[1].pJudgeFun = isEqual;
	sonTable4[1].nextState = 10;

	sonTable4[2].pJudgeFun = isNotEqualAdd;
	sonTable4[2].nextState = 8;
}

void changeState(int &state)
{
	if(mainTable[state].isEnd == true)
	{
		mainTable[state].pDoFun();
	}
	else
	{
		state = searchSonTable(mainTable[state].pNextTable, mainTable[state].nextTableSize, state, inputChar);
	}
}

int searchSonTable(SonTableItem pSonTable, int tableSize, int state, char inputChar)
{
	for(i=0; i<tableSize; i++)
	{
		if(pSonTable[i].inputChar == inputChar)
		{
			return pSonTable[i].state;
		}
	}
}

⌨️ 快捷键说明

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