📄 gentree.cpp
字号:
#include "stdafx.h"
#include "string.h"
#include "GenTree.h"
CTreeToken::CTreeToken()
{
strcpy(TreeTokenH,"");
strcpy(TreeTokenN,"");
TreeTokenDes=0;
}
int CTree::GenTreeToken(EToken* TmpETo,int ETokenN_Index)
{
CTreeToken TmpTreeToken1;
CTreeToken TmpDesToken1;
CTreeToken* TmpTreeToken=&TmpTreeToken1;
CTreeToken* TmpDesToken=&TmpDesToken1;
if(TmpETo->ETokenKind==1)//#program
{
strcpy(TmpTreeToken->TreeTokenH,"Keyword");
strcpy(TmpTreeToken->TreeTokenN,"#program");
TmpTreeToken->TreeTokenKind=1;//keyword
TreeStack.push_back(*TmpTreeToken);
TmpDesToken->TreeTokenDes=1;//descriminator=1
TreeStack.push_back(*TmpDesToken);
return 1;
}
if(TmpETo->ETokenKind==2)//#var #:
{
strcpy(TmpTreeToken->TreeTokenH,"Keyword");
strcpy(TmpTreeToken->TreeTokenN,"#var");
TmpTreeToken->TreeTokenKind=1;//keyword
TreeStack.push_back(*TmpTreeToken);
TmpDesToken->TreeTokenDes=1;//descriminator=1
TreeStack.push_back(*TmpDesToken);
return 2;
}
if(TmpETo->ETokenKind==8)//end
{
strcpy(TmpTreeToken->TreeTokenH,"Keyword");
strcpy(TmpTreeToken->TreeTokenN,"#end");
TmpTreeToken->TreeTokenKind=1;//keyword
TreeStack.push_back(*TmpTreeToken);
TmpDesToken->TreeTokenDes=1;//descriminator=1
TreeStack.push_back(*TmpDesToken);
return 8;
}
if(TmpETo->ETokenKind==3)//x1=3;
{
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenLeft);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
strcpy(TmpTreeToken->TreeTokenH,"const");
TmpTreeToken->TreeTokenV=TmpETo->ETokenRN_1;
TmpTreeToken->TreeTokenKind=3;//const
TreeStack.push_back(*TmpTreeToken);
TmpDesToken->TreeTokenDes=1;//descriminator=1
TreeStack.push_back(*TmpDesToken);
return 3;
}
if(TmpETo->ETokenKind==4)//x1=3+3;
{
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenLeft);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
strcpy(TmpTreeToken->TreeTokenH,"const");
TmpTreeToken->TreeTokenV=TmpETo->ETokenRN_1;
TmpTreeToken->TreeTokenKind=3;//const
TreeStack.push_back(*TmpTreeToken);
strcpy(TmpTreeToken->TreeTokenH,"const");
TmpTreeToken->TreeTokenV=TmpETo->ETokenRN_2;
TmpTreeToken->TreeTokenKind=3;//const
TreeStack.push_back(*TmpTreeToken);
TmpDesToken->TreeTokenDes=1;//descriminator=1
TreeStack.push_back(*TmpDesToken);
return 4;
}
if(TmpETo->ETokenKind==5)//x1=x2;
{
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenLeft);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenR_1);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
TmpDesToken->TreeTokenDes=1;//descriminator=1
TreeStack.push_back(*TmpDesToken);
return 5;
}
if(TmpETo->ETokenKind==6)//x1=x2+3;
{
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenLeft);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenR_1);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
strcpy(TmpTreeToken->TreeTokenH,"const");
TmpTreeToken->TreeTokenV=TmpETo->ETokenRN_2;
TmpTreeToken->TreeTokenKind=3;//const
TreeStack.push_back(*TmpTreeToken);
TmpDesToken->TreeTokenDes=1;//descriminator=1
TreeStack.push_back(*TmpDesToken);
return 6;
}
if(TmpETo->ETokenKind==7)//x1=x2+x3;
{
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenLeft);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenR_1);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenR_2);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
TmpDesToken->TreeTokenDes=1;//descriminator=1
TreeStack.push_back(*TmpDesToken);
return 7;
}
if(TmpETo->ETokenKind==9)//x1=2+x3;
{
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenLeft);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
strcpy(TmpTreeToken->TreeTokenH,"const");
TmpTreeToken->TreeTokenV=TmpETo->ETokenRN_1;
TmpTreeToken->TreeTokenKind=3;//const
TreeStack.push_back(*TmpTreeToken);
strcpy(TmpTreeToken->TreeTokenH,"var");
strcpy(TmpTreeToken->TreeTokenN,TmpETo->ETokenR_2);
TmpTreeToken->TreeTokenKind=2;//var
TreeStack.push_back(*TmpTreeToken);
TmpDesToken->TreeTokenDes=1;//descriminator=1
TreeStack.push_back(*TmpDesToken);
return 7;
}
return 0;
}
int CTree::GetTree(ETokenMan* ETokenM)
{
int len=ETokenM->GetExpNum();
int Index=0;
for(int i=0;i<len;i++)
{
GenTreeToken(&(ETokenM->ExpStack[Index]),Index);
Index++;
}
return 1;
}
int CTree::PrintTreeToken()
{
int lenTT=0;
lenTT=TreeStack.size();
for(int i=0;i<lenTT;i++)
{
if(TreeStack[i].TreeTokenDes==0)
{
if(TreeStack[i].TreeTokenKind==1)
{
cout<<"("<<TreeStack[i].TreeTokenH<<","<<TreeStack[i].TreeTokenN<<")"<<" ";
}
if(TreeStack[i].TreeTokenKind==2)
{
cout<<"("<<TreeStack[i].TreeTokenH<<","<<(TreeStack[i].TreeTokenN)<<")"<<" ";
}
if(TreeStack[i].TreeTokenKind==3)
{
cout<<"("<<TreeStack[i].TreeTokenH<<","<<TreeStack[i].TreeTokenV<<")"<<" ";
}
}
if(TreeStack[i].TreeTokenDes!=0)
{
cout<<endl;
}
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -