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

📄 funclist.cpp

📁 这可是我的倾情制作
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/*
These functions provide sematic analyze for compile task
Their func num is just the user-defined FunID in the from of product.
::G_CurProductNum can access current product num; not FuncID;
get this product through G_ProductSet.Product[::G_CurProductNum]
*/
void Func1()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	PrintProduct(TempProduct->Position);
}
void Func2()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	PrintProduct(TempProduct->Position);
}
void Func3()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	PrintProduct(TempProduct->Position);
}
void Func4()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	PrintProduct(TempProduct->Position);
}
void Func5()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	PrintProduct(TempProduct->Position);
}

//6 @functiondefinition@ @funchead@ @compoundstatement@ $
//Restore ::CurSymbolTable back to RootSymbolTable
//My original design support multi-layer function implementation
//But in fact I found it unnecessary..
void Func6()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	
	/*------Generate Return code in the end ---------*/
	::AddFourNode(::G_InstrumentList,IRTRN,NULL,NULL,NULL);
	/*------Restore to Father node-------*/
	::CurSymbolTable = ::CurSymbolTable->FatherPoint;

	PrintProduct(TempProduct->Position);
}

//-------------------------------------------------------------+
//7 @funchead@ @typespecifiers@ @identifier@ @m1@ @parameter@ $|
//-------------------------------------------------------------+
//8 @m1@ $
void Func7()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*=============Begin Befor Pop==============*/
    /*=============End Before Pop==============*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	/*=============Begin After Push==============*/
    /*=============End After Push==============*/
	PrintProduct(TempProduct->Position);
}

//7 @funchead@ @typespecifiers@ @identifier@ @m1@ @parameter@ $
//---------+
//8 @m1@ $ |
//---------+
void Func8()
{
	int TopState,tempType,tempWidth;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	/*=============Begin Befor Pop==============*/
	::G_TempStackNode = ::GetStackNode(1,::StateTokenStack);
	tempType = G_TempStackNode->Type;
	tempWidth = G_TempStackNode->Width;
	::G_TempStackNode = ::GetStackNode(0,::StateTokenStack);
	::SetSymbolInfo(::G_TempStackNode->Place,tempType,TFUNC,::CurSymbolTable->MemOffset,::ConstructSymbolTable(::CurSymbolTable));
	::CurSymbolTable->MemOffset += tempWidth;
	/*---------Enter into Func SymbolTable-------*/
	::AddFourNode(::G_InstrumentList,IFUN,NULL,NULL,::G_TempStackNode->Place->pInfo);	/*Generate Enter Function Code if necessary*/
	::CurSymbolTable = ::G_TempStackNode->Place->ChildPoint.FuncPoint;
	::CurSymbolTable->StmOffset = ::G_InstrumentList->Length;	/*Set this fun's first instrument*/
    /*=============End Before Pop==============*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);

	PrintProduct(TempProduct->Position);
}
void Func9()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	PrintProduct(TempProduct->Position);
}

void Func10()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	PrintProduct(TempProduct->Position);
}

void Func11()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	PrintProduct(TempProduct->Position);
}

void Func12()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	PrintProduct(TempProduct->Position);
}


//13 @declaration@ @typespecifiers@ @directdeclarator@ $
void Func13()
{
	int TopState,tempType,tempWidth;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	pSymbolType TempSymbol;

	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*=============Begin Befor Pop==============*/
	::G_TempStackNode = ::GetStackNode(1,::StateTokenStack);
	tempType = G_TempStackNode->Type;
	tempWidth = G_TempStackNode->Width;
	::G_TempStackNode = ::GetStackNode(0,::StateTokenStack);
	::SetSymbolInfo(::G_TempStackNode->Place,tempType,TCOMMON,::CurSymbolTable->MemOffset,NULL);
	::CurSymbolTable->MemOffset += tempWidth;
    /*=============End Before Pop==============*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	/*=============Begin After Push==============*/
	::G_TempStackNode = ::GetStackNode(0,::StateTokenStack);
	::G_TempStackNode->Type = tempType;
	::G_TempStackNode->Width = tempWidth;
    /*=============End After Push==============*/
	PrintProduct(TempProduct->Position);
}

//14 @declaration@ @declaration@ , @directdeclarator@ $
void Func14()
{
	int TopState,tempType,tempWidth;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	pSymbolType TempSymbol;

	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*=============Begin Befor Pop==============*/
	::G_TempStackNode = ::GetStackNode(2,::StateTokenStack);
	tempType = G_TempStackNode->Type;
	tempWidth = G_TempStackNode->Width;
	::G_TempStackNode = ::GetStackNode(0,::StateTokenStack);
	::SetSymbolInfo(::G_TempStackNode->Place,tempType,TCOMMON,::CurSymbolTable->MemOffset,NULL);
	::CurSymbolTable->MemOffset += tempWidth;
    /*=============End Before Pop==============*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	/*=============Begin After Push==============*/
	::G_TempStackNode = ::GetStackNode(0,::StateTokenStack);
	::G_TempStackNode->Type = tempType;
	::G_TempStackNode->Width = tempWidth;
    /*=============End After Push==============*/	
	PrintProduct(TempProduct->Position);
}

//15 @typespecifiers@ void $
void Func15()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	/*=============Begin After Push==============*/
	::G_TempStackNode = ::GetStackNode(0,::StateTokenStack);
	::G_TempStackNode->Type = TVOID;
	::G_TempStackNode->Width = 0;
	/*=============End After Push==============*/
	PrintProduct(TempProduct->Position);
}

//16 @typespecifiers@ char $
void Func16()
{
	int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	/*=============Begin After Push==============*/
	::G_TempStackNode = ::GetStackNode(0,::StateTokenStack);
	::G_TempStackNode->Type = TCHAR;
	::G_TempStackNode->Width = 1;
	/*=============End After Push==============*/
	PrintProduct(TempProduct->Position);
}

//17 @typespecifiers@ int $
void Func17()
{int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	/*=============Begin After Push==============*/
	::G_TempStackNode = ::GetStackNode(0,::StateTokenStack);
	::G_TempStackNode->Type = TINT;
	::G_TempStackNode->Width = 2;
	/*=============End After Push==============*/
	PrintProduct(TempProduct->Position);
}

//18@typespecifiers@ float $
void Func18()
{int TopState;pGotoNodeType	TempGotoNode;
    pProductItemType	TempProduct;
	TempProduct = G_ProductSet.Product[::G_CurProductNum];
	/*Deal with current state*/
	if(TempProduct->TokenList[0]!=KONG)
		MyPopStack(TempProduct->Length,StateTokenStack);
	TopState = GetTopState(StateTokenStack);
	TempGotoNode = FindGotoNode(TopState,TempProduct->HeadToken);
	Push(TempProduct->HeadToken,TempGotoNode->ParaNum,StateTokenStack);
	/*=============Begin After Push==============*/

⌨️ 快捷键说明

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