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

📄 symtbl.cpp

📁 虚拟机设计与实现——C/C++
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}/*end printSymTbl*/

/*-----------------------------------------------------------------*/

void SymbolTable::printGlobVar(struct GlobalVariable *ptr)
{
	printf("GLOBAL VAR--------------\n");
	printf("identifier=%s\n",&((*strTbl).text[(*ptr).text]));
	printf("data type=%s\n",globSz[(*ptr).dType]);
	printf("length="); pU8((*ptr).len); printf("\n");
	printf("size="); pU8((*ptr).size); printf("\n");
	printf("offset="); pS8(-((S8)(*ptr).offset)); printf("\n");
	printf("line=%lu\n",(*ptr).line); 
	return;

}/*end printGlobVar*/

/*-----------------------------------------------------------------*/

void SymbolTable::printProc(struct Procedure *ptr)
{
	U4 i;
	printf("PROC--------------------\n");
	printf("identifier=%s\n",&((*strTbl).text[(*ptr).text]));
	printf("address="); pU8((*ptr).address); printf("\n");
	printf("line=%lu\n\n",(*ptr).line);

	if((*ptr).nRet)
	{
		printf("RET\n");
		printf("\tid=%s\n",&((*strTbl).text[((*ptr).ret).text]));
		printf("\tfpOffset=%ld\n",((*ptr).ret).fpOffset);
		printf("\tline=%lu\n",((*ptr).ret).line);
	}

	printf("ARGS\n");
	for(i=0;i<(*ptr).iArg;i++)
	{
		printf("\t%d)",i);
		printf("id=%s\n",&((*strTbl).text[((*ptr).arg[i]).text]));
		printf("\tfpOffset=%ld\n",((*ptr).arg[i]).fpOffset);
		printf("\tline=%lu\n",((*ptr).arg[i]).line);
	}
	printf("LOCALS\n");
	for(i=0;i<(*ptr).iLocal;i++)
	{
		printf("\t%d)",i);
		printf("id=%s\n",&((*strTbl).text[((*ptr).local[i]).text]));
		printf("\tfpOffset=%ld\n",((*ptr).local[i]).fpOffset);
		printf("\tline=%lu\n",((*ptr).local[i]).line);
	}
	printf("LABELS\n");
	for(i=0;i<(*ptr).iLabel;i++)
	{
		printf("\t%d)",i);
		printf("id=%s\n",&((*strTbl).text[((*ptr).label[i]).text]));
		printf("\taddress="); 
		pU8(((*ptr).label[i]).address); 
		printf("\n");
		printf("\tline=%lu\n",((*ptr).label[i]).line);
	}
	return;

}/*end printProc*/

/*-----------------------------------------------------------------*/

void SymbolTable::test()
{
	U8 str_index;
	char name[32];
	struct GlobalVariable globvar;

	struct Procedure proc;
	struct StackFrame sf;
	struct Label label;

	strcpy(name,"gVar_1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	globvar.text=str_index;
	globvar.dType=1;
	globvar.len=globvar.size=globvar.offset=globvar.line=0;
	addGlobVar(&globvar);

	strcpy(name,"gVar_2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	globvar.text=str_index;
	globvar.dType=1;
	globvar.len=globvar.size=globvar.offset=globvar.line=0;
	addGlobVar(&globvar);

	strcpy(name,"gVar_3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	globvar.text=str_index;
	globvar.dType=1;
	globvar.len=globvar.size=globvar.offset=globvar.line=0;
	addGlobVar(&globvar);

	strcpy(name,"gVar_4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	globvar.text=str_index;
	globvar.dType=1;
	globvar.len=globvar.size=globvar.offset=globvar.line=0;
	addGlobVar(&globvar);

	strcpy(name,"gVar_5");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	globvar.text=str_index;
	globvar.dType=1;
	globvar.len=globvar.size=globvar.offset=globvar.line=0;
	addGlobVar(&globvar);

	/*add 4 procedures*/

	strcpy(name,"proc1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	proc.text=str_index;
	proc.address = proc.line = 0;
	addProc(&proc);
	strcpy(name,"proc1_ret");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	setProcRetHL(&sf);
	strcpy(name,"proc1_arg1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc1_arg2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc1_arg3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc1_arg4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc1_loc1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc1_loc2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc1_loc3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc1_loc4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc1_lbl1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc1_lbl2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc1_lbl3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc1_lbl4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);

	strcpy(name,"proc2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	proc.text=str_index;
	proc.address = proc.line = 0;
	addProc(&proc);
	strcpy(name,"proc2_ret");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	setProcRetHL(&sf);
	strcpy(name,"proc2_arg1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc2_arg2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc2_arg3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc2_arg4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc2_loc1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc2_loc2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc2_loc3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc2_loc4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc2_lbl1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc2_lbl2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc2_lbl3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc2_lbl4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);

	strcpy(name,"proc3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	proc.text=str_index;
	proc.address = proc.line = 0;
	addProc(&proc);
	strcpy(name,"proc3_ret");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	setProcRetHL(&sf);
	strcpy(name,"proc3_arg1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc3_arg2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc3_arg3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc3_arg4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc3_loc1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc3_loc2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc3_loc3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc3_loc4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc3_lbl1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc3_lbl2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc3_lbl3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc3_lbl4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);

	strcpy(name,"proc4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	proc.text=str_index;
	proc.address = proc.line = 0;
	addProc(&proc);
	strcpy(name,"proc4_ret");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	setProcRetHL(&sf);
	strcpy(name,"proc4_arg1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc4_arg2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc4_arg3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc4_arg4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcArgHL(&sf);
	strcpy(name,"proc4_loc1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc4_loc2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc4_loc3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc4_loc4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	sf.text = str_index;
	sf.fpOffset = sf.line =0;
	addProcLocHL(&sf);
	strcpy(name,"proc4_lbl1");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc4_lbl2");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc4_lbl3");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);
	strcpy(name,"proc4_lbl4");
	str_index = (*strTbl).iStr;
	(*strTbl).addStrTbl(name);
	label.text = str_index;
	label.address = label.line =0;
	addProcLblHL(&label);


	printSymTbl();
	(*strTbl).printStrTbl();
	return;

}/*end test*/

⌨️ 快捷键说明

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