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

📄 gentree.cpp

📁 一个简单实现了词法分析
💻 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 + -