📄 funclist.cpp
字号:
/*
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 + -